デプロイとオーケストレーション
コンテナー化を行うと、クラウドやデータセンターに対してのアプリケーションの移行やスケーリングを容易にしてくれます。 コンテナーというものは、アプリケーションをどこで動作させても同じように動くことが保証されるものであり、すべての環境下においてその性能をすばやく簡単に利用できます。 アプリケーションをスケールアップするときには、アプリケーションのメンテナンスを自動化するツールが必要になってきます。 また動作不良を起こしたコンテナーを自動的に置き換えたり、コンテナー稼働中でのアップデート適用や再設定管理ができることが求められます。
コンテナー化アプリケーションを管理しスケール変更や保守を行うツールのことをオーケストレーター (orchestrator) と呼びます。 もっとも人気のあるオーケストレーションツールが Kubernetes と Docker Swarm の二つです。 Docker Desktop ではこの二つのオーケストレーター双方に対する開発環境を提供しています。
この高度なモジュールを利用して以下のことを学んでいきます。
Kubernetes の有効化
Docker Desktop では Kubernetes をすばやく簡単に設定することができます。 利用しているオペレーティングシステムに合わせて、以下の設定および確認手順を進めてください。
Mac
Docker Dashboard から Settings (設定) 画面を開き Kubernetes タブをクリックします。
Enable Kubernetes (Kubernetes の有効化) と書かれたチェックボックスにチェックを入れ、Apply & Restart (適用&再起動) をクリックします。 Docker Desktop は Kubernetes 設定を自動的に行います。 Kubernetes が有効になったかどうかは、Settings (設定) メニューの 'Kubernetes running' と書かれたラベルの横に緑色のライトがつくことで分かります。
Kubernetes が起動中であることを確認するため、
pod.yaml
という名前のテキストファイルを生成して、以下の記述を書き加えます。apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - name: testpod image: alpine:latest command: ["ping", "8.8.8.8"]
この記述は、一つのコンテナーからなる pod (ポッド) を定義しています。 そして 8.8.8.8 への ping を行います。
端末において
pod.yaml
を生成したディレクトリに移動して、以下のようにして pod を生成します。$ kubectl apply -f pod.yaml
pod が起動しているかどうかを、以下のようにして確認します。
$ kubectl get pods
次のような出力が得られるはずです。
NAME READY STATUS RESTARTS AGE demo 1/1 Running 0 4s
ping 処理によって得られるであろうログを確認します。
$ kubectl logs demo
ping が正常処理されたことを示す出力が得られるはずです。
PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms 64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms 64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms ...
最後はこのテスト用の pod を終了させます。
$ kubectl delete -f pod.yaml
Windows
Docker Dashboard から Settings (設定) 画面を開き Kubernetes タブをクリックします。
Enable Kubernetes (Kubernetes の有効化) と書かれたチェックボックスにチェックを入れ、Apply & Restart (適用&再起動) をクリックします。 Docker Desktop は Kubernetes 設定を自動的に行います。 Kubernetes が有効になったかどうかは、Settings (設定) メニューの 'Kubernetes running' と書かれたラベルの横に緑色のライトがつくことで分かります。
Kubernetes が起動中であることを確認するため、
pod.yaml
という名前のテキストファイルを生成して、以下の記述を書き加えます。apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - name: testpod image: alpine:latest command: ["ping", "8.8.8.8"]
この記述は、一つのコンテナーからなる pod (ポッド) を定義しています。 そして 8.8.8.8 への ping を行います。
PowerShell において
pod.yaml
を生成したディレクトリに移動して、以下のようにして pod を生成します。$ kubectl apply -f pod.yaml
pod が起動しているかどうかを、以下のようにして確認します。
$ kubectl get pods
次のような出力が得られるはずです。
NAME READY STATUS RESTARTS AGE demo 1/1 Running 0 4s
ping 処理によって得られるであろうログを確認します。
$ kubectl logs demo
ping が正常処理されたことを示す出力が得られるはずです。
PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms 64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms 64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms ...
最後はこのテスト用の pod を終了させます。
$ kubectl delete -f pod.yaml
Docker Swarm の有効化
Docker Desktop は主に Docker Engine 上で動作します。 その Engine には埋め込みの Swarm を実行するために必要なものがすべて含まれています。 お使いのオペレーティングシステムに応じて、以下のセットアップおよび検証の手順を進めてください。
Mac
端末を開いて Docker Swarm モードの初期化を行います。
$ docker swarm init
すべてが正常処理されると、以下に示すようなメッセージが表示されるはずです。
Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
alpine ベースのファイルシステムを利用する単純な Docker サービスを実行します。 そして 8.8.8.8 への ping を行います。
$ docker service create --name demo alpine:latest ping 8.8.8.8
起動した一つのコンテナーにより生成されたサービスを確認します。
$ docker service ps demo
以下のように出力されるはずです。
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 463j2s3y4b5o demo.1 alpine:latest docker-desktop Running Running 8 seconds ago
ping 処理によって得られるであろうログを確認します。
$ docker service logs demo
ping が正常処理されたことを示す出力が得られるはずです。
demo.1.463j2s3y4b5o@docker-desktop | PING 8.8.8.8 (8.8.8.8): 56 data bytes demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms ...
最後はこのテスト用のサービスを終了させます。
$ docker service rm demo
Windows
PowerShell を開いて Docker Swarm モードの初期化を行います。
$ docker swarm init
すべてが正常処理されると、以下に示すようなメッセージが表示されるはずです。
Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
alpine ベースのファイルシステムを利用する単純な Docker サービスを実行します。 そして 8.8.8.8 への ping を行います。
$ docker service create --name demo alpine:latest ping 8.8.8.8
起動した一つのコンテナーにより生成されたサービスを確認します。
$ docker service ps demo
以下のように出力されるはずです。
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 463j2s3y4b5o demo.1 alpine:latest docker-desktop Running Running 8 seconds ago
ping 処理によって得られるであろうログを確認します。
$ docker service logs demo
ping が正常処理されたことを示す出力が得られるはずです。
demo.1.463j2s3y4b5o@docker-desktop | PING 8.8.8.8 (8.8.8.8): 56 data bytes demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms demo.1.463j2s3y4b5o@docker-desktop | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms ...
最後はこのテスト用のサービスを終了させます。
$ docker service rm demo
まとめ
ここまで、Kubernetes や Swarm を使って単純なコンテナー化アプリが起動できることを確認しました。 次のステップでは、そのコンテナーを実行し管理することを定義する YAML ファイルの書き方について説明します。
CLI リファレンス
本文において用いた CLI コマンドの詳細については、以下を参照してください。