デプロイとオーケストレーション

コンテナー化を行うと、クラウドやデータセンターに対してのアプリケーションの移行やスケーリングを容易にしてくれます。 コンテナーというものは、アプリケーションをどこで動作させても同じように動くことが保証されるものであり、すべての環境下においてその性能をすばやく簡単に利用できます。 アプリケーションをスケールアップするときには、アプリケーションのメンテナンスを自動化するツールが必要になってきます。 また動作不良を起こしたコンテナーを自動的に置き換えたり、コンテナー稼働中でのアップデート適用や再設定管理ができることが求められます。

コンテナー化アプリケーションを管理しスケール変更や保守を行うツールのことをオーケストレーター (orchestrator) と呼びます。 もっとも人気のあるオーケストレーションツールが Kubernetes と Docker Swarm の二つです。 Docker Desktop ではこの二つのオーケストレーター双方に対する開発環境を提供しています。

この高度なモジュールを利用して以下のことを学んでいきます。

  1. 開発環境上にて Kubernetes 環境を構築して利用する
  2. 開発環境上にて Swarm 環境を構築して利用する

Kubernetes の有効化

Docker Desktop では Kubernetes をすばやく簡単に設定することができます。 利用しているオペレーティングシステムに合わせて、以下の設定および確認手順を進めてください。


Mac

  1. Docker Dashboard から Settings (設定) 画面を開き Kubernetes タブをクリックします。

  2. Enable Kubernetes (Kubernetes の有効化) と書かれたチェックボックスにチェックを入れ、Apply & Restart (適用&再起動) をクリックします。 Docker Desktop は Kubernetes 設定を自動的に行います。 Kubernetes が有効になったかどうかは、Settings (設定) メニューの 'Kubernetes running' と書かれたラベルの横に緑色のライトがつくことで分かります。

  3. 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 を行います。

  4. 端末において pod.yaml を生成したディレクトリに移動して、以下のようにして pod を生成します。

    $ kubectl apply -f pod.yaml
    
  5. pod が起動しているかどうかを、以下のようにして確認します。

    $ kubectl get pods
    

    次のような出力が得られるはずです。

    NAME      READY     STATUS    RESTARTS   AGE
    demo      1/1       Running   0          4s
  6. 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
    ...
  7. 最後はこのテスト用の pod を終了させます。

    $ kubectl delete -f pod.yaml
    

Windows

  1. Docker Dashboard から Settings (設定) 画面を開き Kubernetes タブをクリックします。

  2. Enable Kubernetes (Kubernetes の有効化) と書かれたチェックボックスにチェックを入れ、Apply & Restart (適用&再起動) をクリックします。 Docker Desktop は Kubernetes 設定を自動的に行います。 Kubernetes が有効になったかどうかは、Settings (設定) メニューの 'Kubernetes running' と書かれたラベルの横に緑色のライトがつくことで分かります。

  3. 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 を行います。

  4. PowerShell において pod.yaml を生成したディレクトリに移動して、以下のようにして pod を生成します。

    $ kubectl apply -f pod.yaml
    
  5. pod が起動しているかどうかを、以下のようにして確認します。

    $ kubectl get pods
    

    次のような出力が得られるはずです。

    NAME      READY     STATUS    RESTARTS   AGE
    demo      1/1       Running   0          4s
  6. 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
    ...
  7. 最後はこのテスト用の pod を終了させます。

    $ kubectl delete -f pod.yaml
    

Docker Swarm の有効化

Docker Desktop は主に Docker Engine 上で動作します。 その 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.
  2. alpine ベースのファイルシステムを利用する単純な Docker サービスを実行します。 そして 8.8.8.8 への ping を行います。

    $ docker service create --name demo alpine:latest ping 8.8.8.8
    
  3. 起動した一つのコンテナーにより生成されたサービスを確認します。

    $ 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
  4. 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
    ...
  5. 最後はこのテスト用のサービスを終了させます。

    $ 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.
  2. alpine ベースのファイルシステムを利用する単純な Docker サービスを実行します。 そして 8.8.8.8 への ping を行います。

    $ docker service create --name demo alpine:latest ping 8.8.8.8
    
  3. 起動した一つのコンテナーにより生成されたサービスを確認します。

    $ 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
  4. 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
    ...
  5. 最後はこのテスト用のサービスを終了させます。

    $ docker service rm demo
    

まとめ

ここまで、Kubernetes や Swarm を使って単純なコンテナー化アプリが起動できることを確認しました。 次のステップでは、そのコンテナーを実行し管理することを定義する YAML ファイルの書き方について説明します。

CLI リファレンス

本文において用いた CLI コマンドの詳細については、以下を参照してください。