Docker 1.12 の衝撃

26
Docker 1.12 ののの M3 Tech Talk 2016/6/28 (@yteraoka)

Transcript of Docker 1.12 の衝撃

Page 1: Docker 1.12 の衝撃

Docker 1.12 の衝撃M3 Tech Talk 2016/6/28 (@yteraoka)

Page 2: Docker 1.12 の衝撃

Docker 1.11 の Swarm クラスタを Production 環境に投入すべく、ほぼほぼ構成が出来上がったところでそれはやって来ました

Page 3: Docker 1.12 の衝撃

導入予定の構成

Page 4: Docker 1.12 の衝撃
Page 5: Docker 1.12 の衝撃

● 各サーバーが 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 の衝撃

これがなんと!

Page 7: Docker 1.12 の衝撃

たったのこれだけ

Page 8: Docker 1.12 の衝撃

● 分散 Key-Value ストア● それを必要としていた Overlay Network● TLS 証明書発行機能● 外部からのアクセス用 Proxy

全部取り込まれました!!

Page 9: Docker 1.12 の衝撃

# 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 の衝撃

マネージャは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 の衝撃

コマンドもたったのこれだけ

あの構成にどれだけの ...

Page 12: Docker 1.12 の衝撃

Page 13: Docker 1.12 の衝撃

これだけではない!

Page 14: Docker 1.12 の衝撃

さらに、これまでの Swarm には無かった Service という概念、機能が加わりました

これは Kubernetes などに存在し、これまでの Swarm には無い辛いところでした

Page 15: Docker 1.12 の衝撃

$ docker service create \ --replicas 3 -p 3000 \ --name myapp myapp:1.0

Page 16: Docker 1.12 の衝撃

$ 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 の衝撃

$ docker service scale myapp=5

Page 18: Docker 1.12 の衝撃

$ docker service scale myapp=5

これでさらに 2 つのコンテナを追加して 5 つのコンテナの実行を維持してくれます

ピークを過ぎたら減らせば OK

https://docs.docker.com/engine/swarm/swarm-tutorial/scale-service/

Page 19: Docker 1.12 の衝撃

Rolling update

Page 20: Docker 1.12 の衝撃

$ docker service update \ --image myapp:1.1 myapp

Page 21: Docker 1.12 の衝撃

$ 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 の衝撃

Load Balancing

Page 23: Docker 1.12 の衝撃

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 の衝撃

bundle / stack

https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md

Page 25: Docker 1.12 の衝撃

bundle は複数のコンテナをまとめた定義ファイル(アプリと Redis のセットなど)( Kubernetes の Pod とは違いそう)

stack は bundle から起動されたコンテナの集合

Page 26: Docker 1.12 の衝撃

Docker 1.12正式リリースが待ち遠しい