SlideShare a Scribd company logo
1 of 85
Docker Swarm 入門
Docker Swarm and Orchestration
第8回 コンテナ型仮想化の情報交換会@東京 #lxcjp
2015年9月26日(土)
@zembutsu
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
https://pixta.jp/@sphere
2
今日の内容
今日から始める Docker Swarm
‣ Docker オーケストレーション
Docker を支えるオーケストレーションと各ツールの役割
‣ Swarm を使ったコンテナ/クラスタ管理
Swarm クラスタの構築方法、主要なコマンド、コンテナの起動とストラテジの理解
‣ Swarm クラスタの構築
Swarm manager と ノードの登録方法
当初Dockerプラグインの紹介を
考えていましたが、あまりまと
まっていないSwarmまわりと、
オーケストレーションについて
皆さんと共有できればなと
思っています。
私・個人としては、基本的に、
無理にコンテナを導入したり
コンテナ環境に移行しようとし
ても、導入目的や目標が定まら
なければ・・・・
無残なコンテナの残骸が残って
しまうのかなと思っています。
┌──────────────────────┐
│ドッカースウォームが あらわれた! │
│ドッカーコンポーズが あらわれた! │
│コマンド? │
│ ∨ │
└━━━━━━━━━━━━━━━━━━━━━━┘
┌────┐
│いのち │
│だいじに │
└━━━━┘
┌──────コマンド─────┐
│ たたかう じゅもん │
│ とんずら げんじつとうひ │
└━━━━━━━━━━━━━━━┘
>
一方、だからといってDockerや
コンテナなり、周辺ツールを、
敵だとみなしたり距離を置くの
ではなく…
素材画像CREDIT:hanako / PIXTA(ピクスタ)
https://pixta.jp/illustration/14575501
様々な選択肢の中の1つとして
Dockerをどのような場面で、
どのように使っていくのか、
理解を深めるのが大切ではと
考えています。
7
‣ Docker Engine
• Dockerの中核となるプログラム
• コンテナの制御
‣ クライアント・サーバ型
• “docker” デーモン
• “docker” コマンドライン・ツール
まずはじめに、いわゆるDocker
と呼ばれるシステムの中心が、
このDockerエンジンです。
エンジンは、他のツールと連携
してオーケストレーション機能
(自動で環境構築やデプロイ・
プロビジョニング等の実施)を
実現しています。
Docker
Dockerです。
ご指導ご鞭撻、よろしくです。
コンテナ管理
それではオーケストレーション
について整理していきます。
Docker オーケストレーション
1■□□ Orchestration and Docker
物理マシン 物理マシン 物理マシン
OS OS
仮想化
システム
仮想化
システム HyperVisor
VM VM VM VM VM VM
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
物理マシン 仮想マシン クラウド
OS OS OS
Docker
Engine
Docker
Engine
Docker
Engine
App App App App App App
App App App App
仮想化・クラウド Dockerのコンテナ管理
オーケストレーション?
そもそも、Dockerとコンテナの
オーケストレーションとはなぜ
必要なのでしょうか。
VM VM VM VM VM VM
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
物理マシン 仮想マシン クラウド
OS OS OS
Docker
Engine
Docker
Engine
Docker
Engine
GUI
CLI
API
Docker Cluster 管理レイヤ
( Docker Swarm, Amazon ECS, Kuberntes,
rkt, Rancher …etc )
App App App App App App App App App App
仮想化・クラウド Dockerのコンテナ管理
物理マシン 物理マシン 物理マシン
OS OS
仮想化
システム
仮想化
システム HyperVisor
仮想化やクラウド環境で複数の
ホストを管理したように、コン
テナでも同様に管理したい!
VM VM VM VM VM VM
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
App App App App
物理マシン 仮想マシン クラウド
OS OS OS
Docker
Engine
Docker
Engine
Docker
Engine
App App App App App App
GUI
CLI
API
Docker Cluster 管理レイヤ
( Docker Swarm, Amazon ECS, Kuberntes,
rkt, Rancher …etc )
オーケストレーション
サービス検出・クラスタ管理
仮想化・クラウド Dockerのコンテナ管理
物理マシン 物理マシン 物理マシン
OS OS
仮想化
システム
仮想化
システム HyperVisor
更に、両方の環境を纏めて管理
したいというのは、もう少し先
かもしれません。
14Docker Swarm Guide
‣ 利点
開発者にとっての効率の良さ
すぐに利用できる点と、バージョン・コントロール、CI/CDの自動化。
アプリケーションのポータビリティ
開発をはじめ、テストやリリースに至るまで、
コンテナを通して一環したインフラ環境を利用できる。
‣ ポイント
Dockerそのものが何かするのではない(仮想化・クラウドと同じ)
– Dockerは、あくまでも、利用者の利便性を向上する道具(プラットフォームの役割)
Dockerはインフラを抽象化--developer’s efficiency and application portability
ただし、Dockerエンジンの管理
できる範囲は、あくまで1つの
OS環境のみです。
15Docker Swarm Guide
‣ Docker 動作ホスト環境の自動作成
仮想サーバの起動と Docker デーモンのプロビジョニングを自動的に行う
自動的に TLS を有効にした Docker 動作環境を構築
‣ コマンドラインで使うツール
docker-machine –d <ドライバ> [option] マシン名 …のように、コマンドで操作
‣ 対応環境
• Linux, Windows, Mac OS X に対応
• VirtualBox だけでなく、多くのクラウドに対応
Amazon Web Services, DigitalOcean, exoscale, Google Compute Engine, SoftLayer, Azure, Hyper-V,
OpenStack, RackSpace, VMwareFusion, VMwarea vCloud Air, VMware vSphere, SSH 可能なリモートホスト
Docker Machine 複数のDocker環境を簡単に使う
ためのツールがMachineです。
かつてはboot2dockerという、
VirtualBoxと連携するツールが
ありました。
Docker
Toolbox
複数の環境を一括管理できます。
・Machine
・Compose
・VirtualBox
・Kitematic
18Docker Swarm Guide
Docker Machine の入手と実行
‣ 方法1:バイナリのダウンロード
• https://github.com/docker/machine/releases/
$ curl -L https://github.com/docker/machine/releases/download/v0.4.1/docker-machine_linux-amd64 > ¥
/usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
‣ 方法2:Docker Toolbox
$ docker-machine create --driver=amazonec2 ¥
--amazonec2-access-key=<アクセス・キー> ¥
--amazonec2-secret-key=<シークレット・キー> ¥
--amazonec2-vpc-id=<VPC ID> ¥
ec2docker
$ docker-machine env ec2docker
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://54.152.12.116:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/ec2docker"
export DOCKER_MACHINE_NAME="ec2docker"
# Run this command to configure your shell:
# eval "$(docker-machine env ec2docker)“
$ docker-machine ssh ec2docker
こちらはAmazon EC2環境上に
Docker動作環境を作るコマンド
です。VPC IDの指定は必須です。
あとは、環境変数を指定して
リモート操作したり、SSHで
簡単にログイン出来ます。
GUIを操作しなくても、自動で
インスタンスの起動と、Docker
実行環境を構築してくれます。
$ docker-machine create --driver= digitalocean ¥
--digitalocean-access-token <token> ¥
ec2docker
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
b2d virtualbox Stopped
default virtualbox Stopped
dev virtualbox Stopped
do03 digitalocean Error tcp://104.131.113.166:2376
rancheros virtualbox Stopped
rancheros2 virtualbox Stopped
sl3 * softlayer
softlayer-docker01 * softlayer
softlayer-docker02 * softlayer
test2 virtualbox Stopped
testhost1 virtualbox Stopped
testhost21 virtualbox Stopped
testhost22 virtualbox Stopped
DigitalOceanの環境でも同様に
環境を構築することができます。
違いは「--driver」の指定です。
環境一覧を「ls」オプションで
見られます。
22Docker Swarm Guide
Docker Machine 主要オプション
• create … 作成
• rm … 削除
• ls … 一覧表示
• ssh … SSH 接続
• scp … ファイル転送
• start … 起動
• stop … 停止
• restart … 再起動
• ip … パブリック IP アドレスの確認
• inspect … 詳細表示
23Docker Swarm Guide
Docker Swarm
‣ Docker クラスタ管理ツール
Docker ホストの集まりを作成したり、アクセスできるようにするツールで、API を持つ
‣ コマンドラインで操作
docker-machine で環境を作り、docker run swarm create
‣ クラスタ形成
ディスカバリ(マネージャへの登録に、consul や etcd にも対応)
ストラテジ(どこのノードにコンテナを自動配置するか方針設定)
フィルタ(コンテナを配置する条件の設定は、Docker を抽象化)
次にSwarm(スウォーム)です。
複数OS上のDocker環境を1つの
リソースプールとして扱えます。
詳しくは次章で紹介します。
VM
Docker
Swarm
Manager
Dokku, Docker Compose, Krane, Jenkins, Apache Mesos …
VM
Docker
VM
Docker
VM
Docker
…
コンテナ コンテナ コンテナ コンテナ
重要なのは、マネージャと言う
プログラムがDockerデーモンに
代わって、dockerコマンドを受
け付けます。詳しくは後述。
25Docker Swarm Guide
Docker Compose
‣ 複数コンテナのアプリケーション自動設定
Dockerfile を複数のコンテナに拡張したようなイメージ
‣ コマンドラインで操作
docker-compose docker-compose.yml
‣ Linux, Windows, Mac OS X に対応
‣ 構成情報を YAML 形式のファイルで定義
そしてもう1つ、コードで
Dockerの環境を管理するもの。
docker-compose.yml
web:
build: .
command: php -S 0.0.0.0:8000 -t /wordpress
ports:
- "8000:8000"
links:
- db
volumes:
- .:/wordpress
db:
image: orchardup/mysql
environment:
MYSQL_DATABASE: wordpress
Dockerfile
FROM orchardup/php5
ADD . /wordpress
Dockerfileは単一のコンテナを
定義するのに対し、Composeは
複数のコンテナを定義します。
27Docker Swarm Guide
Docker Engine 1.8 (2015/08)
‣ ボリューム・プラグインが安定版(stable)
• docker run –v xxx --volume-driver=flocker
• https://docs.clusterhq.com/en/1.2.0/labs/docker-plugin.html
‣ ロギング・ドライバの提供開始
• Fluent http://blog.treasuredata.com/blog/2015/08/03/5-use-cases-docker-
fluentd/
• DELF https://www.graylog.org/centralize-your-docker-container-logging-with-
graylog-native-integration/
‣ 細かな改善
• 'docker daemon' , 'docker cp', 'docker ps --format', '--config'
それ以外でも、Docker本体でも
プラグイン機能の実装が進んで
います。
(画像引用)Flocker Docker plugin by ClusterHQ
https://docs.clusterhq.com/en/1.3.1/labs/docker-plugin.html
docker run --volume-driver=flocker …
・OpenStack Block Device
・Amazon AWS/EBS Block Device
・EMC Block Device
・ZFS Peer-to-Peer
・Loopback Block Device
・Flocker Docker plugin
・Flocker with Swarm
・Flocker with Compose
・Flocker with Weave
・Flocker with Mesosphere
・Flocker with Kubernetes
たとえばFlockerはボリューム
の可搬性やバックエンドとして
使うストレージを拡張します。
29Docker Swarm Guide
Docker Plugin
https://github.com/docker/docker/blob/master/docs/extend/plugins.md
ボリューム管理
• Blockbridge plugin … 一貫性を持つストレージ、暗号化、QoS等
• Convoy plugin … デバイスマッパーと NFS
• Flocker Plugin … データベースやステートフルなコンテナ
• GlusterFS plugin … GlusterFS を使用
• Pachyderm PFS plugin … Pachyderm file system 向け
• REX-Ray plugin … EC2, OpenStack, XtermIO, ScaleIO
鍵管理
• Keywhiz plugin
様々なプラグインが提供されて
います。一覧からネットワーク
プラグイン(weave)が見えな
くなりましたが、Docker 1.9の
本体にマージされるのでは(?)
30Docker Swarm Guide
Docker オーケストレーションのまとめ
‣ 複数のDockerおよびコンテナ基盤管理
• Machine … Docker 実行環境の自動構築や管理
• Swarm … コンテナ
• Compose … コードによるコンテナ・クラスタの一括管理
‣ プラグインによる機能拡張
• ボリューム ( Flocker ) stable
• ネットワーク ( Weave )
• などなど
31Docker Swarm Guide
‣ Docker Machine + Docker Compose
– docker / docker-compose run
– docker / docker-compose build
– Dockerfile, docker-compose.yml
‣ Vagrant
– vagrant up
– Vagrantfile
omake:似てる?
このあたり、とても似ているよ
うな気がしますが、たぶん設計
時の死思想が似通っているから
ではないかと思います。
(Keep It Simple, Stupid)
それに、微妙に役割も違います。
仮想ネットワーク管理なら
Vagrantのほうが今は有利
ですし、今後の展開に期待。
Docker Swam の基本概念
2■■□ Introduciton to Docker Swarm
どのようにDocker Swarmを使い
コンテナのスケジューリング
(設置)を実現しているかをみて
いきましょう。
33Docker Swarm Guide
Docker Swarm
‣ 役割
"Dockerホスト群をクラスタ化し、
どのホストでコンテナを起動するのか
コンテナをスケジュールするためのツール"
クラスタ全体を1つのリソース・プールとして扱う
Docker の API と互換性を持つ
• docker ps や run 等のコマンドを
Swarm 全体に対して適用できる
• どコンテナを置く(スケジュール)方針がアフィニティとフィルタ
もう一度簡単に整理します。
他のコンテナ・クラスタ管理
ツールとの一番大きな違いは
Docker APIの互換性です。
クライアントのdockerコマンド
がクラスタに対しても使えます。
docker engine
(docker daemon)
machine
docker client
$ docker run
コンテナ コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
TCP:2375
TCP:2376
DOCKER_OPTS="-H tcp://0.0.0.0:2376
--tlsverify
--tlscacert=/etc/docker/ca.pem
--tlscert=/etc/docker/server-cert.pem
--tlskey=/etc/docker/server-key.pem”
DOCKER_OPTS=“-H tcp://0.0.0.0:2375
–H unix:///var/run/docker.sock”
1台のDocker環境の操作なら
まだしも…
docker engine
(docker daemon)
machine
docker client
$ docker run
コンテナ コンテナ
docker engine
(docker daemon)
machine
コンテナ コンテナ
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
コンテナ コンテナ コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
TCP:2375
TCP:2376
DOCKER_OPTS="-H tcp://0.0.0.0:2376
--tlsverify
--tlscacert=/etc/docker/ca.pem
--tlscert=/etc/docker/server-cert.pem
--tlskey=/etc/docker/server-key.pem”
DOCKER_OPTS=“-H tcp://0.0.0.0:2375
–H unix:///var/run/docker.sock”
通常、複数Docker環境の操作は
環境変数の切り替えが都度行う
必要があります。面倒です。
Swarm Manager
machine
docker client
$ docker run
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
対してSwarmは、まずmanager
(マネージャ)を準備します。
Dockerデーモンに代わり、同じ
インターフェースで操作します。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド 例;DockerHub
次にDocker Machineを使うか、
あるいは手動でDocker動作環境
を構築します。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド 例;DockerHub
ディスカバリ・バックエンドに
自分のノード情報の登録(join)
します。正確にはSwarmという
エージェントを起動します。
join join join join
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド 例;DockerHub
登録された情報は、マネージャ
に送信され、マネージャが各
ノードを管理できるようになり、
Swarmはバックエンド監視対象
となります。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
リソース・プール
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド
複数のノードが、1つの環境
(リソース・プール)として
見えるようになります。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
コンテナ コンテナ コンテナ コンテナ
Docker互換 API
リソース・プール
ストラテジ フィルタ
• spread
• binpack
• randam
• constraint
• affinity
• port
• dependency
• health
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド
あとはストラテジとフィルタで
コンテナをスケジュールします。
42Docker Swarm Guide
Discovery Backends
‣ ディスカバリ・バックエンドとは?
Docker Swarm 向けのサービス・ディスカバリ
• ホステッド・ディスカバリ ( Docker Hub 経由;Docker社提供 )
• etcd
• consul
• Zookeeper
• リスト
$ swarm manage token://<token>
$ swarm manage etcd://<ip>/<prefix>
$ swarm manage consul://<ip>/<prefix>
$ swarm manage zk://<ip>/<prefix>
$ swarm manage file:///etc/swarm.list
Docker Swarm discovery
https://docs.docker.com/swarm/discovery/
それでは1つ1つのSwarm独自
概念についてみていきます。
まずはバックエンドです。
Swarmマネージャはノード情報
を基本的に管理しません。
それらはバックエンドの仕事。
Swarm Manager
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
ディスカバリ・バックエンド
hosted ( Docker Hub )
docker run swarm create
docker run –d –P ¥
swarm manage token://<token>
token自動発行
docker run -d swam join ¥
--addr=<node ip>:<node port> ¥
token://<token>
1
2
3
4
5
ノード認識・manager認識
Swarmクラスタ構成の流れです。
44Docker Swarm Guide
3つのスケジューリング・ストラテジ
‣ Spread
• コンテナの稼働数に応じてノードをランク付けし、スケジュールする
• コンテナ数が同じ場合は、ランダムにノードを選択
• デフォルト
‣ Binpack
• コンテナを少ないノードに集約する
• リソースが足りなくなるまで使用(リソースの指定が必須)
‣ Random
• ランダムにスケジュール先のノードを選択
次に、どのようにコンテナ配置
(スケジュール)するかの種類
と設定方法をみていきます。
45Docker Swarm Guide
‣ manager起動時のオプションで指定
スケジュールの設定方法
$ docker run -d -P swarm manage token://<token> --strategy spread
$ docker run -d -P swarm manage token://<token> --strategy binpack
$ docker run -d -P swarm manage token://<token> --strategy random
マネージャ起動時に設定します。
省略時は"spread"です。
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
Spreadは、まず始めにランダム
で1つのスケジュール先を決め
ます。
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
あとは、各ノードのコンテナ数
が一緒になるまで展開します。
コンテナ
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
3台のDocker環境であれば、
それぞれコンテナ数が一致する
まで広がり(spread)ます。
コンテナ
machine
docker engine
(docker daemon)
コンテナ
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
あとは・・・
コンテナ
machine
docker engine
(docker daemon)
コンテナ コンテナ
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
これの・・・
コンテナ
machine
docker engine
(docker daemon)
コンテナコンテナ コンテナ コンテナ
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
繰り返し。
コンテナ
machine
docker engine
(docker daemon)
コンテナコンテナ コンテナ コンテナコンテナ
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
繰り返し。
コンテナ
machine
docker engine
(docker daemon)
コンテナコンテナ コンテナ コンテナコンテナコンテナ コンテナ
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ
binpack Strategy
リソースを有効活用することができる
使われないマシンは増えないが、ダウンすると影響が大きい
docker run –m 512MB
一方のbinpackは必ずコンテナ
リソースを明示しなくては適用
されないので注意が必要です。
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ コンテナ コンテナ コンテナ
binpack Strategy
リソースを有効活用することができる
使われないマシンは増えないが、ダウンすると影響が大きい
docker run –m 512MB
1つのノードのリソース上限に
達してから、
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ コンテナコンテナ コンテナ コンテナ
binpack Strategy
リソースを有効活用することができる
使われないマシンは増えないが、ダウンすると影響が大きい
docker run –m 512MB
ようやく次のノードの利用を
開始します。
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ コンテナコンテナ コンテナコンテナ コンテナコンテナ コンテナ
binpack Strategy
リソースを有効活用することができる
使われないマシンは増えないが、ダウンすると影響が大きい
docker run –m 512MB
あとは、こちらもやはり同じ
繰り返しです。
あとの、ランダムストラテジは、
ランダムに決定されます。
以上がストラテジでした。
57Docker Swarm Guide
5つのフィルタ
‣ フィルタの役割
どこのDockerホスト上でコンテナを起動するのかを指定
コンテナのスケジューリング時に、ストラテジよりも優先する条件
‣ フィルタの種類
• Constraint(制約)…任意のラベルまたは標準Constraint
• Affinity…コンテナの稼働やイメージの有無
• Port…ポートの使用有無
• Dependency…リンクやボリュームの依存関係
• Health…障害(通信できない)ノードの除外
もう1つ、ストラテジの他に、
コンテナのスケジュールに影響
あるのがフィルタです。
58Docker Swarm Guide
‣ ノードのラベル(任意で設定可)
• docker –d --label region=tokyo --storage=ssd
• docker run –d –e constraint:region==tokyo nginx
‣ standard constraint(固定)
• docker info で表示される情報
• Storage Driver, Execution Driver, Kernel Version, Operating System
‣ node constraint
• docker run –d –e constraint:node==node1 nginx
• docker run –d –e constraint:node!=node1 nginx
Constraint フィルタ 1つめは、Dockerのノード固有
情報でスケジュールするフィル
タです。Constraintは、日本語
で「制約」や「拘束」という意
味があります。
59Docker Swarm Guide
‣ コンテナやイメージの有無でフィルタ
node2という名前のコンテナが稼働している
• docker run –d –e affinity:container==node2 mysql
tomcat:6または7のイメージを持っている
• docker run –d –e affinity:image==tomcat:[67] tomcat
Affinity フィルタ
既に稼働しているコンテナや、
イメージがダウンロード済みの
環境を指定できます。
名前は正規表現も指定できます。
60Docker Swarm Guide
‣ ポートが利用可能なノードを自動的に割り当て
• docker run –d –p 80:80 nginx
Port フィルタ ポートが使用されていない環境
で自動的に起動します。
61Docker Swarm Guide
‣ 依存関係がある場合、自動的に同じノードで起動
• ボリューム ( --volumes-from )
• リンク ( --link )
‣ 注意点
• 複数の依存関係がある場合、条件に一致しない場合は
(例:既に異なったノード上で動いている)
コンテナはスケジュール不可=起動できません
依存関係フィルタ 依存関係というよりは、事実上
の制約であり、仕様です。。。
これを知らないとハマります。
あと「health」は正常性であり、
Swamとの通信ができない環境は、
スケジュール先から自動的に
除外されます。
Docker Swam の操作
3■■■ Operations with Docker Swarm
それでは、実際の操作をみて
いきます。
Swarm Manager
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
ディスカバリ・バックエンド
hosted ( Docker Hub )
docker run swarm create
docker run –d –P ¥
swarm manage token://<token>
token自動発行
docker run -d swam join ¥
--addr=<node ip>:<node port> ¥
token://<token>
1
2
3
4
5
ノード認識・manager認識
64Docker Swarm Guide
方法1:手動でのManager起動
Swarm Manager
manager
docker engine
(docker daemon)
Swarm node
node1
docker engine
(docker daemon)
Swarm node
node2
docker engine
(docker daemon)
128.199.85.219 188.166.252.158 103.253.146.176
Swarm Manager
manager
docker engine
(docker daemon)
128.199.85.219
root@manager:~# docker run --rm swarm create
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
28d9e4361d1b: Pull complete
d6d187f38730: Pull complete
009ef5e8bff4: Pull complete
2c15723f36b9: Pull complete
207689e26fb2: Pull complete
efff5eea5f34: Pull complete
7823bc4f62a4: Pull complete
207e8b983242: Pull complete
library/swarm:latest: The image you are pulling has…
Digest: sha256:1502dd0c1d778d4f5e75d47820dd858ac1f6…
Status: Downloaded newer image for swarm:latest
7546a86262b847f7f34785ab2e0d6118
Swarm Manager
manager
docker engine
(docker daemon)
128.199.85.219
root@manager:~# docker run -d -P swarm manage ¥
token://7546a86262b847f7f34785ab2e0d6118
0477faab5932855d672411e69d9d97f48a852339cd4429be9ac25242db81a4e3
root@manager:~# docker ps
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS
NAMES
0477faab5932 swarm "/swarm manage token:" 4
seconds ago Up 3 seconds 0.0.0.0:32768->2375/tcp
trusting_mcclintock
root@manager:~# docker info
Containers: 1
Images: 8
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 10
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-57-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 1
Total Memory: 490 MiB
Name: manager
ID: Y53K:LHHC:7THY:5FJF:I5HW:AJR3:EHKH:23BG:J5H3:JERR:2OKS:D4F7
WARNING: No swap limit support
Labels:
provider=digitalocean
root@manager:~# docker -H tcp://127.0.0.1:32768 info
Containers: 0
Images: 0
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 0
CPUs: 0
Total Memory: 0 B
Name: 0477faab5932
export DOCKER_HOST=127.0.0.1:<port>
同じdockerコマンドでも、左は
Dockerデーモン、右はSwarmに
対して問い合わせた結果です。
表示内容が異なっています。
また、-H オプションは毎回
指定が大変なので、環境変数で
置き換えられます。
Swarm node
node1
docker engine
(docker daemon)
188.166.252.158
root@node1:~# docker run -d swarm join ¥
--addr=188.166.252.158:2375 ¥
token://7546a86262b847f7f34785ab2e0d6118
root@manager:~# docker run swarm list token://7546a86262b847f7f34785ab2e0d6118
188.166.252.158:2375
root@manager:~# docker -H tcp://127.0.0.1:32768 info
Containers: 4
Images: 1
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 1
node1: 188.166.252.158:2375
m Containers: 4
m Reserved CPUs: 0 / 1
m Reserved Memory: 0 B / 514.5 MiB
m Labels: executiondriver=native-0.2, kernelversion=3.13.0-57-generic,
operatingsystem=Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs
CPUs: 1
Total Memory: 514.5 MiB
Name: 0477faab5932
join時のポートとアドレスは、
マネージャではなく、この
ノード自身の追加が必要です。
Swarm node
node2
docker engine
(docker daemon)
103.253.146.176
root@node2:~# docker run -d swarm join ¥
--addr=103.253.146.176:2375 ¥
token://7546a86262b847f7f34785ab2e0d6118
$ docker run swarm list ..
103.253.146.176:2375
188.166.252.158:2375
Containers: 9
Images: 2
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 2
node1: 188.166.252.158:2375
m Containers: 4
m Reserved CPUs: 0 / 1
m Reserved Memory: 0 B / 514.5 MiB
m Labels: executiondriver=native-0.2, kernelversion=3.13.0-57-generic, operatingsystem=
Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs
node2: 103.253.146.176:2375
m Containers: 5
m Reserved CPUs: 0 / 1
m Reserved Memory: 0 B / 514.5 MiB
m Labels: executiondriver=native-0.2, kernelversion=3.13.0-57-generic, operatingsystem=
Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs
CPUs: 2
Total Memory: 1.005 GiB
Name: 0477faab5932
こちらは2台目です。
なお、addrはノード監視のため、
70Docker Swarm Guide
方法2:docker-machineを使う
– VirtualBox https://docs.docker.com/machine/get-started-cloud/
zem@dev:~$ docker run swarm create
3efff548bf670a29f3edfaf50cb89b02
$ docker-machine create ¥
--driver digitalocean ¥
--digitalocean-access-token 1b710a107aa0c78eac51f7baacc7d87 ¥
--digitalocean-region sgp1 ¥
--swarm ¥
--swarm-master ¥
--swarm-discovery token://3efff548bf670a29f3edfaf50cb89b02 ¥
swarm-master
最近では、こちらの方法で非常
に簡単に構築できます。例とし
てDigialOceanを紹介していま
すが、他のクラウド環境でも同
様に利用可能です。
71Docker Swarm Guide
Docker Machineで Swarm ノード追加
$ docker-machine create ¥
--driver digitalocean ¥
--digitalocean-access-token 1b710a107aa0c78eac51f7baacc7d87 ¥
--digitalocean-region sgp1 ¥
--swarm ¥
--swarm-discovery token://3efff548bf670a29f3edfaf50cb89b02 ¥
swarm-node-01
先ほどとの違いは、マスタ作成
フラグがないだけです。
$ docker-machine env --swarm swarm-master
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
swarm-master digitalocean Running tcp://128.199.179.153:2376 swarm-master (master)
swarm-node-01 digitalocean Running tcp://128.199.157.183:2376 swarm-master
$ docker info
Swarm Manager
node
swarm-master
docker engine
(docker daemon)
Swarm node
node-01
docker engine
(docker daemon)
VM
docker machine
hosted
discovery
(token)
Docker Machineを使えばコント
ロール・パネルにログインしな
くても、自動的に環境が構築さ
れますし、削除もできます。
zem@dev:~$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
manager digitalocean Running tcp://128.199.85.219:2376
node1 digitalocean Running tcp://188.166.252.158:2376
node2 digitalocean Running tcp://103.253.146.176:2376
swarm-master digitalocean Running tcp://128.199.179.153:2376 swarm-master (master)
swarm-node-01 digitalocean Timeout
swarm-node-02 digitalocean Running tcp://188.166.252.45:2376 swarm-master
zem@dev:~$ docker run -d nginx
34d71ac79d1b6e9b7f2c136c52dcbd4b9f886b61e376bf72f1e893197e85c556
zem@dev:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
34d71ac79d1b nginx "nginx -g 'daemon off" 4 seconds ago Up 3 seconds
80/tcp, 443/tcp swarm-node-01/romantic_pike
"SWARM"列でDocker Machineの
管理対象かどうか確認出来ます。
あとは「docker run」で起動す
ると、コンテナ名には自動的に
「Swarmノード名称/」も表示さ
れて見えます(clientがSwarm
に問い合わせたときのみ)。
zem@dev:~$ docker-machine ssh swarm-node-01
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-57-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Fri Sep 25 23:53:04 EDT 2015
System load: 0.76 Processes: 70
Usage of /: 8.0% of 19.56GB Users logged in: 0
Memory usage: 15% IP address for eth0: 128.199.157.183
Swap usage: 0% IP address for docker0: 172.17.42.1
Graph this data and manage this system at:
https://landscape.canonical.com/
root@swarm-node-01:~#
root@swarm-node-01:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
34d71ac79d1b nginx "nginx -g 'daemon off" 59 seconds ago Up 58 seconds
80/tcp, 443/tcp romantic_pike
2d1a62fbc9e1 swarm:latest "/swarm join --advert" 2 hours ago Up 2 hours
2375/tcp swarm-agent
docker-machneと連携していれ
ば、各Swarmノードへの状況把
握も「ssh」コマンドを使って
簡単になります。
77Docker Swarm Guide
環境構築まとめ
‣ docker swarm コンテナ
• hosted discovery
• マネージャの起動
• クライアントをtokenでjoinする
‣ Docker Machine で Swarm クラスタ作成
• 環境構築が簡単
スケジューリングのための言葉
(ディスカバリ・バックエンド、
ストラテジ、フィルタ)があり
ますが、その他は基本的に通常
のDockerクライアントと同様の
操作になります。
今日のまとめ
Wrap up
79
今日のまとめ
今日から始める Docker Swarm
‣ Docker オーケストレーション
Docker を支えるオーケストレーションと各ツールの役割
‣ Swarm を使ったコンテナ/クラスタ管理
Swarm クラスタの構築方法 … Manager とノード
主要なコマンドは docker と同じ
ストラテジの理解 … spread と binpack と Random
フィルタ … コンテナをどこに配置するか
• Constraint, Affinity, Port, Dependency, Health
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
コンテナ コンテナ コンテナ コンテナ
Docker互換 API
リソース・プール
ストラテジ フィルタ
• spread
• binpack
• randam
• constraint
• affinity
• port
• dependency
• health
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド
81
現在の Swarm 課題
今日から始める Docker Swarm
‣ 目下開発中
• Version 0.4 まだベータ版の扱い
‣ Swarmそのものが何かをする訳ではない
• あくまでクラスタ管理を手助けするもの、でも今後は…?
‣ 別のアプローチ
• Kubernetes, OpenShift, Tectonic, Rancher
まだまだ課題はあります。目的
によっては、別のアプローチを
お試しいただくのも良いかと思
います。あくまでSwarmとは、
コンテナ管理の選択肢の1つ
です。
Swarm
Swarm(スウォーム)よ! スワームじゃないわ!
そこのところも宜しく頼むわねっ!
クラスタ管理
まだ登場したばかりのSwarm。
今後の成長(改造)に期待です。
83
何か気になることはありますか?
■会場からの質問と回答(個人的見解)
• Docker Plugins はどうなるのでしょうか?
• 流動的ですが、Weaveは1.9にマージかも
• Docker Swarm の利点は、dockerコマンドと同様に
リソース全体を操作できる点ですか?
• その通りだと思います。
• フェイルオーバー等は対応しないのか?
• おそらく、そこはSwarmが管理しないレイヤ。
ただし、将来的にMachine,Compose,Swarmが
連携するのであれば、機能的に実現できるかも
しれません。今は個別のツール開発の段階です。
• どうやってスライドの画像を作っていますか?
• エンジニアのためのプレゼン勉強会、
次回 10/10(土) 14:00 からあります!
• http://infrapre.connpass.com/
84
‣ Docker ドキュメント
http://docs.docker.com/
‣ Docker Machine
https://docs.docker.com/machine/
‣ docker-machine - Docker Machine ドキュメント参考日本語訳 - Qiita
http://qiita.com/zembutsu/items/9d189da5d2c7708717a3
‣ Docker Swarm
https://docs.docker.com/swarm/
‣ DockerSwarm - Docker Swarm ドキュメント参考日本語訳 目次 - Qiita
http://qiita.com/zembutsu/items/a1f0a89581d1d5832e2e
‣ Docker Compose
https://docs.docker.com/compose/
‣ docker-compose - Docker Compose ドキュメント参考日本語訳 概要・目次 - Qiita
http://qiita.com/zembutsu/items/c277830c469d7a25ba15
参考情報
References
背景画像CREDIT:rvika/ PIXTA(ピクスタ)
https://pixta.jp/@prof261092
予告?
時間切れだったので、いつかまた、どってかで!

More Related Content

What's hot

コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)NTT DATA Technology & Innovation
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)NTT DATA Technology & Innovation
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414Kentaro Ebisawa
 
KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話imurata8203
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
今Serverlessが面白いわけ
今Serverlessが面白いわけ今Serverlessが面白いわけ
今Serverlessが面白いわけYoichi Kawasaki
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 

What's hot (20)

コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話KubernetesバックアップツールVeleroとちょっとした苦労話
KubernetesバックアップツールVeleroとちょっとした苦労話
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
今Serverlessが面白いわけ
今Serverlessが面白いわけ今Serverlessが面白いわけ
今Serverlessが面白いわけ
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 

Viewers also liked

Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Docker Machineを使ってみよう
Docker Machineを使ってみようDocker Machineを使ってみよう
Docker Machineを使ってみよう真俊 横田
 
社内勉強会(Docker)
社内勉強会(Docker)社内勉強会(Docker)
社内勉強会(Docker)Shinya Sasaki
 
15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDockerMasahiro NAKAYAMA
 
とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法Kenshi Muto
 
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通してKenshi Muto
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Kazuyuki Mori
 
書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフローMasahiro Hidaka
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxTakayuki Shimizukawa
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Works Applications
 

Viewers also liked (14)

Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker Machineを使ってみよう
Docker Machineを使ってみようDocker Machineを使ってみよう
Docker Machineを使ってみよう
 
社内勉強会(Docker)
社内勉強会(Docker)社内勉強会(Docker)
社内勉強会(Docker)
 
15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker
 
とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法
 
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
 
書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
 

Similar to Docker Swarm入門

Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
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
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku altShugo Numano
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見るzhengen lin
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspecTsuyoshi Yamada
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Masahito Zembutsu
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Masahito Zembutsu
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術Etsuji Nakai
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築Saito5656
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 

Similar to Docker Swarm入門 (20)

Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku alt
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
Dockerは2016年の秋現在どのような状況なのか~忙しい人の5分で分かるDocker~
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 

More from Masahito Zembutsu

忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜Masahito Zembutsu
 
自由検証環境提供宣言+Docker Compose V2 GA
自由検証環境提供宣言+Docker Compose V2 GA自由検証環境提供宣言+Docker Compose V2 GA
自由検証環境提供宣言+Docker Compose V2 GAMasahito Zembutsu
 
さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19Masahito Zembutsu
 
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」Masahito Zembutsu
 
インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話Masahito Zembutsu
 
3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」Masahito Zembutsu
 
ようこそオンラインの展示会場へ
ようこそオンラインの展示会場へようこそオンラインの展示会場へ
ようこそオンラインの展示会場へMasahito Zembutsu
 
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020Masahito Zembutsu
 
オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編Masahito Zembutsu
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Masahito Zembutsu
 
クリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようクリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようMasahito Zembutsu
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19os2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19osMasahito Zembutsu
 
CNCF Updates 2019 Winter version and Knative
CNCF Updates 2019  Winter version and KnativeCNCF Updates 2019  Winter version and Knative
CNCF Updates 2019 Winter version and KnativeMasahito Zembutsu
 
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)Masahito Zembutsu
 
CNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返るCNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返るMasahito Zembutsu
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Masahito Zembutsu
 

More from Masahito Zembutsu (20)

忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
 
自由検証環境提供宣言+Docker Compose V2 GA
自由検証環境提供宣言+Docker Compose V2 GA自由検証環境提供宣言+Docker Compose V2 GA
自由検証環境提供宣言+Docker Compose V2 GA
 
さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19
 
Docker Chronicle 2021.09
Docker Chronicle  2021.09Docker Chronicle  2021.09
Docker Chronicle 2021.09
 
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
 
インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話
 
3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」
 
ようこそオンラインの展示会場へ
ようこそオンラインの展示会場へようこそオンラインの展示会場へ
ようこそオンラインの展示会場へ
 
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
 
オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編
 
Jitsi Meetとは?
Jitsi Meetとは?Jitsi Meetとは?
Jitsi Meetとは?
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
 
クリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようクリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしよう
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19os2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19os
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
CNCF Updates 2019 Winter version and Knative
CNCF Updates 2019  Winter version and KnativeCNCF Updates 2019  Winter version and Knative
CNCF Updates 2019 Winter version and Knative
 
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
 
CNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返るCNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返る
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
 

Recently uploaded

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Recently uploaded (7)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

Docker Swarm入門

  • 1. Docker Swarm 入門 Docker Swarm and Orchestration 第8回 コンテナ型仮想化の情報交換会@東京 #lxcjp 2015年9月26日(土) @zembutsu 背景画像CREDIT:スフィア / PIXTA(ピクスタ) https://pixta.jp/@sphere
  • 2. 2 今日の内容 今日から始める Docker Swarm ‣ Docker オーケストレーション Docker を支えるオーケストレーションと各ツールの役割 ‣ Swarm を使ったコンテナ/クラスタ管理 Swarm クラスタの構築方法、主要なコマンド、コンテナの起動とストラテジの理解 ‣ Swarm クラスタの構築 Swarm manager と ノードの登録方法 当初Dockerプラグインの紹介を 考えていましたが、あまりまと まっていないSwarmまわりと、 オーケストレーションについて 皆さんと共有できればなと 思っています。
  • 5. ┌──────────────────────┐ │ドッカースウォームが あらわれた! │ │ドッカーコンポーズが あらわれた! │ │コマンド? │ │ ∨ │ └━━━━━━━━━━━━━━━━━━━━━━┘ ┌────┐ │いのち │ │だいじに │ └━━━━┘ ┌──────コマンド─────┐ │ たたかう じゅもん │ │ とんずら げんじつとうひ │ └━━━━━━━━━━━━━━━┘ > 一方、だからといってDockerや コンテナなり、周辺ツールを、 敵だとみなしたり距離を置くの ではなく…
  • 7. 7 ‣ Docker Engine • Dockerの中核となるプログラム • コンテナの制御 ‣ クライアント・サーバ型 • “docker” デーモン • “docker” コマンドライン・ツール まずはじめに、いわゆるDocker と呼ばれるシステムの中心が、 このDockerエンジンです。
  • 11. 物理マシン 物理マシン 物理マシン OS OS 仮想化 システム 仮想化 システム HyperVisor VM VM VM VM VM VM Guest OS Guest OS Guest OS Guest OS Guest OS Guest OS 物理マシン 仮想マシン クラウド OS OS OS Docker Engine Docker Engine Docker Engine App App App App App App App App App App 仮想化・クラウド Dockerのコンテナ管理 オーケストレーション? そもそも、Dockerとコンテナの オーケストレーションとはなぜ 必要なのでしょうか。
  • 12. VM VM VM VM VM VM Guest OS Guest OS Guest OS Guest OS Guest OS Guest OS 物理マシン 仮想マシン クラウド OS OS OS Docker Engine Docker Engine Docker Engine GUI CLI API Docker Cluster 管理レイヤ ( Docker Swarm, Amazon ECS, Kuberntes, rkt, Rancher …etc ) App App App App App App App App App App 仮想化・クラウド Dockerのコンテナ管理 物理マシン 物理マシン 物理マシン OS OS 仮想化 システム 仮想化 システム HyperVisor 仮想化やクラウド環境で複数の ホストを管理したように、コン テナでも同様に管理したい!
  • 13. VM VM VM VM VM VM Guest OS Guest OS Guest OS Guest OS Guest OS Guest OS App App App App 物理マシン 仮想マシン クラウド OS OS OS Docker Engine Docker Engine Docker Engine App App App App App App GUI CLI API Docker Cluster 管理レイヤ ( Docker Swarm, Amazon ECS, Kuberntes, rkt, Rancher …etc ) オーケストレーション サービス検出・クラスタ管理 仮想化・クラウド Dockerのコンテナ管理 物理マシン 物理マシン 物理マシン OS OS 仮想化 システム 仮想化 システム HyperVisor 更に、両方の環境を纏めて管理 したいというのは、もう少し先 かもしれません。
  • 14. 14Docker Swarm Guide ‣ 利点 開発者にとっての効率の良さ すぐに利用できる点と、バージョン・コントロール、CI/CDの自動化。 アプリケーションのポータビリティ 開発をはじめ、テストやリリースに至るまで、 コンテナを通して一環したインフラ環境を利用できる。 ‣ ポイント Dockerそのものが何かするのではない(仮想化・クラウドと同じ) – Dockerは、あくまでも、利用者の利便性を向上する道具(プラットフォームの役割) Dockerはインフラを抽象化--developer’s efficiency and application portability ただし、Dockerエンジンの管理 できる範囲は、あくまで1つの OS環境のみです。
  • 15. 15Docker Swarm Guide ‣ Docker 動作ホスト環境の自動作成 仮想サーバの起動と Docker デーモンのプロビジョニングを自動的に行う 自動的に TLS を有効にした Docker 動作環境を構築 ‣ コマンドラインで使うツール docker-machine –d <ドライバ> [option] マシン名 …のように、コマンドで操作 ‣ 対応環境 • Linux, Windows, Mac OS X に対応 • VirtualBox だけでなく、多くのクラウドに対応 Amazon Web Services, DigitalOcean, exoscale, Google Compute Engine, SoftLayer, Azure, Hyper-V, OpenStack, RackSpace, VMwareFusion, VMwarea vCloud Air, VMware vSphere, SSH 可能なリモートホスト Docker Machine 複数のDocker環境を簡単に使う ためのツールがMachineです。
  • 18. 18Docker Swarm Guide Docker Machine の入手と実行 ‣ 方法1:バイナリのダウンロード • https://github.com/docker/machine/releases/ $ curl -L https://github.com/docker/machine/releases/download/v0.4.1/docker-machine_linux-amd64 > ¥ /usr/local/bin/docker-machine $ sudo chmod +x /usr/local/bin/docker-machine ‣ 方法2:Docker Toolbox
  • 19. $ docker-machine create --driver=amazonec2 ¥ --amazonec2-access-key=<アクセス・キー> ¥ --amazonec2-secret-key=<シークレット・キー> ¥ --amazonec2-vpc-id=<VPC ID> ¥ ec2docker $ docker-machine env ec2docker export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://54.152.12.116:2376" export DOCKER_CERT_PATH="/root/.docker/machine/machines/ec2docker" export DOCKER_MACHINE_NAME="ec2docker" # Run this command to configure your shell: # eval "$(docker-machine env ec2docker)“ $ docker-machine ssh ec2docker こちらはAmazon EC2環境上に Docker動作環境を作るコマンド です。VPC IDの指定は必須です。 あとは、環境変数を指定して リモート操作したり、SSHで 簡単にログイン出来ます。
  • 21. $ docker-machine create --driver= digitalocean ¥ --digitalocean-access-token <token> ¥ ec2docker $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM b2d virtualbox Stopped default virtualbox Stopped dev virtualbox Stopped do03 digitalocean Error tcp://104.131.113.166:2376 rancheros virtualbox Stopped rancheros2 virtualbox Stopped sl3 * softlayer softlayer-docker01 * softlayer softlayer-docker02 * softlayer test2 virtualbox Stopped testhost1 virtualbox Stopped testhost21 virtualbox Stopped testhost22 virtualbox Stopped DigitalOceanの環境でも同様に 環境を構築することができます。 違いは「--driver」の指定です。 環境一覧を「ls」オプションで 見られます。
  • 22. 22Docker Swarm Guide Docker Machine 主要オプション • create … 作成 • rm … 削除 • ls … 一覧表示 • ssh … SSH 接続 • scp … ファイル転送 • start … 起動 • stop … 停止 • restart … 再起動 • ip … パブリック IP アドレスの確認 • inspect … 詳細表示
  • 23. 23Docker Swarm Guide Docker Swarm ‣ Docker クラスタ管理ツール Docker ホストの集まりを作成したり、アクセスできるようにするツールで、API を持つ ‣ コマンドラインで操作 docker-machine で環境を作り、docker run swarm create ‣ クラスタ形成 ディスカバリ(マネージャへの登録に、consul や etcd にも対応) ストラテジ(どこのノードにコンテナを自動配置するか方針設定) フィルタ(コンテナを配置する条件の設定は、Docker を抽象化) 次にSwarm(スウォーム)です。 複数OS上のDocker環境を1つの リソースプールとして扱えます。 詳しくは次章で紹介します。
  • 24. VM Docker Swarm Manager Dokku, Docker Compose, Krane, Jenkins, Apache Mesos … VM Docker VM Docker VM Docker … コンテナ コンテナ コンテナ コンテナ 重要なのは、マネージャと言う プログラムがDockerデーモンに 代わって、dockerコマンドを受 け付けます。詳しくは後述。
  • 25. 25Docker Swarm Guide Docker Compose ‣ 複数コンテナのアプリケーション自動設定 Dockerfile を複数のコンテナに拡張したようなイメージ ‣ コマンドラインで操作 docker-compose docker-compose.yml ‣ Linux, Windows, Mac OS X に対応 ‣ 構成情報を YAML 形式のファイルで定義 そしてもう1つ、コードで Dockerの環境を管理するもの。
  • 26. docker-compose.yml web: build: . command: php -S 0.0.0.0:8000 -t /wordpress ports: - "8000:8000" links: - db volumes: - .:/wordpress db: image: orchardup/mysql environment: MYSQL_DATABASE: wordpress Dockerfile FROM orchardup/php5 ADD . /wordpress Dockerfileは単一のコンテナを 定義するのに対し、Composeは 複数のコンテナを定義します。
  • 27. 27Docker Swarm Guide Docker Engine 1.8 (2015/08) ‣ ボリューム・プラグインが安定版(stable) • docker run –v xxx --volume-driver=flocker • https://docs.clusterhq.com/en/1.2.0/labs/docker-plugin.html ‣ ロギング・ドライバの提供開始 • Fluent http://blog.treasuredata.com/blog/2015/08/03/5-use-cases-docker- fluentd/ • DELF https://www.graylog.org/centralize-your-docker-container-logging-with- graylog-native-integration/ ‣ 細かな改善 • 'docker daemon' , 'docker cp', 'docker ps --format', '--config' それ以外でも、Docker本体でも プラグイン機能の実装が進んで います。
  • 28. (画像引用)Flocker Docker plugin by ClusterHQ https://docs.clusterhq.com/en/1.3.1/labs/docker-plugin.html docker run --volume-driver=flocker … ・OpenStack Block Device ・Amazon AWS/EBS Block Device ・EMC Block Device ・ZFS Peer-to-Peer ・Loopback Block Device ・Flocker Docker plugin ・Flocker with Swarm ・Flocker with Compose ・Flocker with Weave ・Flocker with Mesosphere ・Flocker with Kubernetes たとえばFlockerはボリューム の可搬性やバックエンドとして 使うストレージを拡張します。
  • 29. 29Docker Swarm Guide Docker Plugin https://github.com/docker/docker/blob/master/docs/extend/plugins.md ボリューム管理 • Blockbridge plugin … 一貫性を持つストレージ、暗号化、QoS等 • Convoy plugin … デバイスマッパーと NFS • Flocker Plugin … データベースやステートフルなコンテナ • GlusterFS plugin … GlusterFS を使用 • Pachyderm PFS plugin … Pachyderm file system 向け • REX-Ray plugin … EC2, OpenStack, XtermIO, ScaleIO 鍵管理 • Keywhiz plugin 様々なプラグインが提供されて います。一覧からネットワーク プラグイン(weave)が見えな くなりましたが、Docker 1.9の 本体にマージされるのでは(?)
  • 30. 30Docker Swarm Guide Docker オーケストレーションのまとめ ‣ 複数のDockerおよびコンテナ基盤管理 • Machine … Docker 実行環境の自動構築や管理 • Swarm … コンテナ • Compose … コードによるコンテナ・クラスタの一括管理 ‣ プラグインによる機能拡張 • ボリューム ( Flocker ) stable • ネットワーク ( Weave ) • などなど
  • 31. 31Docker Swarm Guide ‣ Docker Machine + Docker Compose – docker / docker-compose run – docker / docker-compose build – Dockerfile, docker-compose.yml ‣ Vagrant – vagrant up – Vagrantfile omake:似てる? このあたり、とても似ているよ うな気がしますが、たぶん設計 時の死思想が似通っているから ではないかと思います。 (Keep It Simple, Stupid) それに、微妙に役割も違います。 仮想ネットワーク管理なら Vagrantのほうが今は有利 ですし、今後の展開に期待。
  • 32. Docker Swam の基本概念 2■■□ Introduciton to Docker Swarm どのようにDocker Swarmを使い コンテナのスケジューリング (設置)を実現しているかをみて いきましょう。
  • 33. 33Docker Swarm Guide Docker Swarm ‣ 役割 "Dockerホスト群をクラスタ化し、 どのホストでコンテナを起動するのか コンテナをスケジュールするためのツール" クラスタ全体を1つのリソース・プールとして扱う Docker の API と互換性を持つ • docker ps や run 等のコマンドを Swarm 全体に対して適用できる • どコンテナを置く(スケジュール)方針がアフィニティとフィルタ もう一度簡単に整理します。 他のコンテナ・クラスタ管理 ツールとの一番大きな違いは Docker APIの互換性です。 クライアントのdockerコマンド がクラスタに対しても使えます。
  • 34. docker engine (docker daemon) machine docker client $ docker run コンテナ コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" TCP:2375 TCP:2376 DOCKER_OPTS="-H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem” DOCKER_OPTS=“-H tcp://0.0.0.0:2375 –H unix:///var/run/docker.sock” 1台のDocker環境の操作なら まだしも…
  • 35. docker engine (docker daemon) machine docker client $ docker run コンテナ コンテナ docker engine (docker daemon) machine コンテナ コンテナ docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine コンテナ コンテナ コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" TCP:2375 TCP:2376 DOCKER_OPTS="-H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem” DOCKER_OPTS=“-H tcp://0.0.0.0:2375 –H unix:///var/run/docker.sock” 通常、複数Docker環境の操作は 環境変数の切り替えが都度行う 必要があります。面倒です。
  • 36. Swarm Manager machine docker client $ docker run $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング 対してSwarmは、まずmanager (マネージャ)を準備します。 Dockerデーモンに代わり、同じ インターフェースで操作します。
  • 37. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 例;DockerHub 次にDocker Machineを使うか、 あるいは手動でDocker動作環境 を構築します。
  • 38. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 例;DockerHub ディスカバリ・バックエンドに 自分のノード情報の登録(join) します。正確にはSwarmという エージェントを起動します。 join join join join
  • 39. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 例;DockerHub 登録された情報は、マネージャ に送信され、マネージャが各 ノードを管理できるようになり、 Swarmはバックエンド監視対象 となります。
  • 40. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API リソース・プール コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 複数のノードが、1つの環境 (リソース・プール)として 見えるようになります。
  • 41. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) コンテナ コンテナ コンテナ コンテナ Docker互換 API リソース・プール ストラテジ フィルタ • spread • binpack • randam • constraint • affinity • port • dependency • health コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド あとはストラテジとフィルタで コンテナをスケジュールします。
  • 42. 42Docker Swarm Guide Discovery Backends ‣ ディスカバリ・バックエンドとは? Docker Swarm 向けのサービス・ディスカバリ • ホステッド・ディスカバリ ( Docker Hub 経由;Docker社提供 ) • etcd • consul • Zookeeper • リスト $ swarm manage token://<token> $ swarm manage etcd://<ip>/<prefix> $ swarm manage consul://<ip>/<prefix> $ swarm manage zk://<ip>/<prefix> $ swarm manage file:///etc/swarm.list Docker Swarm discovery https://docs.docker.com/swarm/discovery/ それでは1つ1つのSwarm独自 概念についてみていきます。 まずはバックエンドです。 Swarmマネージャはノード情報 を基本的に管理しません。 それらはバックエンドの仕事。
  • 43. Swarm Manager machine docker engine (docker daemon) machine docker engine (docker daemon) ディスカバリ・バックエンド hosted ( Docker Hub ) docker run swarm create docker run –d –P ¥ swarm manage token://<token> token自動発行 docker run -d swam join ¥ --addr=<node ip>:<node port> ¥ token://<token> 1 2 3 4 5 ノード認識・manager認識 Swarmクラスタ構成の流れです。
  • 44. 44Docker Swarm Guide 3つのスケジューリング・ストラテジ ‣ Spread • コンテナの稼働数に応じてノードをランク付けし、スケジュールする • コンテナ数が同じ場合は、ランダムにノードを選択 • デフォルト ‣ Binpack • コンテナを少ないノードに集約する • リソースが足りなくなるまで使用(リソースの指定が必須) ‣ Random • ランダムにスケジュール先のノードを選択 次に、どのようにコンテナ配置 (スケジュール)するかの種類 と設定方法をみていきます。
  • 45. 45Docker Swarm Guide ‣ manager起動時のオプションで指定 スケジュールの設定方法 $ docker run -d -P swarm manage token://<token> --strategy spread $ docker run -d -P swarm manage token://<token> --strategy binpack $ docker run -d -P swarm manage token://<token> --strategy random マネージャ起動時に設定します。 省略時は"spread"です。
  • 46. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 Spreadは、まず始めにランダム で1つのスケジュール先を決め ます。
  • 47. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 あとは、各ノードのコンテナ数 が一緒になるまで展開します。 コンテナ
  • 48. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 3台のDocker環境であれば、 それぞれコンテナ数が一致する まで広がり(spread)ます。 コンテナ machine docker engine (docker daemon) コンテナ
  • 49. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 あとは・・・ コンテナ machine docker engine (docker daemon) コンテナ コンテナ
  • 50. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 これの・・・ コンテナ machine docker engine (docker daemon) コンテナコンテナ コンテナ コンテナ
  • 51. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 繰り返し。 コンテナ machine docker engine (docker daemon) コンテナコンテナ コンテナ コンテナコンテナ
  • 52. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ Spread Strategy 幅広く処理を分散することができる 多くのノードがある場合に有用 繰り返し。 コンテナ machine docker engine (docker daemon) コンテナコンテナ コンテナ コンテナコンテナコンテナ コンテナ
  • 53. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ binpack Strategy リソースを有効活用することができる 使われないマシンは増えないが、ダウンすると影響が大きい docker run –m 512MB 一方のbinpackは必ずコンテナ リソースを明示しなくては適用 されないので注意が必要です。
  • 54. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ コンテナ コンテナ コンテナ binpack Strategy リソースを有効活用することができる 使われないマシンは増えないが、ダウンすると影響が大きい docker run –m 512MB 1つのノードのリソース上限に 達してから、
  • 55. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ コンテナコンテナ コンテナ コンテナ binpack Strategy リソースを有効活用することができる 使われないマシンは増えないが、ダウンすると影響が大きい docker run –m 512MB ようやく次のノードの利用を 開始します。
  • 56. machine docker engine (docker daemon) machine docker engine (docker daemon) コンテナ コンテナコンテナ コンテナコンテナ コンテナコンテナ コンテナ binpack Strategy リソースを有効活用することができる 使われないマシンは増えないが、ダウンすると影響が大きい docker run –m 512MB あとは、こちらもやはり同じ 繰り返しです。 あとの、ランダムストラテジは、 ランダムに決定されます。 以上がストラテジでした。
  • 57. 57Docker Swarm Guide 5つのフィルタ ‣ フィルタの役割 どこのDockerホスト上でコンテナを起動するのかを指定 コンテナのスケジューリング時に、ストラテジよりも優先する条件 ‣ フィルタの種類 • Constraint(制約)…任意のラベルまたは標準Constraint • Affinity…コンテナの稼働やイメージの有無 • Port…ポートの使用有無 • Dependency…リンクやボリュームの依存関係 • Health…障害(通信できない)ノードの除外 もう1つ、ストラテジの他に、 コンテナのスケジュールに影響 あるのがフィルタです。
  • 58. 58Docker Swarm Guide ‣ ノードのラベル(任意で設定可) • docker –d --label region=tokyo --storage=ssd • docker run –d –e constraint:region==tokyo nginx ‣ standard constraint(固定) • docker info で表示される情報 • Storage Driver, Execution Driver, Kernel Version, Operating System ‣ node constraint • docker run –d –e constraint:node==node1 nginx • docker run –d –e constraint:node!=node1 nginx Constraint フィルタ 1つめは、Dockerのノード固有 情報でスケジュールするフィル タです。Constraintは、日本語 で「制約」や「拘束」という意 味があります。
  • 59. 59Docker Swarm Guide ‣ コンテナやイメージの有無でフィルタ node2という名前のコンテナが稼働している • docker run –d –e affinity:container==node2 mysql tomcat:6または7のイメージを持っている • docker run –d –e affinity:image==tomcat:[67] tomcat Affinity フィルタ 既に稼働しているコンテナや、 イメージがダウンロード済みの 環境を指定できます。 名前は正規表現も指定できます。
  • 60. 60Docker Swarm Guide ‣ ポートが利用可能なノードを自動的に割り当て • docker run –d –p 80:80 nginx Port フィルタ ポートが使用されていない環境 で自動的に起動します。
  • 61. 61Docker Swarm Guide ‣ 依存関係がある場合、自動的に同じノードで起動 • ボリューム ( --volumes-from ) • リンク ( --link ) ‣ 注意点 • 複数の依存関係がある場合、条件に一致しない場合は (例:既に異なったノード上で動いている) コンテナはスケジュール不可=起動できません 依存関係フィルタ 依存関係というよりは、事実上 の制約であり、仕様です。。。 これを知らないとハマります。 あと「health」は正常性であり、 Swamとの通信ができない環境は、 スケジュール先から自動的に 除外されます。
  • 62. Docker Swam の操作 3■■■ Operations with Docker Swarm それでは、実際の操作をみて いきます。
  • 63. Swarm Manager machine docker engine (docker daemon) machine docker engine (docker daemon) ディスカバリ・バックエンド hosted ( Docker Hub ) docker run swarm create docker run –d –P ¥ swarm manage token://<token> token自動発行 docker run -d swam join ¥ --addr=<node ip>:<node port> ¥ token://<token> 1 2 3 4 5 ノード認識・manager認識
  • 64. 64Docker Swarm Guide 方法1:手動でのManager起動 Swarm Manager manager docker engine (docker daemon) Swarm node node1 docker engine (docker daemon) Swarm node node2 docker engine (docker daemon) 128.199.85.219 188.166.252.158 103.253.146.176
  • 65. Swarm Manager manager docker engine (docker daemon) 128.199.85.219 root@manager:~# docker run --rm swarm create Unable to find image 'swarm:latest' locally latest: Pulling from library/swarm 28d9e4361d1b: Pull complete d6d187f38730: Pull complete 009ef5e8bff4: Pull complete 2c15723f36b9: Pull complete 207689e26fb2: Pull complete efff5eea5f34: Pull complete 7823bc4f62a4: Pull complete 207e8b983242: Pull complete library/swarm:latest: The image you are pulling has… Digest: sha256:1502dd0c1d778d4f5e75d47820dd858ac1f6… Status: Downloaded newer image for swarm:latest 7546a86262b847f7f34785ab2e0d6118
  • 66. Swarm Manager manager docker engine (docker daemon) 128.199.85.219 root@manager:~# docker run -d -P swarm manage ¥ token://7546a86262b847f7f34785ab2e0d6118 0477faab5932855d672411e69d9d97f48a852339cd4429be9ac25242db81a4e3 root@manager:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0477faab5932 swarm "/swarm manage token:" 4 seconds ago Up 3 seconds 0.0.0.0:32768->2375/tcp trusting_mcclintock
  • 67. root@manager:~# docker info Containers: 1 Images: 8 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 10 Dirperm1 Supported: false Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.13.0-57-generic Operating System: Ubuntu 14.04.3 LTS CPUs: 1 Total Memory: 490 MiB Name: manager ID: Y53K:LHHC:7THY:5FJF:I5HW:AJR3:EHKH:23BG:J5H3:JERR:2OKS:D4F7 WARNING: No swap limit support Labels: provider=digitalocean root@manager:~# docker -H tcp://127.0.0.1:32768 info Containers: 0 Images: 0 Role: primary Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 0 CPUs: 0 Total Memory: 0 B Name: 0477faab5932 export DOCKER_HOST=127.0.0.1:<port> 同じdockerコマンドでも、左は Dockerデーモン、右はSwarmに 対して問い合わせた結果です。 表示内容が異なっています。 また、-H オプションは毎回 指定が大変なので、環境変数で 置き換えられます。
  • 68. Swarm node node1 docker engine (docker daemon) 188.166.252.158 root@node1:~# docker run -d swarm join ¥ --addr=188.166.252.158:2375 ¥ token://7546a86262b847f7f34785ab2e0d6118 root@manager:~# docker run swarm list token://7546a86262b847f7f34785ab2e0d6118 188.166.252.158:2375 root@manager:~# docker -H tcp://127.0.0.1:32768 info Containers: 4 Images: 1 Role: primary Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 1 node1: 188.166.252.158:2375 m Containers: 4 m Reserved CPUs: 0 / 1 m Reserved Memory: 0 B / 514.5 MiB m Labels: executiondriver=native-0.2, kernelversion=3.13.0-57-generic, operatingsystem=Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs CPUs: 1 Total Memory: 514.5 MiB Name: 0477faab5932 join時のポートとアドレスは、 マネージャではなく、この ノード自身の追加が必要です。
  • 69. Swarm node node2 docker engine (docker daemon) 103.253.146.176 root@node2:~# docker run -d swarm join ¥ --addr=103.253.146.176:2375 ¥ token://7546a86262b847f7f34785ab2e0d6118 $ docker run swarm list .. 103.253.146.176:2375 188.166.252.158:2375 Containers: 9 Images: 2 Role: primary Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 2 node1: 188.166.252.158:2375 m Containers: 4 m Reserved CPUs: 0 / 1 m Reserved Memory: 0 B / 514.5 MiB m Labels: executiondriver=native-0.2, kernelversion=3.13.0-57-generic, operatingsystem= Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs node2: 103.253.146.176:2375 m Containers: 5 m Reserved CPUs: 0 / 1 m Reserved Memory: 0 B / 514.5 MiB m Labels: executiondriver=native-0.2, kernelversion=3.13.0-57-generic, operatingsystem= Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs CPUs: 2 Total Memory: 1.005 GiB Name: 0477faab5932 こちらは2台目です。 なお、addrはノード監視のため、
  • 70. 70Docker Swarm Guide 方法2:docker-machineを使う – VirtualBox https://docs.docker.com/machine/get-started-cloud/ zem@dev:~$ docker run swarm create 3efff548bf670a29f3edfaf50cb89b02 $ docker-machine create ¥ --driver digitalocean ¥ --digitalocean-access-token 1b710a107aa0c78eac51f7baacc7d87 ¥ --digitalocean-region sgp1 ¥ --swarm ¥ --swarm-master ¥ --swarm-discovery token://3efff548bf670a29f3edfaf50cb89b02 ¥ swarm-master 最近では、こちらの方法で非常 に簡単に構築できます。例とし てDigialOceanを紹介していま すが、他のクラウド環境でも同 様に利用可能です。
  • 71. 71Docker Swarm Guide Docker Machineで Swarm ノード追加 $ docker-machine create ¥ --driver digitalocean ¥ --digitalocean-access-token 1b710a107aa0c78eac51f7baacc7d87 ¥ --digitalocean-region sgp1 ¥ --swarm ¥ --swarm-discovery token://3efff548bf670a29f3edfaf50cb89b02 ¥ swarm-node-01 先ほどとの違いは、マスタ作成 フラグがないだけです。
  • 72.
  • 73. $ docker-machine env --swarm swarm-master $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM swarm-master digitalocean Running tcp://128.199.179.153:2376 swarm-master (master) swarm-node-01 digitalocean Running tcp://128.199.157.183:2376 swarm-master $ docker info Swarm Manager node swarm-master docker engine (docker daemon) Swarm node node-01 docker engine (docker daemon) VM docker machine hosted discovery (token)
  • 75. zem@dev:~$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM manager digitalocean Running tcp://128.199.85.219:2376 node1 digitalocean Running tcp://188.166.252.158:2376 node2 digitalocean Running tcp://103.253.146.176:2376 swarm-master digitalocean Running tcp://128.199.179.153:2376 swarm-master (master) swarm-node-01 digitalocean Timeout swarm-node-02 digitalocean Running tcp://188.166.252.45:2376 swarm-master zem@dev:~$ docker run -d nginx 34d71ac79d1b6e9b7f2c136c52dcbd4b9f886b61e376bf72f1e893197e85c556 zem@dev:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 34d71ac79d1b nginx "nginx -g 'daemon off" 4 seconds ago Up 3 seconds 80/tcp, 443/tcp swarm-node-01/romantic_pike "SWARM"列でDocker Machineの 管理対象かどうか確認出来ます。 あとは「docker run」で起動す ると、コンテナ名には自動的に 「Swarmノード名称/」も表示さ れて見えます(clientがSwarm に問い合わせたときのみ)。
  • 76. zem@dev:~$ docker-machine ssh swarm-node-01 Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-57-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Fri Sep 25 23:53:04 EDT 2015 System load: 0.76 Processes: 70 Usage of /: 8.0% of 19.56GB Users logged in: 0 Memory usage: 15% IP address for eth0: 128.199.157.183 Swap usage: 0% IP address for docker0: 172.17.42.1 Graph this data and manage this system at: https://landscape.canonical.com/ root@swarm-node-01:~# root@swarm-node-01:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 34d71ac79d1b nginx "nginx -g 'daemon off" 59 seconds ago Up 58 seconds 80/tcp, 443/tcp romantic_pike 2d1a62fbc9e1 swarm:latest "/swarm join --advert" 2 hours ago Up 2 hours 2375/tcp swarm-agent docker-machneと連携していれ ば、各Swarmノードへの状況把 握も「ssh」コマンドを使って 簡単になります。
  • 77. 77Docker Swarm Guide 環境構築まとめ ‣ docker swarm コンテナ • hosted discovery • マネージャの起動 • クライアントをtokenでjoinする ‣ Docker Machine で Swarm クラスタ作成 • 環境構築が簡単 スケジューリングのための言葉 (ディスカバリ・バックエンド、 ストラテジ、フィルタ)があり ますが、その他は基本的に通常 のDockerクライアントと同様の 操作になります。
  • 79. 79 今日のまとめ 今日から始める Docker Swarm ‣ Docker オーケストレーション Docker を支えるオーケストレーションと各ツールの役割 ‣ Swarm を使ったコンテナ/クラスタ管理 Swarm クラスタの構築方法 … Manager とノード 主要なコマンドは docker と同じ ストラテジの理解 … spread と binpack と Random フィルタ … コンテナをどこに配置するか • Constraint, Affinity, Port, Dependency, Health
  • 80. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) コンテナ コンテナ コンテナ コンテナ Docker互換 API リソース・プール ストラテジ フィルタ • spread • binpack • randam • constraint • affinity • port • dependency • health コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド
  • 81. 81 現在の Swarm 課題 今日から始める Docker Swarm ‣ 目下開発中 • Version 0.4 まだベータ版の扱い ‣ Swarmそのものが何かをする訳ではない • あくまでクラスタ管理を手助けするもの、でも今後は…? ‣ 別のアプローチ • Kubernetes, OpenShift, Tectonic, Rancher まだまだ課題はあります。目的 によっては、別のアプローチを お試しいただくのも良いかと思 います。あくまでSwarmとは、 コンテナ管理の選択肢の1つ です。
  • 83. 83 何か気になることはありますか? ■会場からの質問と回答(個人的見解) • Docker Plugins はどうなるのでしょうか? • 流動的ですが、Weaveは1.9にマージかも • Docker Swarm の利点は、dockerコマンドと同様に リソース全体を操作できる点ですか? • その通りだと思います。 • フェイルオーバー等は対応しないのか? • おそらく、そこはSwarmが管理しないレイヤ。 ただし、将来的にMachine,Compose,Swarmが 連携するのであれば、機能的に実現できるかも しれません。今は個別のツール開発の段階です。 • どうやってスライドの画像を作っていますか? • エンジニアのためのプレゼン勉強会、 次回 10/10(土) 14:00 からあります! • http://infrapre.connpass.com/
  • 84. 84 ‣ Docker ドキュメント http://docs.docker.com/ ‣ Docker Machine https://docs.docker.com/machine/ ‣ docker-machine - Docker Machine ドキュメント参考日本語訳 - Qiita http://qiita.com/zembutsu/items/9d189da5d2c7708717a3 ‣ Docker Swarm https://docs.docker.com/swarm/ ‣ DockerSwarm - Docker Swarm ドキュメント参考日本語訳 目次 - Qiita http://qiita.com/zembutsu/items/a1f0a89581d1d5832e2e ‣ Docker Compose https://docs.docker.com/compose/ ‣ docker-compose - Docker Compose ドキュメント参考日本語訳 概要・目次 - Qiita http://qiita.com/zembutsu/items/c277830c469d7a25ba15 参考情報 References