Hazy Idea Storage

エンジニアリング全般についての備忘録

【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