SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
Docker Swarm mode 入門
& ECS との比較
JAWS-UG コンテナ支部 #3
2016.8.3 yteraoka
自己紹介
Name: Teraoka Yoshinori
Twitter: @yteraoka
エムスリー株式会社で
インフラ全般を担当
自己紹介
Name: Teraoka Yoshinori
Twitter: @yteraoka
Ansible やってました
今日話すこと、話さないこと
話すこと
● Docker 1.11 から 1.12 での変更点
● ECS との比較
話さないこと
● Docker とは
Container Orchestration 2大勢力
なんか大変そう
Swarm はシンプルで楽チンだと聞いて...
Docker 1.11 + Swarm
Swarm Worker
Swarm Manager
Swarm Worker
Swarm Manager
Swarm Worker
Swarm Manager
KVS
(etcd, consul, zookeeper)
Reverse Proxy
nginx / HAProxy
+
consul-template
Alt.
Vulcand
gobetween
CA
Docker 1.11 + Swarm
● クラスタ関連通信は TLS で保護、証明書のチェックも有効
● Swarm のクラスタ管理用 KVS
● Docker の Overlay Network 用 KVS
● Reverse Proxy の Dynamic configuration 用 KVS
○ どの node のどの port でどのサービスが稼働しているかを管理
● Container の起動・停止を監視し KVS に登録する
○ registrator など
これが Docker 1.12 で
こうなった
Swarm Mode Architecture Topology
https://blog.docker.com/2016/07/docker-built-in-orchestration-ready-for-production-docker-1-12-goes-ga/
Docker 1.12 Feature highlights
● Cluster management integrated with Docker Engine
● Decentralized design
● Declarative service model
● Scaling
● Desired state reconciliation
● Multi-host networking
● Service discovery
● Load balancing
● Secure by default
● Rolling updates
https://docs.docker.com/engine/swarm/
Docker 1.12 Feature highlights
● Docker Engine に統合されたクラスタ管理機能
● 分散デザイン(非集中)
● 宣言型サービスモデル
● スケーリング
● 希望する状態の維持(N個のコンテナを維持)
● マルチホストネットワーキング
● サービスディスカバリ
● ロードバランサー
● 安全性(デフォルトでセキュア)
● ローリングアップデート
https://docs.docker.com/engine/swarm/
Cluster management integrated with Docker Engine
● 追加のオーケストレーションソフトウェア不要!!
● Docker Engine だけでクラスタが構築可能
● 別途 KVS や CA を構築する必要もなし!
Decentralized design
Docker Engine はマネージャーとワーカーの役割によらず同一の実行バイナリであるた
め、デプロイ時に役割を区別すること無く単一のディスクイメージで構築可能
Declarative service model
Service というものを定義するようになりました
名称、環境変数、CPU・メモリの制限、ログドライバ、ポートの公開、実行数、ローリング
アップデートのための設定など
これまで docker-compose.yml など外部で定義していたものを Docker Engine 内で保持
します
Service と Task
● Service を作成すると定義にしたがってコンテナが実行される
● この実行されたコンテナが Task
$ docker service create --name nginx --replicas 3 nginx:1.11
f4p4cot1s7nhsx6kahuqy10ou
$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
f4p4cot1s7nh nginx 3/3 nginx:1.11
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE
ERROR
9bbpm947yca9bf428e9r07nwe nginx.1 nginx:1.11 ip-192-168-54-4 Running Running about a minute ago
53e1tx2bnngxhrzx19pqszwpp nginx.2 nginx:1.11 ip-192-168-54-5 Running Running about a minute ago
a47go7z2wql2nvbv61hsigeys nginx.3 nginx:1.11 ip-192-168-54-6 Running Running about a minute ago
Scaling
Service ごとにいくつの Task(コンテナ)を実行したいか定義できます
定義数を変更すれば swarm manager が自動でタスクの追加、削除を行って希望の数を
維持します
$ docker service scale --help
Usage: docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Scale one or multiple services
Options:
--help Print usage
Desired state reconciliation
The swarm manager node constantly monitors the cluster state and reconciles any
differences between the actual state your expressed desired state. For example, if
you set up a service to run 10 replicas of a container, and a worker machine
hosting two of those replicas crashes, the manager will create two new replicas to
replace the ones that crashed. The swarm manager assigns the new replicas to
workers that are running and available.
同じことの繰り返しなので省略
Multi-host networking
● Overlay Network が作成可能
● Swarm manager はコンテナに対して自動的にここのアドレスを割り当てる
● これは以前の Docker でも可能だったが外部 KVS が必要だった
Service discovery
Swarm manager は Service ごとにユニークな DNS ネームとロードバランサーを割り当
てます。Swarm 内のコンテナはこの DNS を用いて他のサービスと通信することができ
ます。Overlay Network を使う場合のみ
--endpoint-mode が vip (default) の場合 LoadBalancer の VIP が割り当てられて DNS
にこれが登録されます
--endpoint-mode が dnsrr の場合は DNS RoundRobin っぽい動作になります
Load balancing
外部向け Load Balancer でサービスポートを公開できます
どの node でコンテナが稼働しているかによらずにアクセスできます
-p, --publish を指定すると ingress ネットワークが使われるため VIP が設定され、外部
からのアクセスも可能になる
-p を指定しない場合は --network で overlay network を使うようにすれば VIP が設定
される、ingress を指定しても良い
Load balancing
Swarm node1
interface
ingress-
endpoint
Virtual IP
app-A
app-B
app-C
Swarm node2
interface
ingress-
endpoint
Virtual IP
app-A
app-A
app-cSource IP address は
ingress-sbox の IP address
expose した port
(ex. 30000/tcp) service の port
(ex. 80/tcp)
※実際はもうすこし複雑
Load balancing
Swarm node1
interface
ingress-
endpoint
Virtual IP
app-A
app-B
app-C
Swarm node2
interface
ingress-
endpoint
Virtual IP
app-A
app-A
app-C
Source IP
address は
app-B コンテ
ナの IP
address
※実際はもうすこし複雑
Load balancing
Swarm node1
interface
ingress-
endpoint
Virtual IP
app-A
app-B
app-C
Swarm node2
interface
ingress-
endpoint
Virtual IP
app-A
app-A
app-C
自身のVIPとはうまく
通信できない
※実際はもうすこし複雑
Load balancing
● Service で expose されたポートは Load Balancer はどの node でも受け、目的のコ
ンテナへルーティングされる
● このため、前段の Reverse Proxy は swarm node の全部または一部を upstream
として指定しておくだけでコンテナの実行ノード移動などの影響をうけない
● Service ごとにポートを固定する運用とすれば Reverse Proxy の設定変更は
Service と swarm node の増減時のみとなる
Secure by default
Swarm の各 node は TLS で相互に認証し通信も暗号化される
自己署名の root 証明書またはカスタム root CA の証明書を使うオプションもある
誰か swarm init の --external-ca オプションの使い方を教えてください...
Rolling updates
アプリの更新時、少しずつ更新することが可能。Swarm manager は同時にいくつの task
を更新するか、それぞれの間隔をどうするか、失敗した場合にどうするかをコントロール
できます
$ docker service update --help
…
Options:
…
--update-delay duration Delay between updates
--update-failure-action string Action on update failure ()
--update-parallelism unit Maximum number of tasks updated simultaneously
(0 to update all at once) (default 1)
…
Private Registry
docker image の pull に認証が必要な場合は事前に docker login して
~/.docker/config.json にログイン情報を登録した上で service create に
--with-registry-auth を指定することで
{“username”:”test001”,”password”:”secret”,”serveraddress”:” https://index.doc
ker.io/v1/”}
などどいう情報が Base64 で encode されて swarm の分散 KVS に登録される
strings /var/lib/docker/swarm/raft/wal/*
で誰かのパスワードがゲットできちゃうかも
ちなみに ~/.docker/config.json の auth の値も Base64 で encode されているだけ
Docker 1.12 でできなくなったこと
● docker-compose で Swarm クラスタに対しての deploy
$ docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm.
All containers will be scheduled on the current node.
To deploy your application across the swarm, use the bundle feature of the Docker
experimental build.
More info:
https://docs.docker.com/compose/bundles
Creating network "wordpress_default" with the default driver
Creating wordpress_db_1
Creating wordpress_wordpress_1
https://docs.docker.com/compose/wordpress/
bundle / stack
docker-compose の後継(?)
Experimental なので
curl -fsSL https://experimental.docker.com/ | sh
でインストールする必要あり
https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md
bundle / stack
● docker-compose.yml から bundle 用の .dab を生成できます
● bundle では Image を完全なハッシュ値(SHA256)で指定する必要があるため、変換には予め
docker-compose pull が必要
● テストで WordPress 用 docker-compose.yml(MySQL + Apache & PHP)を変換して起動した例
$ docker-compose bundle
WARNING: Unsupported key 'links' in services.wordpress - ignoring
WARNING: Unsupported key 'depends_on' in services.wordpress - ignoring
WARNING: Unsupported key 'restart' in services.wordpress - ignoring
WARNING: Unsupported key 'volumes' in services.db - ignoring
WARNING: Unsupported key 'restart' in services.db - ignoring
Wrote bundle to wordpress.dab
$ docker deploy --file wordpress.dab wordpress
Loading bundle from wordpress.dab
Creating network wordpress_default
Creating service wordpress_db
Creating service wordpress_wordpress
bundle / stack
● Apache & PHP の Service と MySQL の Service の起動
● Apache & PHP の Service の Scale
を確認することは出来ましたが、きっとまだまだ変更されると思います
HEALTHCHECK
● Dockerfile もしくは docker run 時に HEALTHCHECK を指定できるようになりました
● docker run では --health-cmd, --health-interval, --health-retries, --health-timeout が指定可能だが
service では指定できないため Dockerfile にて HEALTHCHECK を設定した image を作成する必要があ
る
● healthcheck が有効な場合、docker ps の STATUS 欄に (healthy), (health: starting) などと追加される
● healthy でない場合コンテナが再起動される
● 再起動で改善されないような場合は延々と再起動が繰り返される・・・
● --restart-max-attempts で制限可能
HEALTHCHECK --interval=5s --timeout=3s --retries=5 CMD /healthcheck.sh
HEALTHEHCEK CONNECT TCP 7000
などと Dockerfile に書くことができる
Docker 1.12 でできなくなったこと
● クラスタ外からの deploy
証明書がらみの問題(だけ?)
node の証明書は
/var/lib/docker/swarm/certificates/
に転がってるけど...
Docker の課題(セキュリティ)
● パスワードなどの渡し方
環境変数は docker コマンドが使えてしまうと丸見
え
https://github.com/docker/docker/issues/13490
● そもそも docker コマンド使えたらなんでも出来てしまう
● swarm manager node にログインしないとコンテナ起動できない
$ docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}'
ab3485437171
PASSWORD=michadameyo
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX_VERSION=1.11.1-1~jessie
Amazon EC2 Container Service
Amazon EC2 Container Service (ECS)
ELB ELB ELB
ECS 登場人物
● Cluster
● Task Definition
● Task
● Service
● Instance
ECS / Cluster
● Docker を実行可能な EC2 インスタンスのかたまり
● 通常は ECS-Optimized Amazon Linux AMI (Agent Container が稼働)
● VPC 内、AZ、Subnet をまたいだ構成も可能
● Instance Role はその上で動作するコンテナに影響する
ECS / Task Definition
● 1つ以上のコンテナからなるサービスの定義
● これをひとつの単位としてスケールさせていく
● Task 内のコンテナ間は link 機能により名前解決および通信が可能
● Task 内の複数のコンテナは同一ホスト(EC2インスタンス)上で実行される
● コンテナ間に不可分な関係がある場合に複数のコンテナをまとめる
○ アプリと fluentd
○ アプリと memcached / redis
● アプリとDBは通常ひとつのTaskには入れない(アプリは増やすがDBは増やさない)
● Task Definition を元に Task もしくは Service を起動する
● Task Definition には Version があり、Rolling Update が可能
(別の Task Definition にも入れ替え可能)
ECS / Task
これらの箱ひとつひとつが Task
1 Task = 1 Container とは限らない
● Task Definition から直接 Task として実行したものも
● Service として実行したもの Task である
ECS / Service
● Task Definition を元に
● どの Cluster で
● いくつの Task を実行するか(更新時の最小、最大数も指定)
● Task の数は後から変更可能
● ELB で Load Balance させるか
● Auto Scale させるかどうか
を指定して実行したもの
ECS / Service
ELB ELB ELB
ECS / Service の制限事項
● ELB を設定する場合、コンテナ毎に別のポートを ELB に設定できないため
EC2 Instance のリソースに空きがあってもポートが開いていないとコンテナを割り
当てられない
ECS / Task にするか Service にするかか
● Task Definition で定義したものを単純に N 個実行する
→ Task
● Task Definition で定義したものを N 個常に実行しておきたい、
Scale Up / Down させたい
→ Service
● Task Definition で定義したものを ELB で負荷分散させたい
→ Service
● Task Definition で定義したものを Rolling Update したい
→ Service
ECS の Network
● EC2 Instance をまたいだコンテナ間は直接通信することができない
● ELB を経由すれば可能
● AWS の場合多くのマネージメントサービスが活用できるためコンテナ間通信の需要
は低そう
ECS の Network
ECS / Security
コンテナ用 EC2 Instance に設定した IAM Instance role
もしくは Task 毎に設定する IAM role で各種 AWS リソースへアクセスできるためパス
ワードなどが見えてしまったりせずセキュア
ECS と Swarm の比較
Swarm mode ECS
Service Task Definition / Service
Task (1 Container) Task (1+ Container)
Load Balancer (VIP, L4) ELB (L4/L7)
Overlay Network -
- Instance Auto Scaling
- Container Auto Scaling
- Instalce / Task IAM Role
Docker 1.12 はまだちょっと不安?
● RC版を軽く触った際におや?と思うことがあった
● Docker の GitHub issue を見てるとちょっと不安だったりする
● DockerCon 2016 に合わせててんこ盛り&急ぎすぎた?
Mesos も試そう
続きは M3 tech meetup #3 で
Docker ネタのスピーカー募集中!!
Docker swarm mode 入門と ECS との比較

Contenu connexe

Tendances

分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーションMasahito Zembutsu
 
鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解Masahito Zembutsu
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見zaru sakuraba
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響Masahito Zembutsu
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Masahito Zembutsu
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Masahito Zembutsu
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Masahito Zembutsu
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門Masahito Zembutsu
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Masahito Zembutsu
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションMasahito Zembutsu
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 

Tendances (20)

分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
Docker入門
Docker入門Docker入門
Docker入門
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 

Similaire à Docker swarm mode 入門と ECS との比較

Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspecTsuyoshi Yamada
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Naoki Nagazumi
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Yasuhiro Arai
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!Midori Oge
 
LAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみたLAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみたHiroshi Hatta
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)Iwana Chan
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門Yuto Takei
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)佐久本正太
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 

Similaire à Docker swarm mode 入門と ECS との比較 (20)

Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
LAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみたLAMP環境にDocker環境を追加してみた
LAMP環境にDocker環境を追加してみた
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)
 
Lxc on cloud
Lxc on cloudLxc on cloud
Lxc on cloud
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Devio mtup11-tokyo-012
Devio mtup11-tokyo-012Devio mtup11-tokyo-012
Devio mtup11-tokyo-012
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
PowerShell de Azure
PowerShell de AzurePowerShell de Azure
PowerShell de Azure
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 

Dernier

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Dernier (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Docker swarm mode 入門と ECS との比較

  • 1. Docker Swarm mode 入門 & ECS との比較 JAWS-UG コンテナ支部 #3 2016.8.3 yteraoka
  • 2. 自己紹介 Name: Teraoka Yoshinori Twitter: @yteraoka エムスリー株式会社で インフラ全般を担当
  • 3. 自己紹介 Name: Teraoka Yoshinori Twitter: @yteraoka Ansible やってました
  • 4. 今日話すこと、話さないこと 話すこと ● Docker 1.11 から 1.12 での変更点 ● ECS との比較 話さないこと ● Docker とは
  • 7. Docker 1.11 + Swarm Swarm Worker Swarm Manager Swarm Worker Swarm Manager Swarm Worker Swarm Manager KVS (etcd, consul, zookeeper) Reverse Proxy nginx / HAProxy + consul-template Alt. Vulcand gobetween CA
  • 8. Docker 1.11 + Swarm ● クラスタ関連通信は TLS で保護、証明書のチェックも有効 ● Swarm のクラスタ管理用 KVS ● Docker の Overlay Network 用 KVS ● Reverse Proxy の Dynamic configuration 用 KVS ○ どの node のどの port でどのサービスが稼働しているかを管理 ● Container の起動・停止を監視し KVS に登録する ○ registrator など
  • 11. Swarm Mode Architecture Topology https://blog.docker.com/2016/07/docker-built-in-orchestration-ready-for-production-docker-1-12-goes-ga/
  • 12. Docker 1.12 Feature highlights ● Cluster management integrated with Docker Engine ● Decentralized design ● Declarative service model ● Scaling ● Desired state reconciliation ● Multi-host networking ● Service discovery ● Load balancing ● Secure by default ● Rolling updates https://docs.docker.com/engine/swarm/
  • 13. Docker 1.12 Feature highlights ● Docker Engine に統合されたクラスタ管理機能 ● 分散デザイン(非集中) ● 宣言型サービスモデル ● スケーリング ● 希望する状態の維持(N個のコンテナを維持) ● マルチホストネットワーキング ● サービスディスカバリ ● ロードバランサー ● 安全性(デフォルトでセキュア) ● ローリングアップデート https://docs.docker.com/engine/swarm/
  • 14. Cluster management integrated with Docker Engine ● 追加のオーケストレーションソフトウェア不要!! ● Docker Engine だけでクラスタが構築可能 ● 別途 KVS や CA を構築する必要もなし!
  • 15. Decentralized design Docker Engine はマネージャーとワーカーの役割によらず同一の実行バイナリであるた め、デプロイ時に役割を区別すること無く単一のディスクイメージで構築可能
  • 16. Declarative service model Service というものを定義するようになりました 名称、環境変数、CPU・メモリの制限、ログドライバ、ポートの公開、実行数、ローリング アップデートのための設定など これまで docker-compose.yml など外部で定義していたものを Docker Engine 内で保持 します
  • 17. Service と Task ● Service を作成すると定義にしたがってコンテナが実行される ● この実行されたコンテナが Task $ docker service create --name nginx --replicas 3 nginx:1.11 f4p4cot1s7nhsx6kahuqy10ou $ docker service ls ID NAME REPLICAS IMAGE COMMAND f4p4cot1s7nh nginx 3/3 nginx:1.11 $ docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 9bbpm947yca9bf428e9r07nwe nginx.1 nginx:1.11 ip-192-168-54-4 Running Running about a minute ago 53e1tx2bnngxhrzx19pqszwpp nginx.2 nginx:1.11 ip-192-168-54-5 Running Running about a minute ago a47go7z2wql2nvbv61hsigeys nginx.3 nginx:1.11 ip-192-168-54-6 Running Running about a minute ago
  • 18. Scaling Service ごとにいくつの Task(コンテナ)を実行したいか定義できます 定義数を変更すれば swarm manager が自動でタスクの追加、削除を行って希望の数を 維持します $ docker service scale --help Usage: docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...] Scale one or multiple services Options: --help Print usage
  • 19. Desired state reconciliation The swarm manager node constantly monitors the cluster state and reconciles any differences between the actual state your expressed desired state. For example, if you set up a service to run 10 replicas of a container, and a worker machine hosting two of those replicas crashes, the manager will create two new replicas to replace the ones that crashed. The swarm manager assigns the new replicas to workers that are running and available. 同じことの繰り返しなので省略
  • 20. Multi-host networking ● Overlay Network が作成可能 ● Swarm manager はコンテナに対して自動的にここのアドレスを割り当てる ● これは以前の Docker でも可能だったが外部 KVS が必要だった
  • 21. Service discovery Swarm manager は Service ごとにユニークな DNS ネームとロードバランサーを割り当 てます。Swarm 内のコンテナはこの DNS を用いて他のサービスと通信することができ ます。Overlay Network を使う場合のみ --endpoint-mode が vip (default) の場合 LoadBalancer の VIP が割り当てられて DNS にこれが登録されます --endpoint-mode が dnsrr の場合は DNS RoundRobin っぽい動作になります
  • 22. Load balancing 外部向け Load Balancer でサービスポートを公開できます どの node でコンテナが稼働しているかによらずにアクセスできます -p, --publish を指定すると ingress ネットワークが使われるため VIP が設定され、外部 からのアクセスも可能になる -p を指定しない場合は --network で overlay network を使うようにすれば VIP が設定 される、ingress を指定しても良い
  • 23. Load balancing Swarm node1 interface ingress- endpoint Virtual IP app-A app-B app-C Swarm node2 interface ingress- endpoint Virtual IP app-A app-A app-cSource IP address は ingress-sbox の IP address expose した port (ex. 30000/tcp) service の port (ex. 80/tcp) ※実際はもうすこし複雑
  • 24. Load balancing Swarm node1 interface ingress- endpoint Virtual IP app-A app-B app-C Swarm node2 interface ingress- endpoint Virtual IP app-A app-A app-C Source IP address は app-B コンテ ナの IP address ※実際はもうすこし複雑
  • 25. Load balancing Swarm node1 interface ingress- endpoint Virtual IP app-A app-B app-C Swarm node2 interface ingress- endpoint Virtual IP app-A app-A app-C 自身のVIPとはうまく 通信できない ※実際はもうすこし複雑
  • 26. Load balancing ● Service で expose されたポートは Load Balancer はどの node でも受け、目的のコ ンテナへルーティングされる ● このため、前段の Reverse Proxy は swarm node の全部または一部を upstream として指定しておくだけでコンテナの実行ノード移動などの影響をうけない ● Service ごとにポートを固定する運用とすれば Reverse Proxy の設定変更は Service と swarm node の増減時のみとなる
  • 27. Secure by default Swarm の各 node は TLS で相互に認証し通信も暗号化される 自己署名の root 証明書またはカスタム root CA の証明書を使うオプションもある 誰か swarm init の --external-ca オプションの使い方を教えてください...
  • 28. Rolling updates アプリの更新時、少しずつ更新することが可能。Swarm manager は同時にいくつの task を更新するか、それぞれの間隔をどうするか、失敗した場合にどうするかをコントロール できます $ docker service update --help … Options: … --update-delay duration Delay between updates --update-failure-action string Action on update failure () --update-parallelism unit Maximum number of tasks updated simultaneously (0 to update all at once) (default 1) …
  • 29. Private Registry docker image の pull に認証が必要な場合は事前に docker login して ~/.docker/config.json にログイン情報を登録した上で service create に --with-registry-auth を指定することで {“username”:”test001”,”password”:”secret”,”serveraddress”:” https://index.doc ker.io/v1/”} などどいう情報が Base64 で encode されて swarm の分散 KVS に登録される strings /var/lib/docker/swarm/raft/wal/* で誰かのパスワードがゲットできちゃうかも ちなみに ~/.docker/config.json の auth の値も Base64 で encode されているだけ
  • 30. Docker 1.12 でできなくなったこと ● docker-compose で Swarm クラスタに対しての deploy $ docker-compose up -d WARNING: The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use the bundle feature of the Docker experimental build. More info: https://docs.docker.com/compose/bundles Creating network "wordpress_default" with the default driver Creating wordpress_db_1 Creating wordpress_wordpress_1 https://docs.docker.com/compose/wordpress/
  • 31. bundle / stack docker-compose の後継(?) Experimental なので curl -fsSL https://experimental.docker.com/ | sh でインストールする必要あり https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md
  • 32. bundle / stack ● docker-compose.yml から bundle 用の .dab を生成できます ● bundle では Image を完全なハッシュ値(SHA256)で指定する必要があるため、変換には予め docker-compose pull が必要 ● テストで WordPress 用 docker-compose.yml(MySQL + Apache & PHP)を変換して起動した例 $ docker-compose bundle WARNING: Unsupported key 'links' in services.wordpress - ignoring WARNING: Unsupported key 'depends_on' in services.wordpress - ignoring WARNING: Unsupported key 'restart' in services.wordpress - ignoring WARNING: Unsupported key 'volumes' in services.db - ignoring WARNING: Unsupported key 'restart' in services.db - ignoring Wrote bundle to wordpress.dab $ docker deploy --file wordpress.dab wordpress Loading bundle from wordpress.dab Creating network wordpress_default Creating service wordpress_db Creating service wordpress_wordpress
  • 33. bundle / stack ● Apache & PHP の Service と MySQL の Service の起動 ● Apache & PHP の Service の Scale を確認することは出来ましたが、きっとまだまだ変更されると思います
  • 34. HEALTHCHECK ● Dockerfile もしくは docker run 時に HEALTHCHECK を指定できるようになりました ● docker run では --health-cmd, --health-interval, --health-retries, --health-timeout が指定可能だが service では指定できないため Dockerfile にて HEALTHCHECK を設定した image を作成する必要があ る ● healthcheck が有効な場合、docker ps の STATUS 欄に (healthy), (health: starting) などと追加される ● healthy でない場合コンテナが再起動される ● 再起動で改善されないような場合は延々と再起動が繰り返される・・・ ● --restart-max-attempts で制限可能 HEALTHCHECK --interval=5s --timeout=3s --retries=5 CMD /healthcheck.sh HEALTHEHCEK CONNECT TCP 7000 などと Dockerfile に書くことができる
  • 35. Docker 1.12 でできなくなったこと ● クラスタ外からの deploy 証明書がらみの問題(だけ?) node の証明書は /var/lib/docker/swarm/certificates/ に転がってるけど...
  • 36. Docker の課題(セキュリティ) ● パスワードなどの渡し方 環境変数は docker コマンドが使えてしまうと丸見 え https://github.com/docker/docker/issues/13490 ● そもそも docker コマンド使えたらなんでも出来てしまう ● swarm manager node にログインしないとコンテナ起動できない $ docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' ab3485437171 PASSWORD=michadameyo PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NGINX_VERSION=1.11.1-1~jessie
  • 38. Amazon EC2 Container Service (ECS) ELB ELB ELB
  • 39. ECS 登場人物 ● Cluster ● Task Definition ● Task ● Service ● Instance
  • 40. ECS / Cluster ● Docker を実行可能な EC2 インスタンスのかたまり ● 通常は ECS-Optimized Amazon Linux AMI (Agent Container が稼働) ● VPC 内、AZ、Subnet をまたいだ構成も可能 ● Instance Role はその上で動作するコンテナに影響する
  • 41. ECS / Task Definition ● 1つ以上のコンテナからなるサービスの定義 ● これをひとつの単位としてスケールさせていく ● Task 内のコンテナ間は link 機能により名前解決および通信が可能 ● Task 内の複数のコンテナは同一ホスト(EC2インスタンス)上で実行される ● コンテナ間に不可分な関係がある場合に複数のコンテナをまとめる ○ アプリと fluentd ○ アプリと memcached / redis ● アプリとDBは通常ひとつのTaskには入れない(アプリは増やすがDBは増やさない) ● Task Definition を元に Task もしくは Service を起動する ● Task Definition には Version があり、Rolling Update が可能 (別の Task Definition にも入れ替え可能)
  • 42. ECS / Task これらの箱ひとつひとつが Task 1 Task = 1 Container とは限らない ● Task Definition から直接 Task として実行したものも ● Service として実行したもの Task である
  • 43. ECS / Service ● Task Definition を元に ● どの Cluster で ● いくつの Task を実行するか(更新時の最小、最大数も指定) ● Task の数は後から変更可能 ● ELB で Load Balance させるか ● Auto Scale させるかどうか を指定して実行したもの
  • 44. ECS / Service ELB ELB ELB
  • 45. ECS / Service の制限事項 ● ELB を設定する場合、コンテナ毎に別のポートを ELB に設定できないため EC2 Instance のリソースに空きがあってもポートが開いていないとコンテナを割り 当てられない
  • 46. ECS / Task にするか Service にするかか ● Task Definition で定義したものを単純に N 個実行する → Task ● Task Definition で定義したものを N 個常に実行しておきたい、 Scale Up / Down させたい → Service ● Task Definition で定義したものを ELB で負荷分散させたい → Service ● Task Definition で定義したものを Rolling Update したい → Service
  • 47. ECS の Network ● EC2 Instance をまたいだコンテナ間は直接通信することができない ● ELB を経由すれば可能
  • 49. ECS / Security コンテナ用 EC2 Instance に設定した IAM Instance role もしくは Task 毎に設定する IAM role で各種 AWS リソースへアクセスできるためパス ワードなどが見えてしまったりせずセキュア
  • 50. ECS と Swarm の比較 Swarm mode ECS Service Task Definition / Service Task (1 Container) Task (1+ Container) Load Balancer (VIP, L4) ELB (L4/L7) Overlay Network - - Instance Auto Scaling - Container Auto Scaling - Instalce / Task IAM Role
  • 51. Docker 1.12 はまだちょっと不安? ● RC版を軽く触った際におや?と思うことがあった ● Docker の GitHub issue を見てるとちょっと不安だったりする ● DockerCon 2016 に合わせててんこ盛り&急ぎすぎた?
  • 52.
  • 53. Mesos も試そう 続きは M3 tech meetup #3 で Docker ネタのスピーカー募集中!!