オーケストレーション¶
コンテナ化したプロセスのポータビリティ(移植性)と再利用性が意味するのは、コンテナ化アプリケーションに対し、クラウドやデータセンタを横断して移動およびスケールする機会を提供します。コンテナの効率性を確保するのは、各アプリケーションをどこでも同じ手法によって実行することであり、様々な環境において素早く簡単に利用できるようになります。さらに、アプリケーションのスケールアップをするとき、各アプリケーションの維持を自動的に助けてくれるので、障害の発生したコンテナを自動的に置き換えることも可能です。さらに、更新のロールアウト管理と各コンテナの再設定も、ライフサイクルに含められます。
ツールは、コンテナ化アプリケーションを管理・スケール・メンテナンスするためのもので、これらを オーケストレータ(orchestrator) * と呼びます。そして、最もオーケストレータとして例示されるのが *Kubernetes と Docker Swarm です。これらのオーケストレータを使った開発環境のデプロイに、 Docker Desktop が対応しています。このガイドでは、初めてオーケストレートするコンテナ化アプリケーションを作成する場所として、Docker Desktop を使います。
高度な内容を通し、あなたに次の方法を教えます:
Kubernetes の有効化¶
Docker Desktop は Kubernetes を素早く簡単にセットアップします。以下のセットアップと様々な手順は、適切なオペレーティングシステムを選んでください。
Mac¶
Docker Desktop をインストールしたら、メニューバー上に Docker アイコンが見えるでしょう。それをクリックし、 Preferences > Kubernetes を選びます。
Enable Kubernetes とラベルのついたチェックボックスにチェックを入れ、 Apply & Restart をクリックします。Docker Desktop は自動的に Kubernetes をセットアップします。設定上のメニューで「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"]
これは pod 内に1つのコンテナが隔離された状態で、シンプルに 8.8.8.8 に対して ping を実行します。
それからターミナル上で、
pod.yaml
を作成した場所に移動し、pod を作成します。
$ 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
...
最後に、テスト pod を解体(tear down)します。
$ kubectl delete -f pod.yaml
Windows¶
Docker Desktop をインストールしたら、メニューバー上に Docker アイコンが見えるでしょう。それをクリックし、 Preferences > Kubernetes を選びます。
Enable Kubernetes とラベルのついたチェックボックスにチェックを入れ、 Apply & Restart をクリックします。Docker Desktop は自動的に Kubernetes をセットアップします。設定上のメニューで「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"]
これは pod 内に1つのコンテナが隔離された状態で、シンプルに 8.8.8.8 に対して ping を実行します。
それから PowerShell 上で、
pod.yaml
を作成した場所に移動し、pod を作成します。
$ 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
...
最後に、テスト pod を解体(tear down)します。
$ kubectl delete -f pod.yaml
Enable Docker Swarm
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 を隔離(isolate)します。
$ docker service create --name demo alpine:3.5 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 を隔離(isolate)します。
$ docker service create --name demo alpine:3.5 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 上でコンテナを実行・管理する方法を Kubernetes yaml に書きます。
Swarm 上でコンテナの実行と管理に役立つ stack ファイルを書く方法について学ぶには、 Swarm にデプロイ をご覧ください。
CLI リファレンス¶
この記事で使った CLI コマンドのすべての詳細ドキュメントは、以下にあります。
kubectl apply <https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply>
参考
- Orchestration