docker 1.12 の衝撃

Post on 21-Apr-2017

18.462 Views

Category:

Internet

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

導入予定の構成

● 各サーバーが 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 は単一のクラスタ

これがなんと!

たったのこれだけ

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

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

# 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>

マネージャは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 に移してくれる

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

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

これだけではない!

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

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

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

$ 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/

$ docker service scale myapp=5

$ docker service scale myapp=5

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

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

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

Rolling update

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

$ 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/

Load Balancing

3000/tcpmyapp

3000/tcpmyapp

3000/tcpmyapp

32767/tcp 32767/tcp 32767/tcp

Docker外サービスのポートはどの node でも同じ番号に map され、各 node に振り分けられる(ラウンドロビン)

この図ではおまかせ設定のポート番号だが、任意の番号を指定可能

こういうわけなので Consul-Template と組み合わせた nginx / HAProxy というものは必須ではなくなりますConsul いなくなっちゃったし

bundle / stack

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

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

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

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

top related