以前,confdを使ったデプロイを紹介したけど,あれにいろいろとコメントが付いたおかげで,swarmによるデプロイが実現できた.
こういう話を探していたんだけど,前の記事を書いた時は全然わからなかったからね……. みんな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
オプションが存在しません.
ただ,本体にマージはされているので
次のリリースには含まれると思います.
とりあえず今の段階では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メモb.hatena.ne.jp--stop-grace-periodの設定とDockerfileのHEARTBEATとSTOPSIGNALの設定をすれば出来るはず
2016/08/17 06:19
HEARTBEATとSTOPSIGNALの設定でいけるのか? なんかこれで乗り切れるイメージはあんまりないんだけど…….
あと現段階でHEARTBEATのオプションはない……
Dockerfile リファレンス — Docker-docs-ja 1.12.RC ドキュメント
HEALTHCHECKかなーと思って調べてみたけど,
Docker 1.12-RC3 の HEALTHCHECK を試す – 1Q77
なんか悲しい記事しか出てこなかった.
さて,どうするか…… (´・ω・`)