Swarm にデプロイ

動作条件

  • 概要説明とセットアップ に記述された Docker Desktop のダウンロードとインストール

  • Part 2 でアプリケーションのコンテナ化を一通り行う

  • Docker Desktop 上で Swarm 機能が有効化されていることを確認するには、 docker system info を入力し、 Swarm: active の文字列を探します(画面を少々スクロールする必要があるでしょう)。

Swarm が実行中でなければ、シェルのプロンプト上でシンプルに docker swarm init を実行し、セットアップします。

はじめに

ここからは、私たちのアプリケーションの個々のコンポーネントを、Kubernetes スタンドアロン・コンテナ(stand-alone container)として実行してみましょう。Docker Swarm オーケストレータによって管理できるように、調整する機会です。Swarm はコンテナ化アプリケーションのをスケール、ネットワーク機能、安全性、管理するための多くのツールを提供し、コンテナ自身に前述および後述の能力を与えます。

私たちのコンテナ化アプリケーションが Swarm 上でも同様に動作するのを確認します。プロダクションの完全な Swarm クラスタにアプリケーションを持ち出す前に、開発マシン上にある Docker Desktop の Swarm 環境を使い、アプリケーションをデプロイします。Docker Desktop によって作成される Swarm 環境は、全ての機能を持ちます。つまり、アプリケーションが Swarm 環境で全て動作するのであれば、実際のクラスタ上でも動作しますので、開発マシン上からも簡単に利用できるのを意味します。

stack ファイルを使ってアプリケーションを記述

このチュートリアルは、以前のステップで行ったように、コンテナを1つ1つ作成するようなことは決してしません。そのかわりに、全ての Swarm ワークロードはサービス( service )としてスケジュールされます。これはスケーラブルな(拡張性を備えた)コンテナ のグループであり、Swarm によって自動的にメンテナンスされます。最終的に、全ての Swarm オブジェクトはマニフェストと呼ばれる stack ファイル に記述すべきです。これらの YAML ファイルは Swarm アプリの全コンポーネントと設定を記述します。そして、あらゆる Swarm 環境内でアプリケーションの作成と破棄を簡単に行えるようにします。

それでは、掲示板を実行・管理するための簡単な stack ファイルを書きましょう。 bb.yaml と名前を付けたファイルに、以下の内容を記述します。

version: '3.7'

services:
  bb-app:
    image: bulletinboard:1.0
    ports:
      - "8000:8080"

この Swarm YAML ファイルでは、 service という1つのオブジェクトのみあります。これはコンテナごとのスケーラブルなグループを記述します。今回の例では、1つのコンテナを持ちます(これがデフォルトです)。このコンテナは、このチュートリアル以前のステップで用いた bulletinboard:1.0 イメージをベースとするものです。さらに、 Swarm に対して開発マシン上のポート 8000 に到達した全てのトラフィックを、掲示板コンテナ内の 8080 に転送するよう依頼します。

注意

Kubernetes サービスと Swarm サービスは全く違います! 似たような名前ですが、「サービス」という単語を含む2つのオーケストレータの意味は非常に異なるものです。 Swarm では、スケジューリングとネットワーク・ファシリティの両方を提供し、コンテナを作成し、トラフィックをそこに転送するツールも提供します。Kubernetes では、スケジューリングとネットワーキングは別々に扱います。具体的には、deployment(あるいは、他のコントローラ)はコンテナのスケジューリングを Pod として処理し、サービスとは各 pod に対するネットワーク機能の追加を表すだけです。

アプリケーションののデプロイと確認

  1. アプリケーションを Swarm にデプロイします。

$ docker stack deploy -c bb-stack.yaml demo

正常に処理されれば、Swarm は全ての stack オブジェクトが問題なく作成されたと報告します。

Creating network demo_default
Creating service demo_bb-app

サービスに対する注意を追加すると、 Swarm は stack の一部として、Docker ネットワークもデフォルトでコンテナを隔離した状態で作成します。

  1. サービス一覧で、全てが動作しているのを確認します。

$ docker service ls

全て正常であれば、サービスは自身の作成したレプリカが 1/1 だと報告します。

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
il7elwunymbs        demo_bb-app         replicated          1/1                 bulletinboard:1.0   *:8000->8080/tcp

1/1 のコンテナと表示されているのは、サービスとしていくつのコンテナが起動しているかを示しています。また、開発マシン上のポート 8000 が、掲示板コンテナのポート 8080 に転送されるのも分かります。

  1. ブラウザで localhost:8000 を開き、掲示板を訪ねましょう。そうすると、クイックスタート・チュートリアルの Part 2 で実行したスタンドアロン・コンテナと同じ掲示板が表示されます。

  1. 満足したら、アプリケーションを解体します。

$ docker stack rm demo

まとめ

これまで、 Docker Desktop を使い、私たちの開発マシン上で全機能が揃った Swarm 環境に、私たちのアプリケーションをデプロイすることに成功しました。まだ Swarm をほとんど触っていませんが、新しいドアが開かれました。つまり、アプリケーションに他のコンポーネントを追加できますし、まさにあなたのマシン上で、Swarm の全ての機能とパワーを活用できるのです。

Swarm へのデプロイに付け加えると、アプリケーションを stack ファイルとして記述しました。これはシンプルなテキストファイルで、アプリケーションを実行状態として生成するために全てを含むものです。同僚とバージョンコントロールでチェックおよび共有できるようにすると、他のクラスタ(開発環境の後に続く、テストやプロダクションに対応したクラスタ)に対するアプリケーションの配布が簡単になります。

Swarm と CLI リファレンス

この記事で使われた新しい Swarm オブジェクトと CLI コマンドに関する詳しい情報は、こちらをご覧ください。