【Docker】Swarmによるでのデプロイ時のハマりメモ
本を読みながらSwarmによるデプロイをしようとしてちょっとハマったので、自分用メモを残しておく。
何をやろうとしたか
- コマンド docker stackでのデプロイ作業をするため以下のコマンドを叩いた
docker container exec -it manager docker stack deploy -c /stack/todo-mysql.yml todo_mysql
- エラー文
open /stack/todo-mysql.yml: no such file or directory
そんなファイルなどない、と怒られた。コンテナ-ホストマシン間でのマウントorファイル共有がうまくできていないのだろうか。
原因
推測通り、 docker-compose up
で立ち上げていたコンテナ群と、ホストマシンとのファイル共有がうまくできていなかった。
docker-compose.yml
の記述に以下を追加し、stackディレクトリを共有するようにした
volumes: - "./stack:/stack"
deployまでの手順
# コンテナ群の立ち上げ docker-compose up -d # stackディレクトリが共有できているか確認 docker container exec -it manager ls /stack # コンテナ群(=クラスター)を管理するための司令塔となるmanagerをswarm initで設定。swarmクラスタを生成する docker container exec -it manager docker swarm init # manager以外のworkerコンテナをswarmクラスタにjoinさせる docker container exec -it worker01 docker swarm join --token SWMTKN-1-54n68bqnzn31gldc5c18l554fzk78g9p5xf08jff7781nhr5y4-4qp857s8l0rvyu7mls1gv3a56 manager:2377 docker container exec -it worker02 docker swarm join --token SWMTKN-1-54n68bqnzn31gldc5c18l554fzk78g9p5xf08jff7781nhr5y4-4qp857s8l0rvyu7mls1gv3a56 manager:2377 docker container exec -it worker03 docker swarm join --token SWMTKN-1-54n68bqnzn31gldc5c18l554fzk78g9p5xf08jff7781nhr5y4-4qp857s8l0rvyu7mls1gv3a56 manager:2377 # swarmクラスタの状態を確認 docker container exec -it manager docker node ls # overlayネットワークを構築し、立ち上げたコンテナ群が同一ネットワーク内にいるよう擬制する docker container exec -it manager docker network create --driver=overlay --attachable todoapp # dockerイメージを生成 docker image build -t ch04/tododb:latest . # イメージのpush/pull先のレジストリを設定。今回はdindのregistryコンテナ docker image tag ch04/tododb:latest localhost:5000/ch04/tododb:latest # イメージをpush docker image push localhost:5000/ch04/tododb:latest # swarmによるデプロイ docker container exec -it manager docker stack deploy -c /stack/todo-mysql.yml todo_mysql # デプロイされたレプリカを確認 docker container exec -it manager docker service ls