概要
今まで、Swarmモードで、docker-composeを使ってserviceを作成するに当たり、docker-compose.yml にoverlayネットワークを定義したりしてもうまく使えなかったりもどかしい状況だった。
Docker 1.13 では "docker stack" コマンドを使用することで、うまくいくようになったようなので、実際に試してみる。
とりあえず nginx のクラスタを組んでみる
Swarmは構成済として、Swarmの構成手順は省略。
docker-machine を managerノード1台、workerノード2台での構成をしている状態。
swarm は構成済 (init & join 済み) です。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager1 * virtualbox Running tcp://192.168.99.100:2376 v1.13.0
worker1 - virtualbox Running tcp://192.168.99.101:2376 v1.13.0
worker2 - virtualbox Running tcp://192.168.99.102:2376 v1.13.0
docker-compose.yml に記述している version を 3 に上げる
# docker stack で swarmモードのノードにデプロイするには3への設定が必須
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
docker stack コマンド で Swarmモードのマネージャーノードでデプロイ
# docker-compose.yml を指定
$ docker stack deploy -c docker-compose.yml
確認
# docker service が作成されている
$ docker service ls
ID NAME MODE REPLICAS IMAGE
u6vh9qh79vtt nginx_web replicated 1/1 nginx:latest
$ docker service ps nginx_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
is40pl78bcwb nginx_web.1 nginx:latest manager1 Running Running 6 minutes ago
# overlayネットワークは宣言していないが自動で構成されている
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8ef478abc3a1 bridge bridge local
9325e0ad61b1 docker_gwbridge bridge local
ddc6ad2d8d0d host host local
wy4ff9n6ejds ingress overlay swarm
qvrffxy9c15z nginx_default overlay swarm # ←ここ
7696ae1a989d none null local
もちろんスケールもできるので、お試しを。。。