狠狠撸

狠狠撸Share a Scribd company logo
Docker 1.12 の衝撃
M3 Tech Talk 2016/6/28 (@yteraoka)
Docker 1.11 の Swarm クラスタ
を Production 環境に投入すべく、
ほぼほぼ構成が出来上がったとこ
ろでそれはやって来ました
导入予定の构成
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 は単一のクラスタ
これがなんと!
たったのこれだけ
● 分散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/tcp
myapp
3000/tcp
myapp
3000/tcp
myapp
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
正式リリースが待ち遠しい

More Related Content

Docker 1.12 の衝撃