Swarmでのデプロイ
Part 3ではKubernetesにアプリをデプロイした.
Part 4では同じアプリをSwarmにデプロイしてみる.
正直Kubernetesのほうが便利だし内容もほとんど被っているので飛ばして良かったかもしれない…
Get Started, Part 4: Deploying to Swarm
https://docs.docker.com/get-started/part4/
もくじ
- Prerequisites
- Introduction
- Describing Apps Using Stack Files
- Deploying and Checking Your Application
- Conclusion
Prerequisites
https://docs.docker.com/get-started/part4/#prerequisites
- Part 2でのアプリのコンテナ化ができていること.
Docker Desktop
上でSwarm
が動作していることdocker system info
で確認できる.Swarm: active
となっていればOK.- 動作していない場合は
docker swarm init
で起動する.
# Dockerのシステム情報を表示
# 長いのでSwarmを含む行を抜き出し
$ docker system info | grep Swarm
Swarm: active
Introduction
https://docs.docker.com/get-started/part4/#introduction
これまでのパートではアプリを単一のコンテナで起動する方法とKubernetes
上にデプロイする方法を学んできたが, このパートではDocker Swarm
でアプリを管理してみる.Swarm
はKubernetes
と同様にコンテナアプリのスケーリング, ネットワーク, セキュリティ, メンテナンスのための, コンテナ自体に最初から入っている機能よりも強力な様々なツールを提供する.
Part 2で作成したコンテナアプリがSwarm
上で動作することを検証するために, 今回は本番環境のSwarm
クラスタではなくDocker Desktop
でセットアップした開発マシンのSwarm
を使用する.Docker Desktop
で構築したSwarm
環境は本番環境のクラスタで動作するものと同じ機能を持ち, 開発マシンから容易にアクセスできるという利点がある.
[追加]Swarm
(Docker社製)とKubernetes
(Google社製)はどちらもコンテナを管理(オーケストレーション)するシステムであり, 正直Kubernetes
のほうが強力だと思う…
自分で1からセットアップする場合の触りやすさではまだSwarm
に分がある?
Describing Apps Using Stack Files
https://docs.docker.com/get-started/part4/#describing-apps-using-stack-filesSwarm
ではPart 2のようにコンテナを1つずつ作成することはせず, Swarm
が自動で管理するネットワーク機能を付与されたスケーラブルな複数のコンテナで構成されるservice
という単位で運用される.
また, 全てのSwarm
オブジェクトはStack
ファイルと呼ばれるマニフェストファイルで定義される.
このファイルにはSwarm
アプリを構成するコンポーネントと設定の情報が記述されていて, Swarm
環境でのアプリの作成/削除に使用される.
[追記]ここらへんの原文はほとんどPart 3と変わらない… Kubernetes
と機能が被っていることがよくわかる.
1: 掲示板アプリを動かすための簡単なStack
ファイルをつくってみる.
任意の場所にbb-stack.yaml
というファイルを以下の内容で作成する.
version: '3.7'
services:
bb-app:
image: bulletinboard:1.0
ports:
- "8000:8080"
このSwarm
YAMLファイルでは1つのオブジェクトを定義している:service
は中身が同じでスケーリングが可能な複数のコンテナを定義する.
今回はコンテナ数が1つで(デフォルト値), そのコンテナはPart 2で作成したimage
(bulletinboard:1.0)を元に起動することが記述されており,
さらにホスト(開発マシン)の8000番ポートとコンテナの8080番ポートを通信させるよう設定している.
Kubernetes
のService
とSwarm
のservice
は違うことに注意!
serviceという同じ名前ではあるが, 2つのオーケストレーターではこれらはまったく違うものとして扱われる.Swarm
ではコンテナの起動/管理設定とネットワーク設定を同じ1つのservice
で定義するが,Kubernetes
ではこれらはDeployment
とService
という2つのコンポーネントで定義する.
[追加]混同を避けるため, この意訳ではSwarm
のものはservice
(小文字)と表記する.
Deploying and Checking Your Application
https://docs.docker.com/get-started/part4/#deploying-and-checking-your-application
1: アプリをSwarm
にデプロイする.
# bb-stack.yamlで定義されたStackにdemoという名前をつけてデプロイ
$ docker stack deploy -c bb-stack.yaml demo
Creating network demo_default
Creating service demo_bb-app
また, このときservice
以外にStack
内で使用するデフォルトのnetwork
が作成される.
2: service
の一覧を表示して動作を確認する.
# serviceの一覧を表示
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
po8srxqtzf13 demo_bb-app replicated 1/1 bulletinboard:1.0 *:8000->8080/tcp
bb-stack.yaml
のservice
で定義したコンテナが1台起動しており, 開発マシンの8000番ポートがコンテナの8080番ポートに転送されていることがわかる.
3: 開発マシンのブラウザで http://localhost:8000/ を開く.
Part 2でコンテナを単体で動かしたときと同じ画面が表示される.
4: 動作確認ができたら, アプリを削除する.
# Stack(demo)を削除
$ docker stack rm demo
Conclusion
https://docs.docker.com/get-started/part4/#conclusion
このパートでは, Docker Desktop
を用いて開発マシン上のSwarm
に掲示板アプリをデプロイした.
この程度ではまだSwarm
を使いこなしているとは言えないが, 最初のステップは既にクリアしている.
環境はすでに開発マシンに構築できているので, 同じ手順でSwarm
の機能をさらに活用すればアプリに他のコンポーネントを追加することもできる.
また, このパートではアプリのデプロイに加えてStack
ファイルでのアプリ定義も行った.
アプリを動作させるために必要なすべての情報がシンプルなファイルに記述されているため, バージョンコントロール(Gitなど)で管理したり, 他の開発者と簡単に共有することができる.
また, Stack
ファイルがあればアプリを異なるクラスタに配置することも簡単に行うことができる(例: テスト環境と本番環境を分ける場合など).
[追加]まとめの文章もPart 3とほとんど一緒. 仕事でもほとんど使わないし正直飛ばしたほうがよかったかも…