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 に対するネットワーク機能の追加を表すだけです。
アプリケーションののデプロイと確認¶
- アプリケーションを Swarm にデプロイします。
docker stack deploy -c bb-stack.yaml demo
正常に処理されれば、Swarm は全ての stack オブジェクトが問題なく作成されたと報告します。
Creating network demo_default
Creating service demo_bb-app
サービスに対する注意を追加すると、 Swarm は stack の一部として、Docker ネットワークもデフォルトでコンテナを隔離した状態で作成します。
- サービス一覧で、全てが動作しているのを確認します。
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 に転送されるのも分かります。
- ブラウザで
localhost:8000
を開き、掲示板を訪ねましょう。そうすると、クイックスタート・チュートリアルの Part 2 で実行したスタンドアロン・コンテナと同じ掲示板が表示されます。
- 満足したら、アプリケーションを解体します。
docker stack rm demo
まとめ¶
これまで、 Docker Desktop を使い、私たちの開発マシン上で全機能が揃った Swarm 環境に、私たちのアプリケーションをデプロイすることに成功しました。まだ Swarm をほとんど触っていませんが、新しいドアが開かれました。つまり、アプリケーションに他のコンポーネントを追加できますし、まさにあなたのマシン上で、Swarm の全ての機能とパワーを活用できるのです。
Swarm へのデプロイに付け加えると、アプリケーションを stack ファイルとして記述しました。これはシンプルなテキストファイルで、アプリケーションを実行状態として生成するために全てを含むものです。同僚とバージョンコントロールでチェックおよび共有できるようにすると、他のクラスタ(開発環境の後に続く、テストやプロダクションに対応したクラスタ)に対するアプリケーションの配布が簡単になります。
Swarm と CLI リファレンス¶
この記事で使われた新しい Swarm オブジェクトと CLI コマンドに関する詳しい情報は、こちらをご覧ください。
- Swarm サービス
- Swarm スタック
- docker stack *
- docker service *
参考
- Deploy to Swarm
- https://docs.docker.com/get-started/swarm-deploy/