オーケストレーション

コンテナ化したプロセスのポータビリティ(移植性)と再利用性が意味するのは、コンテナ化アプリケーションに対し、クラウドやデータセンタを横断して移動およびスケールする機会を提供します。コンテナの効率性を確保するのは、各アプリケーションをどこでも同じ手法によって実行することであり、様々な環境において素早く簡単に利用できるようになります。さらに、アプリケーションのスケールアップをするとき、各アプリケーションの維持を自動的に助けてくれるので、障害の発生したコンテナを自動的に置き換えることも可能です。さらに、更新のロールアウト管理と各コンテナの再設定も、ライフサイクルに含められます。

ツールは、コンテナ化アプリケーションを管理・スケール・メンテナンスするためのもので、これらを オーケストレータ(orchestrator) * と呼びます。そして、最もオーケストレータとして例示されるのが *KubernetesDocker Swarm です。これらのオーケストレータを使った開発環境のデプロイに、 Docker Desktop が対応しています。このガイドでは、初めてオーケストレートするコンテナ化アプリケーションを作成する場所として、Docker Desktop を使います。

高度な内容を通し、あなたに次の方法を教えます:

  1. 開発マシン上で、 Kubernetes 環境のセットアップと利用

  2. 開発マシン上で、 Docker Swarm のセットアップと利用

Kubernetes の有効化

Docker Desktop は Kubernetes を素早く簡単にセットアップします。以下のセットアップと様々な手順は、適切なオペレーティングシステムを選んでください。

Mac

  1. Docker Desktop をインストールしたら、メニューバー上に Docker アイコンが見えるでしょう。それをクリックし、 Preferences > Kubernetes を選びます。

  1. Enable Kubernetes とラベルのついたチェックボックスにチェックを入れ、 Apply & Restart をクリックします。Docker Desktop は自動的に Kubernetes をセットアップします。設定上のメニューで「Kubernetes running」と横に緑のライトが付いていれば、Kubernetes は正常に有効化されたことが分かります。

  1. 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 を実行します。

  1. それからターミナル上で、 pod.yaml を作成した場所に移動し、pod を作成します。

$ kubectl apply -f pod.yaml
  1. ポッドが起動して動いているかどうか調べます。

$ kubectl get pods

次のような表示が見えます:

NAME      READY     STATUS    RESTARTS   AGE
demo      1/1       Running   0          4s
  1. ログを取得し、 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
...
  1. 最後に、テスト pod を解体(tear down)します。

$ kubectl delete -f pod.yaml

Windows

  1. Docker Desktop をインストールしたら、メニューバー上に Docker アイコンが見えるでしょう。それをクリックし、 Preferences > Kubernetes を選びます。

  1. Enable Kubernetes とラベルのついたチェックボックスにチェックを入れ、 Apply & Restart をクリックします。Docker Desktop は自動的に Kubernetes をセットアップします。設定上のメニューで「Kubernetes running」と横に緑のライトが付いていれば、Kubernetes は正常に有効化されたことが分かります。

  1. 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 を実行します。

  1. それから PowerShell 上で、 pod.yaml を作成した場所に移動し、pod を作成します。

$ kubectl apply -f pod.yaml
  1. ポッドが起動して動いているかどうか調べます。

$ kubectl get pods

次のような表示が見えます:

NAME      READY     STATUS    RESTARTS   AGE
demo      1/1       Running   0          4s
  1. ログを取得し、 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
...
  1. 最後に、テスト pod を解体(tear down)します。

$ kubectl delete -f pod.yaml

Enable Docker Swarm

Docker Swarm の有効化

Docker Desktop の Docker Engine に対して、実行に必要なすべてを内蔵 Swarm で優先処理するようにします。オペレーティングシステムにあわせて、適切なセットアップと手順に従ってください。

Mac

  1. ターミナルを開き、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.
  1. シンプルな Docker サービスを起動します。alpine をベースとしたファイルシステムを使い、8.8.8.8 に対する ping を隔離(isolate)します。

$ docker service create --name demo alpine:3.5 ping 8.8.8.8
  1. 確認のため、コンテナを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
  1. ログを取得し、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
...
  1. 最後にテストサービスを解体します。

    $ docker service rm demo

Windows

  1. 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.
  1. シンプルな Docker サービスを起動します。alpine をベースとしたファイルシステムを使い、8.8.8.8 に対する ping を隔離(isolate)します。

$ docker service create --name demo alpine:3.5 ping 8.8.8.8
  1. 確認のため、コンテナを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
  1. ログを取得し、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
...
  1. 最後にテストサービスを解体します。

    $ docker service rm demo

まとめ

この時点で、Kubernetes と Swarm でシンプルなコンテナ化ワークロードの実行を確認しました。次のステップでは、 Kubernetes 上でコンテナを実行・管理する方法を Kubernetes yaml に書きます。

Swarm 上でコンテナの実行と管理に役立つ stack ファイルを書く方法について学ぶには、 Swarm にデプロイ をご覧ください。

CLI リファレンス

この記事で使った CLI コマンドのすべての詳細ドキュメントは、以下にあります。