オーケストレーション

読む時間の目安: 6 分

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

コンテナー化アプリケーションを管理しスケール変更や保守を行うツールのことを オーケストレーター(orchestrator) と呼びます。 その具体例が KubernetesDocker Swarm です。 この2つのオーケストレーターによる開発環境デプロイ機能は、Docker Desktop によって提供されています。 本ガイドでは、これからオーケストレーションされた、コンテナー化アプリケーションを生成するために、このオーケストレーターを利用していきます。

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

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

Kubernetes の有効化

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

Mac

  1. Docker Desktop のインストール後には、メニューバー上に Docker アイコンが表示されます。 これをクリックして Preferences > Kubernetes を実行します。

  2. Enable Kubernetes と書かれたチェックボックスにチェックを入れて Apply & Restart をクリックします。 Docker Desktop が自動的に Kubernetes を設定します。 Preferences メニューにおいて ‘Kubernetes running’ と書かれた横にグリーンライトが表示されるので、これによって Kubernetes が正常に有効化されたことがわかります。

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

  4. 端末にてpod.yamlを生成したディレクトリに移動しポッドを生成します。

    $ kubectl apply -f pod.yaml
    
  5. ポッドが起動して実行中であることを確認します。

    $ 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. 作業を終えたらテスト用ポッドを削除します。

    $ kubectl delete -f pod.yaml
    

Windows

  1. Docker Desktop のインストール後には、システムトレイ上に Docker アイコンが表示されます。 アイコンを右クリックして Settings > Kubernetes を実行します。

  2. Enable Kubernetes と書かれたチェックボックスにチェックを入れて Apply & Restart をクリックします。 Docker Desktop が自動的に Kubernetes を設定します。 Settings メニューにおいて ‘Kubernetes running’ と書かれた横にグリーンライトが表示されるので、これによって Kubernetes が正常に有効化されたことがわかります。

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

  4. PowerShell においてpod.yamlを生成したディレクトリに移動しポッドを生成します。

    $ kubectl apply -f pod.yaml
    
  5. ポッドが起動して実行中であることを確認します。

    $ 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. 作業を終えたらテスト用ポッドを削除します。

    $ kubectl delete -f pod.yaml
    

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.
    
  2. 単純な Docker サービスを実行します。 これは alpine ベースのファイルシステムを利用するものであり、8.8.8.8 への ping プロセスを実行します。

    $ docker service create --name demo alpine:latest ping 8.8.8.8
    
  3. サービスから 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
    
  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. 単純な Docker サービスを実行します。 これは alpine ベースのファイルシステムを利用するものであり、8.8.8.8 への ping プロセスを実行します。

    $ docker service create --name demo alpine:latest ping 8.8.8.8
    
  3. サービスから 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
    
  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 を使って単純なコンテナー化アプリが起動できることを確認しました。 次のステップでは Kubernetes 上にてコンテナーの起動と管理を行うための Kubenetes yaml の記述方法を学びます。

Kubernetes へのデプロイ >>

Swarm 上にて、コンテナーの起動と管理を行うためのファイル記述方法については Swarm へのデプロイ を参照してください。

CLI リファレンス

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

orchestration, deploy, kubernetes, swarm