swarm modeでdockerをデプロイしてみる

以前,confdを使ったデプロイを紹介したけど,あれにいろいろとコメントが付いたおかげで,swarmによるデプロイが実現できた.

h3poteto.hatenablog.com

okzk.hatenablog.com

こういう話を探していたんだけど,前の記事を書いた時は全然わからなかったからね……. みんなswarmでいろんなノード追加して遊んでたからね…….

ありがたや.

やってみる

というわけで,ホストのdockerを1.12までアップグレードして,同じようにdockerを動かしてみます.

$ docker service create --publish 80:80 \
  --name nginx \
  --replicas 2 \
  --update-delay 20s \
  --stop-grace-period 10s \
  --env HOGE=FUGA \
  nginx:lates

悲しいことに,1.12ではまだ env-file オプションが存在しません. ただ,本体にマージはされているので

github.com

次のリリースには含まれると思います.

とりあえず今の段階ではenvオプションにひとつずつ渡すしかない.

--volume オプションについては,--mount というオプションで対応可能でした.

--mount type=bind,source={host directory},target={container directory},readonly=false

デプロイのときは,docker imageをアップデートするだけとします.

$ docker service update --image nginx:stable nginx

無事にBlueGreenされたぞー!!

そして同じ問題に当たる

元記事でも言われているように何回かアップデートしていると,アクセスがかたよる? いや,偏っているのかは正直ちゃんと計測していないし偶然なのかもしれませんが,デプロイ時に旧コンテナ側にアクセスしてしまうと,アクセスできない場合がありました.

で,元記事のブックマークコメントにあるとおり,

Re: Dockerに載せたサービスをホットデプロイする - okzkメモ

--stop-grace-periodの設定とDockerfileのHEARTBEATとSTOPSIGNALの設定をすれば出来るはず

2016/08/17 06:19
b.hatena.ne.jp

HEARTBEATとSTOPSIGNALの設定でいけるのか? なんかこれで乗り切れるイメージはあんまりないんだけど…….

あと現段階でHEARTBEATのオプションはない……

Dockerfile リファレンス — Docker-docs-ja 1.12.RC ドキュメント

HEALTHCHECKかなーと思って調べてみたけど,

Docker 1.12-RC3 の HEALTHCHECK を試す – 1Q77

なんか悲しい記事しか出てこなかった.

さて,どうするか…… (´・ω・`)