オーケストレーション
読む時間の目安: 6 分
コンテナー化プロセスが移植性や再生産性に優れているということは、つまりコンテナー化アプリケーションをクラウドやデータセンター間において移行させスケール変更が容易になるということです。 コンテナーというものは、アプリケーションをどこで動作させても同じように動くことが保証されるものであり、すべての環境下においてその性能をすばやく簡単に利用できます。 アプリケーションをスケールアップするときには、アプリケーションのメンテナンスを自動化するツールが必要になってきます。 また動作不良をおこしたコンテナーを自動的に置き換えたり、コンテナー稼働中でのアップデートの適用や再設定の管理ができることが求められます。
コンテナー化アプリケーションを管理しスケール変更や保守を行うツールのことを オーケストレーター(orchestrator) と呼びます。 その具体例が Kubernetes と Docker Swarm です。 この2つのオーケストレーターによる開発環境デプロイ機能は、Docker Desktop によって提供されています。 本ガイドでは、これからオーケストレーションされた、コンテナー化アプリケーションを生成するために、このオーケストレーターを利用していきます。
この高度なモジュールを利用して以下のことを学んでいきます。
Kubernetes の有効化
Docker Desktop では Kubernetes をすばやく簡単に設定することができます。 利用しているオペレーティングシステムに合わせて、以下の設定および確認手順を進めてください。
Mac
-
Docker Desktop のインストール後には、メニューバー上に Docker アイコンが表示されます。 これをクリックして Preferences > Kubernetes を実行します。
-
Enable Kubernetes と書かれたチェックボックスにチェックを入れて Apply & Restart をクリックします。 Docker Desktop が自動的に Kubernetes を設定します。 Preferences メニューにおいて ‘Kubernetes running’ と書かれた横にグリーンライトが表示されるので、これによって Kubernetes が正常に有効化されたことがわかります。
-
Kubernetes が起動していることを確認するために、
pod.yaml
というテキストファイルを生成し、その内容を以下のようにします。apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - name: testpod image: alpine:latest command: ["ping", "8.8.8.8"]
これは1つのコンテナー内に1つのポッド(pod)を定義し、単純に 8.8.8.8 への ping を行います。
-
端末にて
pod.yaml
を生成したディレクトリに移動しポッドを生成します。$ kubectl apply -f pod.yaml
-
ポッドが起動して実行中であることを確認します。
$ 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 ...
-
作業を終えたらテスト用ポッドを削除します。
$ kubectl delete -f pod.yaml
Windows
-
Docker Desktop のインストール後には、システムトレイ上に Docker アイコンが表示されます。 アイコンを右クリックして Settings > Kubernetes を実行します。
-
Enable Kubernetes と書かれたチェックボックスにチェックを入れて Apply & Restart をクリックします。 Docker Desktop が自動的に Kubernetes を設定します。 Settings メニューにおいて ‘Kubernetes running’ と書かれた横にグリーンライトが表示されるので、これによって Kubernetes が正常に有効化されたことがわかります。
-
Kubernetes が起動していることを確認するために、
pod.yaml
というテキストファイルを生成し、その内容を以下のようにします。apiVersion: v1 kind: Pod metadata: name: demo spec: containers: - name: testpod image: alpine:latest command: ["ping", "8.8.8.8"]
これは1つのコンテナー内に1つのポッド(pod)を定義し、単純に 8.8.8.8 への ping を行います。
-
PowerShell において
pod.yaml
を生成したディレクトリに移動しポッドを生成します。$ kubectl apply -f pod.yaml
-
ポッドが起動して実行中であることを確認します。
$ 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 ...
-
作業を終えたらテスト用ポッドを削除します。
$ kubectl delete -f pod.yaml
Docker Swarm の有効化
Docker Desktop は主に Docker 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.
-
単純な Docker サービスを実行します。 これは alpine ベースのファイルシステムを利用するものであり、8.8.8.8 への ping プロセスを実行します。
$ docker service create --name demo alpine:latest ping 8.8.8.8
-
サービスから 1 つのコンテナーが生成されていることを確認します。
$ 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.
-
単純な Docker サービスを実行します。 これは alpine ベースのファイルシステムを利用するものであり、8.8.8.8 への ping プロセスを実行します。
$ docker service create --name demo alpine:latest ping 8.8.8.8
-
サービスから 1 つのコンテナーが生成されていることを確認します。
$ 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 を使って単純なコンテナー化アプリが起動できることを確認しました。 次のステップでは Kubernetes 上にてコンテナーの起動と管理を行うための Kubenetes yaml の記述方法を学びます。
Swarm 上にて、コンテナーの起動と管理を行うためのファイル記述方法については Swarm へのデプロイ を参照してください。
CLI リファレンス
本説明において利用した CLI コマンドの詳細については、以下を参照してください。
orchestration, deploy, kubernetes, swarm