docker 1.12 の衝撃
TRANSCRIPT
![Page 1: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/1.jpg)
Docker 1.12 の衝撃M3 Tech Talk 2016/6/28 (@yteraoka)
![Page 2: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/2.jpg)
Docker 1.11 の Swarm クラスタを Production 環境に投入すべく、ほぼほぼ構成が出来上がったところでそれはやって来ました
![Page 3: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/3.jpg)
導入予定の構成
![Page 4: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/4.jpg)
![Page 5: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/5.jpg)
● 各サーバーが TLS 通信(サーバー、クライアントの証明書も確認)するための証明書発行機能
● Swarm Cluster を構成するための Swarm Manager ( 3 台 or 5 台)+ Key / Value ストア( Consul )
● コンテナを実行する Docker サーバーとその各サーバー上の Swarm Agent
● Docker の Overlay network を構成するための Key-Value ストア( Consul )(別々の Docker サーバー上のコンテナが同一ネットワークとして稼働)
● 外部からコンテナにアクセスするための Reverse Proxy / Load Balancer としての nginx または HAProxy
● nginx / HAProxy の設定をコンテナの起動停止に合わせて更新するための Consul-Template ( Consul も必要)
● Consul-Template のために Docker Engine のイベントを監視してサービスを登録、削除する Registrator
● 様々な用途で使われる Consul は単一のクラスタ
![Page 6: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/6.jpg)
これがなんと!
![Page 7: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/7.jpg)
たったのこれだけ
![Page 8: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/8.jpg)
● 分散 Key-Value ストア● それを必要としていた Overlay Network● TLS 証明書発行機能● 外部からのアクセス用 Proxy
全部取り込まれました!!
![Page 9: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/9.jpg)
# 1台目$ docker swarm init --listen-addr 192.168.99.121:2377
# 2台目$ docker swarm join --manager \ --listen-addr 192.168.99.122:2377 192.168.99.121:2377
# 3台目$ docker swarm join --manager \ --listen-addr 192.168.99.123:2377 192.168.99.121:2377
# 知らない node が join してくると困るので leader node で# accept する$ docker node accept <node name>
![Page 10: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/10.jpg)
マネージャは3台あれば冗長構成となるので、 Docker の実行ノードがもっと欲しい場合は
$ docker swarm join \ --listen-addr 192.168.99.124:2377 192.168.99.121:2377
$ docker swarm join \ --listen-addr 192.168.99.125:2377 192.168.99.121:2377
と、どんどん追加ですれば OK減らすのも簡単、稼働中のコンテナは別 node に移してくれる
![Page 11: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/11.jpg)
コマンドもたったのこれだけ
あの構成にどれだけの ...
![Page 12: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/12.jpg)
が
![Page 13: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/13.jpg)
これだけではない!
![Page 14: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/14.jpg)
さらに、これまでの Swarm には無かった Service という概念、機能が加わりました
これは Kubernetes などに存在し、これまでの Swarm には無い辛いところでした
![Page 15: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/15.jpg)
$ docker service create \ --replicas 3 -p 3000 \ --name myapp myapp:1.0
![Page 16: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/16.jpg)
$ docker service create \ --replicas 3 -p 3000 \ --name myapp myapp:1.0
これで myapp コンテナを 3 つ起動してくれます、不意に落ちても 3 つをキープするように起動してくれます。実行していた Docker node が H/W 障害などで停止しても別の node で実行してくれます
https://docs.docker.com/engine/swarm/swarm-tutorial/deploy-service/
![Page 17: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/17.jpg)
$ docker service scale myapp=5
![Page 18: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/18.jpg)
$ docker service scale myapp=5
これでさらに 2 つのコンテナを追加して 5 つのコンテナの実行を維持してくれます
ピークを過ぎたら減らせば OK
https://docs.docker.com/engine/swarm/swarm-tutorial/scale-service/
![Page 19: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/19.jpg)
Rolling update
![Page 20: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/20.jpg)
$ docker service update \ --image myapp:1.1 myapp
![Page 21: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/21.jpg)
$ docker service update \ --image myapp:1.1 myapp
これで myapp の実行イメージを順番に切り替えてくれます同時にいくつ切り替えるのか、間隔をどれだけ開けるのかは create / update で指定する --update-parallelism, --update-delay で調整可能
https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/
![Page 22: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/22.jpg)
Load Balancing
![Page 23: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/23.jpg)
3000/tcpmyapp
3000/tcpmyapp
3000/tcpmyapp
32767/tcp 32767/tcp 32767/tcp
Docker外サービスのポートはどの node でも同じ番号に map され、各 node に振り分けられる(ラウンドロビン)
この図ではおまかせ設定のポート番号だが、任意の番号を指定可能
こういうわけなので Consul-Template と組み合わせた nginx / HAProxy というものは必須ではなくなりますConsul いなくなっちゃったし
![Page 24: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/24.jpg)
bundle / stack
https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md
![Page 25: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/25.jpg)
bundle は複数のコンテナをまとめた定義ファイル(アプリと Redis のセットなど)( Kubernetes の Pod とは違いそう)
stack は bundle から起動されたコンテナの集合
![Page 26: Docker 1.12 の衝撃](https://reader035.vdocuments.mx/reader035/viewer/2022062223/58f9b31c760da3da068bd27d/html5/thumbnails/26.jpg)
Docker 1.12正式リリースが待ち遠しい