はじめに
今回はDockerで新しいイメージをビルドして、IBM CloudのROKSにデプロイする方法をご紹介します。
この記事で含む内容を簡単に説明すると、以下の3点です。
Step1 Docker イメージ作成 (Dockerでサンプルアプリをビルド)
Step2 Container Registryにpush (IBM Cloud Container Registoryにイメージをpush)
Step3 ROKS上にデプロイ (ROKSにイメージをpullしPodをデプロイ)
▲IBM Cloudを利用してのROKSクラスターの構築方法はこちらの記事から参照できます:
「ゼロから始めよう、ROKS on IBM CloudでのNginxサーバ構築」
https://qiita.com/jennyxu/items/c57b32af463b2e015eb0
▲本手順でデプロイしたアプリにインターネットからアクセスしたい場合はこちらのリンクを参照してください。
「IBM Cloud internet services (CIS)からROKSのpodにアクセスしてみた」
https://qiita.com/jennyxu/items/dc6b92049ba5af3c4c39
では、一緒にやってみましょう。
前提・環境
-
Docker desktop
(インストール:https://www.docker.com/products/docker-desktop
手順:https://sukkiri.jp/technologies/virtualizers/docker/docker-win_install.html) -
Docker desktopにnginx イメージをインストール
(https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/) -
IBM Cloudアカウント
-
IBM Cloud CLI
(インストール:https://cloud.ibm.com/docs/cli?topic=cli-install-ibmcloud-cli) -
OC CLI
(インストール:https://docs.openshift.com/container-platform/4.7/cli_reference/openshift_cli/getting-started-cli.html#installing-openshift-cli)
Step1 Docker イメージ作成
Step1では、既存の自作のHTMLを表示するためにカスタムnginx イメージを作成します。
Docker desktopがfileを参照可能なディレクトリは事前に指定されています。(以下の写真参照)いずれかのディレクトリにDockerfileを保存していないと、ビルド時に正しく読み込まないので注意してください。
本手順では、/Usersを使います。/path/to/exported/directoryに任意のpathを追加することも可能です。
ターミナルにて、/Usersに移動してDockerfile作成用のディレクトを作成します。
## /Usersに移動
$ cd /Users
## ディレクト作成
$ mkdir container-common
## 作成したディレクトに移動
$ cd container-common
では、簡単なhtml fileを作ります。
##file作成
$ vi index.html
index.htmlに下記の内容を書き込みます。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker container</title>
</head>
<body>
<h2>Hello my first container</h2>
</body>
</html>
次に、Dockerで作成するcontainer イメージを管理するためのDockerfileを作ります。
##同じディレクトにDockerfileを作成
$ vi Dockerfile
Dockerfileに下記の内容を書き込みます。
FROM nignx:latest
COPY ./index.html /usr/share/nginx/html/index.html
作成したDockerfileからカスタムnginxイメージをビルドします。その後、ビルドしたイメージで正常にコンテナが作成できることを確認します。
##Docker イメージビルド
$ docker build -t container-common:v1 .
##run Docker イメージ
$ docker run -it --rm -d -p 8080:80 --name web1 container-common:v1
以上の手順が完了すると、Docker desktopよりイメージとcontainerの状況が確認できます。Runningになっていれば正常にデプロイできていることが確認できます。
Step2 Container Registryにpush
IBM Cloud(cloud.ibm.com)にログインして、Container Registryをオーダーします。
「カタログ」→「Container Registry」と入力→「Container Registry」をクリック→右上の「開始する」をクリックしてください。
Container Registryのオーダーが完了したら、上記の手順にしたがって設定を行います。
↓ガイドの3番目から
$ibmcloud plugin install container-registry -r `IBM Cloud`
##IBM Cloudにログイン
$ ibmcloud login --apikey <API_KEY> -g rg-common -r jp-tok
$ ibmcloud cr region-set ap-north
##name sapce作成
$ ibmcloud cr namespace-add cr-common
$ ibmcloud cr login
$ docker pull hello-world
##タグを付ける
$ docker tag container-common:v1 jp.icr.io/cr-common/container-common:v1
##イメージをpush
$ docker push jp.icr.io/cr-common/container-common:v1
##イメージがRegistry内にあることを確認
$ ibmcloud cr image-list
IBM Cloudのコンソール画面から作成した名前空間が確認できます。
Step3 ROKS上にデプロイ
##ROKSにログイン
$ oc login -u apikey -p <API_KEY>
##project指定
$ oc project test-common
ターミナルからROKSクラスターへログインする方法は二つがあります。今回はApi keyでログインしましたが、OpenShiftコンソールログインコマンドを発行し、ログインする方法もあります。こちらの記事を参照してみてください:https://qiita.com/jennyxu/items/c57b32af463b2e015eb0
$ oc secrets link sa/default secrets/all-icr-io --for=pull -n default
$ oc run test-pod --image=jp.icr.io/cr-common/container-common:v1 --restart=Never
$ oc expose svc test-pod
$ oc get route
以上がDocker イメージのビルドから、IBM Cloud Container Registoryへのイメージのpush、そのイメージを利用してのROKS上にデプロイする方法になります。
ご参考になれば幸いです。
参考資料