SlideShare a Scribd company logo
1 of 75
Docker Compose
Docker Swarm
Docker Machine
利用編
そろそろ知っておきたい Docker のキホン その2
2015年7月21日版
自己紹介
• 長住 直樹(ながずみ なおき) @nk_ngzm
• 社内で技術獲得 & 技術者育成活動 (通称:CORETECH)
を推進しています
留意事項
本スライドは 2015年7月の情報を元に作成しました
Docker の開発速度は非常に早く、その情報は生モノの
ようにすぐに古くなってしまうことにご注意ください
最新情報は Docker 公式ドキュメントでご確認ください
http://docs.docker.com/userguide/
例えば WordPress システム構築
ホストサーバ
(storage)
Data Volume
コンテナ
(web)
WordPress
コンテナ
(db)
MySQL
コンテナ
データベース
ファイル
/var/lib/mysql
ポート
フォワード
8080:80
コンテナ
リンク
DB接続
利用者
Data
Volume
docker コマンドで構築すると・・・
① Data Volume コンテナ (storage)
$ cd [Dockerfileのディレクトリ]
$ vi Dockerfile # Dockerfile作成
$ docker build -t storage .
$ docker run -it --name storage storage
ROM ubuntu:latest
MAINTAINER ngzm <nk.ngzm@gmail.com>
VOLUME /var/lib/mysql
CMD /bin/bash
docker コマンドで構築すると・・・
② MySQLコンテナ (db)
③ WordPressコンテナ (web)
$ docker run --name db 
--volumes-from storage 
-e MYSQL_ROOT_PASSWORD=password 
-d mysql:5.7
$ docker run --name web 
--link db:mysql 
-p 8080:80 
-d wordpress:latest
コンテナ間のシステム構成を docker コマンド
のオプションで指定するのが微妙だ!
Docker Compose を使おう
Docker Compose
Docker Compse は、複数のコンテナから成るシステム構
成を設定ファイル(YAML)で定義でき、まとめて構築した
り管理したりできるツール
Docker Compose インストール
$ curl -L https://github.com/docker/compose/releases/download/1.3.2/docker-
compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker- compose
$ docker-compose -v
compose version 1.3.2
インストール例 ・・・ バイナリをころがすだけ!!
Linux 版 と MAC OS 版があるよ
Docker Compose を使う
docker-compose.yml でシステム構成を定義
storage:
build: ./storage
db:
image: mysql:5.7
volumes_from:
- storage
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
web:
image: wordpress:latest
links:
- db:mysql
ports:
- "8080:80"
コンテナ間のシステム構成
を YAMLで定義できる!!
定義内容は、docker runの
オプションとほぼ対応して
おりうれしい!!
①
Data
Volume
コンテナ
②
MySQL
コンテナ
③
WordPress
コンテナ
Docker Compose を使う
$ docker-compose build storage
$ docker-compose up -d
Data Volume コンテナイメージ(storage)をビルド
WordPressシステムを構成するコンテナを一気に作成して起動
その他 基本的な利用方法
$ docker-compose stop
システムを構成するコンテナを一気に停止
$ docker-compose start (restart)
システムを構成するコンテナを一気に起動 (再起動)
$ docker-compose logs
システムを構成するコンテナのログを見る
$ docker-compose rm
システムを構成するコンテナを一気に削除
簡単にスケールさせたい!!
システムの可用性を高めたい!!
Docker を複数ホストに分散するよー
複数ホストの Docker を連携させないと ... (・o・)
Docker Swarm を使おう
Docker Swarm
Docker Swarm は、複数ホストの Docker をまとめてクラス
タリングして、あたかもひとつの Docker エンジンのように
扱えるツール!!
Swarm クラスタリングを作ってみる
ホスト1
192.168.1.11
ホスト2
192.168.1.12
ホスト3
192.168.1.13
とりあえず Docker Swarm が動作するホストサーバをたてよう!
Swarm クラスタリングを作ってみる
ホスト1
192.168.1.11
ホスト2
192.168.1.12
ホスト3
192.168.1.13
次は それぞれに Docker エンジンをインストールしませう
※ 各Docker サーバはUNIXドメインソケットだけでなく、INETドメインソケットもリスンするように設定を変更しておくこと
Swarm クラスタリングを作ってみる
ホスト1
192.168.1.11
ホスト2
192.168.1.12
ホスト3
192.168.1.13
役割
• manager
• node
役割
• node
役割
• node
node1 node2 node3
続いて Docker Swarm ノードを構築
そのうちひとつのノードは manager にするよ!
Docker Swarm ノードの作り方
$ docker run --rm swarm create
.....
e1fc62b24f818a2af00fb4ddb8899965
まずは、任意のホストで create おまじない
$ docker run -p 2377:2375 -d swarm manage 
token://e1fc62b24f818a2af00fb4ddb8899965
ホスト1で Swarm manager コンテナを構築
$ docker run -d swarm join --addr=[ノードIPアドレス]:2375 
token://e1fc62b24f818a2af00fb4ddb8899965
各ホストそれぞれで Swarm node コンテナを構築
swarm create すると token と
呼ばれる 文字列が表示され
るので、これを使って 各node
を構成します
Docker Swarm を使ってみる
ホスト1
192.168.1.11
ホスト2
192.168.1.12
ホスト3
192.168.1.13
役割
• manager
• node
役割
• node
役割
• node
node1 node2 node3
manager にアクセスすると、あたかもひとつのDockerエンジン
のように扱うことができるさー
Docker Swarm を使ってみる
$ docker -H tcp://192.168.1.11:2377 info
Containers: 0
Nodes: 3
agent-2: 192.168.1.13:2375
└ Containers: 0
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 514.5 MiB
agent-1: 192.168.1.12:2375
└ Containers: 0
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 514.5 MiB
agent-0: 192.168.1.11:2375
└ Containers: 0
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 514.5 MiB
Dockerコマンドの接続先に
manager の IPアドレスとポートを
指定すると、Docker Swarm クラス
タにアクセスできる!!
Docker Swarm を使ってみる
$ docker -H tcp://192.168.1.11:2377 ps
$ docker -H tcp://192.168.1.11:2377 images
$ docker -H tcp://192.168.1.11:2377 run
いろんな Docker コマンドも普通に使える
環境変数を設定すると、"-H tcp://[IPアドレス]:[ポート]" が不要になる
$ export DOCKER_HOST=tcp://192.168.1.11:2377
$ docker ps -a
$ docker run ...
Docker Swarm 内にコンテナ生成
$ docker run -d -p 80:80 --name front1 nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4b0755a685 nginx:latest "nginx -g 'daemon of 32 seconds ago Up 27 seconds 192.168.1.12:80->80/tcp front1
Docker Swarm クラスタに nginx コンテナをたててみる
$ docker run -d -p 80:80 --name front2 nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4b0755a685 nginx:latest "nginx -g 'daemon of 32 seconds ago Up 27 seconds 192.168.1.12:80->80/tcp front1
fa586fafd753 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 192.168.1.11:80->80/tcp front2
もうひとつ nginx コンテナをたててみる
動いた!
filter
$ docker run -d -p 3306:3306 --name mydb mysql
$ docker run -d -p 80:80 -e affinity:container==mydb --name web1 nginx
$ docker run -d -p 80:80 -e affinity:container!=mydb --name web2 nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87c4376856a mysql:latest "mysql" 1 minutes ago Up 57 seconds 192.168.1.12:3306->3306/tcp mydb
a4b0755a685 nginx:latest "nginx " 32 seconds ago Up 27 seconds 192.168.1.12:80->80/tcp web1
87c4376856a nginx:latest "nginx " 14 seconds ago Up 10 seconds 192.168.1.13:80->80/tcp we2
Container affinity
※ この他にImage affinity とか Label affinity とかもある
filter
$ docker run -d -p 80:80 --name front1 nginx
$ docker run -d -p 80:80 --name front2 nginx
$ docker run -d -p 80:80 --name front3 nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4b0755a685 nginx:latest "nginx -g 'daemon of 32 seconds ago Up 27 seconds 192.168.1.13:80->80/tcp front1
fa586fafd753 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 192.168.1.12:80->80/tcp front2
963841b1388 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 192.168.1.11:80->80/tcp front1
Port filetr
$ docker run -d -p 80:80 --name front4 nginx
2015/7/15 00:33:20 Error response from daemon: no resources available to schedule container
Docker が動くサーバがたくさん増えた!
Docker Swarm も増えそうだ!!
ホストサーバのセットアップとか Docker のイン
ストールとか Swarm 構築とかいちいち手作業
でやるのは大変!!
Docker Machine を使おう
Docker Machine
Docker Machine は、ローカル あるいは クラウド 上に、
Docker エンジンが動くホスト(vm)を構築したり管理したり
できるツール! Docker Swarm クラスタも構築できる。
Vagrant みたい
なイメージ?
ローカルPC
仮想マシン/オーケストレーション製品
クラウド・プロバイダ
Amazon Web Service
Digital Ocean
Google Compute Engine
Microsoft Azure .... etc
OpenStack
Vmware
VirtualBox
Hyper-V ... etcDocker
Machine
VitualBox
(boot2docker)
Docker Machine インストール
$ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-
machine_darwin-amd64 > /usr/local/bin/docker-machine
$ chmod +x /usr/local/bin/docker-machine
$ docker-machine -v
machine version 0.3.0
MAC OS へのインストール例 ・・ バイナリをころがすだけ!!
Linux 版 や Windows 版もあるで~
$ curl -L https://get.docker.com/builds/Darwin/x86_64/docker-latest >
/usr/local/bin/docker
必要に応じて Docker クライアントも拾ってきます
ローカルに Docker ホストをたてる
※ 実際には VirtualBox に boot2docker の vm イメージをダウンロードして起動します。
このため、ローカルPCに Virtualbox 4.3.28 がインストールされていることが前提となります。
$ docker-machine create --driver virtualbox host1
『host1』 という名前で Docker ホスト(Virtualbox 上の vm)を構築
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
host1 virtualbox Running tcp://192.168.99.100:2376
構築した Docker ホストの一覧を見る
OK
Docker ホストを使ってみる
$ eval "$(docker-machine env host1)"
構築した 『host1』 ホストをアクティブにするおまじない!!
$ docker-machine env host1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.100.99:2376"
export
DOCKER_CERT_PATH="/Users/<username>/.docker/machine/machines/host1"
export DOCKER_MACHINE_NAME="host1"
Docker ホストを使ってみる
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
host1 * virtualbox Running tcp://192.168.99.100:2376
もういちど Docker ホスト一覧を見ると・・
アクティブになった!!
$ docker run -d -p 80:80 --name web nginx
$ docker ps
$ docker stop ...
$ docker rm ...
アクティブな Docker ホストにコンテナを生成したりして遊ぶ・・
アクティブな Docker ホストに対
しては、普通に Docker コマンド
が使用できる
その他 基本的な利用方法
$ docker-machine stop [ホスト名]
Docker ホスト(vm)の停止
$ docker-machine start [ホスト名]
Docker ホスト(vm)の起動
$ docker-machine rm [ホスト名]
Docker ホスト(vm)の削除
いい感じにやりたいこと
Docker Machine を使って、Amazon EC2 に
Docker が動くホストを数台構築する
同時に、これらのホストをクラスタリングして
Docker Swarm 環境を構築しチャウ
この Docker Swarm 環境に、Docker
Compose で コンテナを生成して連携させ
チャイナ
ホスト1
Docker
Machine
master
ホスト2
node1
ホスト3
node2
Docker
Swarm
Docker
Compose
Docker Swarm を構築する
Docker Machine
Docker Swarm
+
ホスト1
Docker
Machine
master
ホスト2
node1
ホスト3
node2
Docker
Swarm
Docker Swarm を構築する
$ docker-machine create --driver amazonec2 
--amazonec2-access-key [your access-key] 
--amazonec2-secret-key [your secet-key] 
--amazonec2-ami ami-f4b06cf4 
--amazonec2-region ap-northeast-1 
--amazonec2-vpc-id [your vcp-id] 
swarm-create
Docker Machine で Docker Swarm クラスタリングを create する用の
ホスト 『swarm-create』を構築!!
Docker Swarm を構築する
Tokyo
Region
Docker Swarm create おまじない
$ eval $(docker-machine env swarm-create)
$ docker run swarm create
...
7d1ca38131c37fe03af760221de31a01
token
Docker Swarm を構築する
Docker Swarm を構築する
Docker Machine で Swarm manager となるホスト1 『master』 を構築
$ docker-machine create --driver amazonec2 
--amazonec2-access-key [your access-key] 
--amazonec2-secret-key [your secet-key] 
--amazonec2-ami ami-f4b06cf4 
--amazonec2-region ap-northeast-1 
--amazonec2-vpc-id [your vcp-id] 
--swarm 
--swarm-master 
--swarm-discovery token://7d1ca38131c37fe03af760221de31a01 
master
token
Docker Swarm を構築する
Docker Machine で Swarm node となるホスト2 『node1』 を構築
$ docker-machine create --driver amazonec2 
--amazonec2-access-key [your access-key] 
--amazonec2-secret-key [your secet-key] 
--amazonec2-ami ami-f4b06cf4 
--amazonec2-region ap-northeast-1 
--amazonec2-vpc-id [your vcp-id] 
--swarm 
--swarm-discovery token://7d1ca38131c37fe03af760221de31a01 
node1
token
Docker Swarm を構築する
Docker Machine で Swarm node となるホスト3 『node2』 を構築
$ docker-machine create --driver amazonec2 
--amazonec2-access-key [your access-key] 
--amazonec2-secret-key [your secet-key] 
--amazonec2-ami ami-f4b06cf4 
--amazonec2-region ap-northeast-1 
--amazonec2-vpc-id [your vcp-id] 
--swarm 
--swarm-discovery token://7d1ca38131c37fe03af760221de31a01 
node2
token
Docker Swarm を構築する
Swarm manager のホスト1 『master』 に接続、確認
$ eval $(docker-machine env --swarm master)
$ docker info
Containers: 4
Images: 3
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 3
dm-master: 52.69.171.103:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.018 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.13.0-53-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=amazonec2, storagedriver=aufs
dm-node1: 52.69.146.1:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.018 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.13.0-53-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=amazonec2, storagedriver=aufs
dm-node2: 52.69.190.50:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.018 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.13.0-53-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=amazonec2, storagedriver=aufs
CPUs: 3
Total Memory: 3.053 GiB
$ docker-machine create --driver amazonec2 
--amazonec2-access-key [your access-key] 
--amazonec2-secret-key [your secet-key] 
--amazonec2-ami [ami-id of the instance to use] 
--amazonec2-region [region to use] 
--amazonec2-vpc-id [your vcp-id] 
[host name]
Docker Machine で AWS にホストを構築するコマンド例
※ Asia Pacific (Tokyo) Region の場合、一部のパラメータは以下のとおり
--amazonec2-ami ami-f4b06cf4
--amazonec2-region ap-northeast-1
※ 他のパラメータは、AWSのコンソールで調べると分かるはず....
Tokyo
Region
$ docker-machine create --driver [Driver] 
--swarm 
--swarm-master 
--swarm-discovery token://7d1ca38131c37fe03af760221de31a01 
[host name]
Docker Machine で Swarm manager を構築するコマンド例
$ docker-machine create --driver [Driver] 
--swarm 
--swarm-discovery token://7d1ca38131c37fe03af760221de31a01 
[host name]
Docker Machine で Swarm node を構築するコマンド例
Docker Compose で利用してみる
Docker Compose
Docker Swarm
+
ホスト1
master
ホスト2
node1
ホスト3
node2
Docker
Swarm
Docker Compose で利用してみる
Docker
Compose
Docker Compose で利用してみる
簡単ですが nginx コンテナを作成して起動!
nginx:
image: nginx:latest
ports:
- "80:80"
docker-compose.yml
nginx コンテナを生成して起動!
$ docker-compose up -d
Creating nginx_nginx_1...
Docker Compose で利用してみる
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a6ab7f5b98a nginx:latest "nginx -g 'daeon 7seconds ago Up 7 seconds 52.69.146.1:80->80/tcp node1/nginx_nginx_1
OK
スケール・アウトしてみる
$ docker-compose scale nginx=2
Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating nginx_nginx_2...
Starting nginx_nginx_2...
Docker Compose で利用してみる
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
312649a3b648 nginx:latest "nginx -g 'da 5 seconds ago Up 4 seconds 52.69.190.50:80->80/tcp node2/nginx_nginx_2
2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1
ooh!
さらに スケール・アウトしてみる
$ docker-compose scale nginx=3
Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating nginx_nginx_3...
Starting nginx_nginx_3...
Docker Compose で利用してみる
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82caa4b2b626 nginx:latest "nginx -g 'da 4 seconds ago Up 2 seconds 52.69.171.103:80->80/tcp master/nginx_nginx_3
312649a3b648 nginx:latest "nginx -g 'da 5 seconds ago Up 4 seconds 52.69.190.50:80->80/tcp node2/nginx_nginx_2
2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1
いいね
ノード数を超えて スケール・アウトしてみる!!
$ docker-compose scale nginx=4
Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating nginx_nginx_4...
unable to find a node with port 80 available
Docker Compose で利用してみる
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82caa4b2b626 nginx:latest "nginx -g 'da 4 seconds ago Up 2 seconds 52.69.171.103:80->80/tcp master/nginx_nginx_3
312649a3b648 nginx:latest "nginx -g 'da 5 seconds ago Up 4 seconds 52.69.190.50:80->80/tcp node2/nginx_nginx_2
2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1
エラーw
スケール・インする
$ docker-compose scale nginx=1
Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Stopping nginx_nginx_3...
Stopping nginx_nginx_2...
Removing nginx_nginx_3...
Removing nginx_nginx_2...
Docker Compose で利用してみる
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1
good!
ついでに Volume と Link を試す
冒頭でご紹介した wordpress システムの docker-compose.yml
storage:
build: ./storage
db:
image: mysql:5.7
volumes_from:
- storage
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
web:
image: wordpress:latest
links:
- db:mysql
ports:
- "80:80"
Data Volume コンテナイメージ(storage)をビルド
$ docker-compose build storage
ついでに Volume と Link を試す
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b214205ddb0 wordpress:latest "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.146.1:80->80/tcp node1/wp1_web_1
bdffe99d4b6e mysql:5.7 "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.146.1:3306->3306/tcp node1/wp1_db_1
WordPressシステムを構成するコンテナを一気に作成して起動
$ docker-compose up -d
!!同ノード?
Docker Swarm の注意点
Volume を用いてコンテナが使用するディス
クをマウントしたり、
Link を用いて、コンテナ間の連携をさせよう
とすると、
これらのコンテナは同一ノードに生成されて
しまう!!
今だけ?
db と web を別ノードに振り分ける
storage:
build: ./storage
db:
image: mysql:5.7
volumes_from:
- storage
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
web:
image: wordpress:latest
ports:
- "80:80"
environment:
- "affinity:container!=wp1_db*"
environment:
WORDPRESS_DB_HOST: 192.168.99.102:3306
WORDPRESS_DB_PASSWORD: password
Link をやめる
links:
- db:mysql
追加
db と web を別ノードに振り分ける
docker ps で確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
016e3a049ab3 mysql:5.7 "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.146.1:3306->3306/tcp node1/wp1_db_1
8e739ff21dbd wordpress:latest "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.190.50:80->80/tcp node2/wp1_web_1
WordPressシステムを構成するコンテナを一気に作成して起動
$ docker-compose up -d
別ノードw
OK!
Docker Compose を使うと、幾つかのコ
ンテナで構成されるシステムをまとめて
構築したり管理したりできる
必要に応じたスケール管理もできる
Docker Swarm を使えば、複数の Docker
をクラスタリングして扱うことができる
Docker Machine を使うと、Docker ホスト
(vm)を1コマンドで構築できる
Docker Swarm ノードを作るのも簡単!
Docker Compose は まあ使えそう、特に
Scale できるのはうれしい!!
Docker Swarm と Docker Machine もいい
感じに便利 ・・ だが、ベータ版ということ
もあり 多少!?なところも・・
Docker Swarm
• ノードをまたぐ Volume や Link ができない
Docker Machine
• Windows版でローカルなVirtualBoxにvmを構築しよう
とするとネットワーク(NIC)周りでエラー!利用断念
• AWSに Docker Machine で Swarm ノードを構築した場
合、各ノードを再起動すると、Swarm のノード構成が
失われた ・・・ ipアドレスが変わったせいかしら??
!?だったところ
一部ベータ版なので微妙
なところもあるが、無事に
動くと楽しい!!
皆さんも ぜひ自分で
インストールして試し
てみてください!
これを機会に、複数
の Docker使い が誕
生することを期待して
います
おしまい
ご静聴ありがとう
ございました

More Related Content

What's hot

【社内勉強会】Docker入門
【社内勉強会】Docker入門【社内勉強会】Docker入門
【社内勉強会】Docker入門
Kazuki Murahama
 

What's hot (20)

Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
【社内勉強会】Docker入門
【社内勉強会】Docker入門【社内勉強会】Docker入門
【社内勉強会】Docker入門
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~
 
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
 
Introduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesIntroduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing Dockerfiles
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulicDocker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on Production
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
小さく始める Docker container の deploy
小さく始める Docker container の deploy小さく始める Docker container の deploy
小さく始める Docker container の deploy
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介
 

Viewers also liked

Load Balancing Apps in Docker Swarm with NGINX
Load Balancing Apps in Docker Swarm with NGINXLoad Balancing Apps in Docker Swarm with NGINX
Load Balancing Apps in Docker Swarm with NGINX
NGINX, Inc.
 
Gazelle - Plack Handler for performance freaks #yokohamapm
Gazelle - Plack Handler for performance freaks #yokohamapmGazelle - Plack Handler for performance freaks #yokohamapm
Gazelle - Plack Handler for performance freaks #yokohamapm
Masahiro Nagano
 
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Carlos Sanchez
 

Viewers also liked (20)

Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryDocker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
 
Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introduction
 
Clustering with Docker Swarm - Dockerops 2016 @ Cento (FE) Italy
Clustering with Docker Swarm - Dockerops 2016 @ Cento (FE) ItalyClustering with Docker Swarm - Dockerops 2016 @ Cento (FE) Italy
Clustering with Docker Swarm - Dockerops 2016 @ Cento (FE) Italy
 
Docker Swarm 0.2.0
Docker Swarm 0.2.0Docker Swarm 0.2.0
Docker Swarm 0.2.0
 
Docker Swarm Introduction
Docker Swarm IntroductionDocker Swarm Introduction
Docker Swarm Introduction
 
Docker Online Meetup #28: Production-Ready Docker Swarm
Docker Online Meetup #28: Production-Ready Docker SwarmDocker Online Meetup #28: Production-Ready Docker Swarm
Docker Online Meetup #28: Production-Ready Docker Swarm
 
Load Balancing Apps in Docker Swarm with NGINX
Load Balancing Apps in Docker Swarm with NGINXLoad Balancing Apps in Docker Swarm with NGINX
Load Balancing Apps in Docker Swarm with NGINX
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Gazelle - Plack Handler for performance freaks #yokohamapm
Gazelle - Plack Handler for performance freaks #yokohamapmGazelle - Plack Handler for performance freaks #yokohamapm
Gazelle - Plack Handler for performance freaks #yokohamapm
 
Swarm docker bangalore_meetup
Swarm docker bangalore_meetupSwarm docker bangalore_meetup
Swarm docker bangalore_meetup
 
Be a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the tradeBe a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the trade
 
Containers orchestrators: Docker vs. Kubernetes
Containers orchestrators: Docker vs. KubernetesContainers orchestrators: Docker vs. Kubernetes
Containers orchestrators: Docker vs. Kubernetes
 
NodeJS: the good parts? A skeptic’s view (oredev, oredev2013)
NodeJS: the good parts? A skeptic’s view (oredev, oredev2013)NodeJS: the good parts? A skeptic’s view (oredev, oredev2013)
NodeJS: the good parts? A skeptic’s view (oredev, oredev2013)
 
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
ContainerDays NYC 2015: "Container Orchestration Compared: Kubernetes and Doc...
 
Docker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersDocker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developers
 
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
Using Containers for Building and Testing: Docker, Kubernetes and Mesos. FOSD...
 
Docker, Docker Swarm mangement tool - Gorae
Docker, Docker Swarm mangement tool - GoraeDocker, Docker Swarm mangement tool - Gorae
Docker, Docker Swarm mangement tool - Gorae
 
Docker swarm
Docker swarmDocker swarm
Docker swarm
 

Similar to Dockerのキホンその2 Docker Compose Swarm Machine 利用編

Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
Kazuyuki Mori
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
 

Similar to Dockerのキホンその2 Docker Compose Swarm Machine 利用編 (20)

Docker handson
Docker handsonDocker handson
Docker handson
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Dockerでlamp環境を作って見る
Dockerでlamp環境を作って見るDockerでlamp環境を作って見る
Dockerでlamp環境を作って見る
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Docker で xxxxxxサーバ を つくれませんでした
Docker で xxxxxxサーバ を つくれませんでしたDocker で xxxxxxサーバ を つくれませんでした
Docker で xxxxxxサーバ を つくれませんでした
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
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イメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作る
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Webアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオンWebアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオン
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Dockerの導入
Dockerの導入Dockerの導入
Dockerの導入
 

Dockerのキホンその2 Docker Compose Swarm Machine 利用編

  • 1. Docker Compose Docker Swarm Docker Machine 利用編 そろそろ知っておきたい Docker のキホン その2 2015年7月21日版
  • 2. 自己紹介 • 長住 直樹(ながずみ なおき) @nk_ngzm • 社内で技術獲得 & 技術者育成活動 (通称:CORETECH) を推進しています
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 9.
  • 10. 例えば WordPress システム構築 ホストサーバ (storage) Data Volume コンテナ (web) WordPress コンテナ (db) MySQL コンテナ データベース ファイル /var/lib/mysql ポート フォワード 8080:80 コンテナ リンク DB接続 利用者 Data Volume
  • 11. docker コマンドで構築すると・・・ ① Data Volume コンテナ (storage) $ cd [Dockerfileのディレクトリ] $ vi Dockerfile # Dockerfile作成 $ docker build -t storage . $ docker run -it --name storage storage ROM ubuntu:latest MAINTAINER ngzm <nk.ngzm@gmail.com> VOLUME /var/lib/mysql CMD /bin/bash
  • 12. docker コマンドで構築すると・・・ ② MySQLコンテナ (db) ③ WordPressコンテナ (web) $ docker run --name db --volumes-from storage -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7 $ docker run --name web --link db:mysql -p 8080:80 -d wordpress:latest
  • 14. Docker Compose Docker Compse は、複数のコンテナから成るシステム構 成を設定ファイル(YAML)で定義でき、まとめて構築した り管理したりできるツール
  • 15. Docker Compose インストール $ curl -L https://github.com/docker/compose/releases/download/1.3.2/docker- compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker- compose $ docker-compose -v compose version 1.3.2 インストール例 ・・・ バイナリをころがすだけ!! Linux 版 と MAC OS 版があるよ
  • 16. Docker Compose を使う docker-compose.yml でシステム構成を定義 storage: build: ./storage db: image: mysql:5.7 volumes_from: - storage ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password web: image: wordpress:latest links: - db:mysql ports: - "8080:80" コンテナ間のシステム構成 を YAMLで定義できる!! 定義内容は、docker runの オプションとほぼ対応して おりうれしい!! ① Data Volume コンテナ ② MySQL コンテナ ③ WordPress コンテナ
  • 17. Docker Compose を使う $ docker-compose build storage $ docker-compose up -d Data Volume コンテナイメージ(storage)をビルド WordPressシステムを構成するコンテナを一気に作成して起動
  • 18. その他 基本的な利用方法 $ docker-compose stop システムを構成するコンテナを一気に停止 $ docker-compose start (restart) システムを構成するコンテナを一気に起動 (再起動) $ docker-compose logs システムを構成するコンテナのログを見る $ docker-compose rm システムを構成するコンテナを一気に削除
  • 19.
  • 21. Docker Swarm Docker Swarm は、複数ホストの Docker をまとめてクラス タリングして、あたかもひとつの Docker エンジンのように 扱えるツール!!
  • 23. Swarm クラスタリングを作ってみる ホスト1 192.168.1.11 ホスト2 192.168.1.12 ホスト3 192.168.1.13 次は それぞれに Docker エンジンをインストールしませう ※ 各Docker サーバはUNIXドメインソケットだけでなく、INETドメインソケットもリスンするように設定を変更しておくこと
  • 24. Swarm クラスタリングを作ってみる ホスト1 192.168.1.11 ホスト2 192.168.1.12 ホスト3 192.168.1.13 役割 • manager • node 役割 • node 役割 • node node1 node2 node3 続いて Docker Swarm ノードを構築 そのうちひとつのノードは manager にするよ!
  • 25. Docker Swarm ノードの作り方 $ docker run --rm swarm create ..... e1fc62b24f818a2af00fb4ddb8899965 まずは、任意のホストで create おまじない $ docker run -p 2377:2375 -d swarm manage token://e1fc62b24f818a2af00fb4ddb8899965 ホスト1で Swarm manager コンテナを構築 $ docker run -d swarm join --addr=[ノードIPアドレス]:2375 token://e1fc62b24f818a2af00fb4ddb8899965 各ホストそれぞれで Swarm node コンテナを構築 swarm create すると token と 呼ばれる 文字列が表示され るので、これを使って 各node を構成します
  • 26. Docker Swarm を使ってみる ホスト1 192.168.1.11 ホスト2 192.168.1.12 ホスト3 192.168.1.13 役割 • manager • node 役割 • node 役割 • node node1 node2 node3 manager にアクセスすると、あたかもひとつのDockerエンジン のように扱うことができるさー
  • 27. Docker Swarm を使ってみる $ docker -H tcp://192.168.1.11:2377 info Containers: 0 Nodes: 3 agent-2: 192.168.1.13:2375 └ Containers: 0 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 514.5 MiB agent-1: 192.168.1.12:2375 └ Containers: 0 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 514.5 MiB agent-0: 192.168.1.11:2375 └ Containers: 0 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 514.5 MiB Dockerコマンドの接続先に manager の IPアドレスとポートを 指定すると、Docker Swarm クラス タにアクセスできる!!
  • 28. Docker Swarm を使ってみる $ docker -H tcp://192.168.1.11:2377 ps $ docker -H tcp://192.168.1.11:2377 images $ docker -H tcp://192.168.1.11:2377 run いろんな Docker コマンドも普通に使える 環境変数を設定すると、"-H tcp://[IPアドレス]:[ポート]" が不要になる $ export DOCKER_HOST=tcp://192.168.1.11:2377 $ docker ps -a $ docker run ...
  • 29. Docker Swarm 内にコンテナ生成 $ docker run -d -p 80:80 --name front1 nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4b0755a685 nginx:latest "nginx -g 'daemon of 32 seconds ago Up 27 seconds 192.168.1.12:80->80/tcp front1 Docker Swarm クラスタに nginx コンテナをたててみる $ docker run -d -p 80:80 --name front2 nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4b0755a685 nginx:latest "nginx -g 'daemon of 32 seconds ago Up 27 seconds 192.168.1.12:80->80/tcp front1 fa586fafd753 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 192.168.1.11:80->80/tcp front2 もうひとつ nginx コンテナをたててみる 動いた!
  • 30. filter $ docker run -d -p 3306:3306 --name mydb mysql $ docker run -d -p 80:80 -e affinity:container==mydb --name web1 nginx $ docker run -d -p 80:80 -e affinity:container!=mydb --name web2 nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 87c4376856a mysql:latest "mysql" 1 minutes ago Up 57 seconds 192.168.1.12:3306->3306/tcp mydb a4b0755a685 nginx:latest "nginx " 32 seconds ago Up 27 seconds 192.168.1.12:80->80/tcp web1 87c4376856a nginx:latest "nginx " 14 seconds ago Up 10 seconds 192.168.1.13:80->80/tcp we2 Container affinity ※ この他にImage affinity とか Label affinity とかもある
  • 31. filter $ docker run -d -p 80:80 --name front1 nginx $ docker run -d -p 80:80 --name front2 nginx $ docker run -d -p 80:80 --name front3 nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4b0755a685 nginx:latest "nginx -g 'daemon of 32 seconds ago Up 27 seconds 192.168.1.13:80->80/tcp front1 fa586fafd753 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 192.168.1.12:80->80/tcp front2 963841b1388 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 192.168.1.11:80->80/tcp front1 Port filetr $ docker run -d -p 80:80 --name front4 nginx 2015/7/15 00:33:20 Error response from daemon: no resources available to schedule container
  • 32.
  • 33. Docker が動くサーバがたくさん増えた! Docker Swarm も増えそうだ!! ホストサーバのセットアップとか Docker のイン ストールとか Swarm 構築とかいちいち手作業 でやるのは大変!! Docker Machine を使おう
  • 34. Docker Machine Docker Machine は、ローカル あるいは クラウド 上に、 Docker エンジンが動くホスト(vm)を構築したり管理したり できるツール! Docker Swarm クラスタも構築できる。 Vagrant みたい なイメージ?
  • 35. ローカルPC 仮想マシン/オーケストレーション製品 クラウド・プロバイダ Amazon Web Service Digital Ocean Google Compute Engine Microsoft Azure .... etc OpenStack Vmware VirtualBox Hyper-V ... etcDocker Machine VitualBox (boot2docker)
  • 36. Docker Machine インストール $ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker- machine_darwin-amd64 > /usr/local/bin/docker-machine $ chmod +x /usr/local/bin/docker-machine $ docker-machine -v machine version 0.3.0 MAC OS へのインストール例 ・・ バイナリをころがすだけ!! Linux 版 や Windows 版もあるで~ $ curl -L https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker 必要に応じて Docker クライアントも拾ってきます
  • 37. ローカルに Docker ホストをたてる ※ 実際には VirtualBox に boot2docker の vm イメージをダウンロードして起動します。 このため、ローカルPCに Virtualbox 4.3.28 がインストールされていることが前提となります。 $ docker-machine create --driver virtualbox host1 『host1』 という名前で Docker ホスト(Virtualbox 上の vm)を構築 $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM host1 virtualbox Running tcp://192.168.99.100:2376 構築した Docker ホストの一覧を見る OK
  • 38. Docker ホストを使ってみる $ eval "$(docker-machine env host1)" 構築した 『host1』 ホストをアクティブにするおまじない!! $ docker-machine env host1 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.100.99:2376" export DOCKER_CERT_PATH="/Users/<username>/.docker/machine/machines/host1" export DOCKER_MACHINE_NAME="host1"
  • 39. Docker ホストを使ってみる $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM host1 * virtualbox Running tcp://192.168.99.100:2376 もういちど Docker ホスト一覧を見ると・・ アクティブになった!! $ docker run -d -p 80:80 --name web nginx $ docker ps $ docker stop ... $ docker rm ... アクティブな Docker ホストにコンテナを生成したりして遊ぶ・・ アクティブな Docker ホストに対 しては、普通に Docker コマンド が使用できる
  • 40. その他 基本的な利用方法 $ docker-machine stop [ホスト名] Docker ホスト(vm)の停止 $ docker-machine start [ホスト名] Docker ホスト(vm)の起動 $ docker-machine rm [ホスト名] Docker ホスト(vm)の削除
  • 41.
  • 42. いい感じにやりたいこと Docker Machine を使って、Amazon EC2 に Docker が動くホストを数台構築する 同時に、これらのホストをクラスタリングして Docker Swarm 環境を構築しチャウ この Docker Swarm 環境に、Docker Compose で コンテナを生成して連携させ チャイナ
  • 44. Docker Swarm を構築する Docker Machine Docker Swarm +
  • 46. $ docker-machine create --driver amazonec2 --amazonec2-access-key [your access-key] --amazonec2-secret-key [your secet-key] --amazonec2-ami ami-f4b06cf4 --amazonec2-region ap-northeast-1 --amazonec2-vpc-id [your vcp-id] swarm-create Docker Machine で Docker Swarm クラスタリングを create する用の ホスト 『swarm-create』を構築!! Docker Swarm を構築する Tokyo Region
  • 47. Docker Swarm create おまじない $ eval $(docker-machine env swarm-create) $ docker run swarm create ... 7d1ca38131c37fe03af760221de31a01 token Docker Swarm を構築する
  • 48. Docker Swarm を構築する Docker Machine で Swarm manager となるホスト1 『master』 を構築 $ docker-machine create --driver amazonec2 --amazonec2-access-key [your access-key] --amazonec2-secret-key [your secet-key] --amazonec2-ami ami-f4b06cf4 --amazonec2-region ap-northeast-1 --amazonec2-vpc-id [your vcp-id] --swarm --swarm-master --swarm-discovery token://7d1ca38131c37fe03af760221de31a01 master token
  • 49. Docker Swarm を構築する Docker Machine で Swarm node となるホスト2 『node1』 を構築 $ docker-machine create --driver amazonec2 --amazonec2-access-key [your access-key] --amazonec2-secret-key [your secet-key] --amazonec2-ami ami-f4b06cf4 --amazonec2-region ap-northeast-1 --amazonec2-vpc-id [your vcp-id] --swarm --swarm-discovery token://7d1ca38131c37fe03af760221de31a01 node1 token
  • 50. Docker Swarm を構築する Docker Machine で Swarm node となるホスト3 『node2』 を構築 $ docker-machine create --driver amazonec2 --amazonec2-access-key [your access-key] --amazonec2-secret-key [your secet-key] --amazonec2-ami ami-f4b06cf4 --amazonec2-region ap-northeast-1 --amazonec2-vpc-id [your vcp-id] --swarm --swarm-discovery token://7d1ca38131c37fe03af760221de31a01 node2 token
  • 51. Docker Swarm を構築する Swarm manager のホスト1 『master』 に接続、確認 $ eval $(docker-machine env --swarm master) $ docker info Containers: 4 Images: 3 Role: primary Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 3 dm-master: 52.69.171.103:2376 └ Containers: 2 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.018 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-53-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=amazonec2, storagedriver=aufs dm-node1: 52.69.146.1:2376 └ Containers: 1 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.018 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-53-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=amazonec2, storagedriver=aufs dm-node2: 52.69.190.50:2376 └ Containers: 1 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.018 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-53-generic, operatingsystem=Ubuntu 14.04.2 LTS, provider=amazonec2, storagedriver=aufs CPUs: 3 Total Memory: 3.053 GiB
  • 52. $ docker-machine create --driver amazonec2 --amazonec2-access-key [your access-key] --amazonec2-secret-key [your secet-key] --amazonec2-ami [ami-id of the instance to use] --amazonec2-region [region to use] --amazonec2-vpc-id [your vcp-id] [host name] Docker Machine で AWS にホストを構築するコマンド例 ※ Asia Pacific (Tokyo) Region の場合、一部のパラメータは以下のとおり --amazonec2-ami ami-f4b06cf4 --amazonec2-region ap-northeast-1 ※ 他のパラメータは、AWSのコンソールで調べると分かるはず.... Tokyo Region
  • 53. $ docker-machine create --driver [Driver] --swarm --swarm-master --swarm-discovery token://7d1ca38131c37fe03af760221de31a01 [host name] Docker Machine で Swarm manager を構築するコマンド例 $ docker-machine create --driver [Driver] --swarm --swarm-discovery token://7d1ca38131c37fe03af760221de31a01 [host name] Docker Machine で Swarm node を構築するコマンド例
  • 56. Docker Compose で利用してみる 簡単ですが nginx コンテナを作成して起動! nginx: image: nginx:latest ports: - "80:80" docker-compose.yml
  • 57. nginx コンテナを生成して起動! $ docker-compose up -d Creating nginx_nginx_1... Docker Compose で利用してみる docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a6ab7f5b98a nginx:latest "nginx -g 'daeon 7seconds ago Up 7 seconds 52.69.146.1:80->80/tcp node1/nginx_nginx_1 OK
  • 58. スケール・アウトしてみる $ docker-compose scale nginx=2 Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash. Creating nginx_nginx_2... Starting nginx_nginx_2... Docker Compose で利用してみる docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 312649a3b648 nginx:latest "nginx -g 'da 5 seconds ago Up 4 seconds 52.69.190.50:80->80/tcp node2/nginx_nginx_2 2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1 ooh!
  • 59. さらに スケール・アウトしてみる $ docker-compose scale nginx=3 Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash. Creating nginx_nginx_3... Starting nginx_nginx_3... Docker Compose で利用してみる docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 82caa4b2b626 nginx:latest "nginx -g 'da 4 seconds ago Up 2 seconds 52.69.171.103:80->80/tcp master/nginx_nginx_3 312649a3b648 nginx:latest "nginx -g 'da 5 seconds ago Up 4 seconds 52.69.190.50:80->80/tcp node2/nginx_nginx_2 2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1 いいね
  • 60. ノード数を超えて スケール・アウトしてみる!! $ docker-compose scale nginx=4 Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash. Creating nginx_nginx_4... unable to find a node with port 80 available Docker Compose で利用してみる docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 82caa4b2b626 nginx:latest "nginx -g 'da 4 seconds ago Up 2 seconds 52.69.171.103:80->80/tcp master/nginx_nginx_3 312649a3b648 nginx:latest "nginx -g 'da 5 seconds ago Up 4 seconds 52.69.190.50:80->80/tcp node2/nginx_nginx_2 2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1 エラーw
  • 61. スケール・インする $ docker-compose scale nginx=1 Service nginx specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash. Stopping nginx_nginx_3... Stopping nginx_nginx_2... Removing nginx_nginx_3... Removing nginx_nginx_2... Docker Compose で利用してみる docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a6ab7f5b98a nginx:latest "nginx -g 'da a minute ago Up About a minute 52.69.146.1:80->80/tcp node1/nginx_nginx_1 good!
  • 62. ついでに Volume と Link を試す 冒頭でご紹介した wordpress システムの docker-compose.yml storage: build: ./storage db: image: mysql:5.7 volumes_from: - storage ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password web: image: wordpress:latest links: - db:mysql ports: - "80:80"
  • 63. Data Volume コンテナイメージ(storage)をビルド $ docker-compose build storage ついでに Volume と Link を試す docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9b214205ddb0 wordpress:latest "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.146.1:80->80/tcp node1/wp1_web_1 bdffe99d4b6e mysql:5.7 "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.146.1:3306->3306/tcp node1/wp1_db_1 WordPressシステムを構成するコンテナを一気に作成して起動 $ docker-compose up -d !!同ノード?
  • 64. Docker Swarm の注意点 Volume を用いてコンテナが使用するディス クをマウントしたり、 Link を用いて、コンテナ間の連携をさせよう とすると、 これらのコンテナは同一ノードに生成されて しまう!! 今だけ?
  • 65. db と web を別ノードに振り分ける storage: build: ./storage db: image: mysql:5.7 volumes_from: - storage ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password web: image: wordpress:latest ports: - "80:80" environment: - "affinity:container!=wp1_db*" environment: WORDPRESS_DB_HOST: 192.168.99.102:3306 WORDPRESS_DB_PASSWORD: password Link をやめる links: - db:mysql 追加
  • 66. db と web を別ノードに振り分ける docker ps で確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 016e3a049ab3 mysql:5.7 "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.146.1:3306->3306/tcp node1/wp1_db_1 8e739ff21dbd wordpress:latest "/entrypoint.sh 6 seconds ago Up 5 seconds 52.69.190.50:80->80/tcp node2/wp1_web_1 WordPressシステムを構成するコンテナを一気に作成して起動 $ docker-compose up -d 別ノードw OK!
  • 67.
  • 69. Docker Swarm を使えば、複数の Docker をクラスタリングして扱うことができる Docker Machine を使うと、Docker ホスト (vm)を1コマンドで構築できる Docker Swarm ノードを作るのも簡単!
  • 70. Docker Compose は まあ使えそう、特に Scale できるのはうれしい!! Docker Swarm と Docker Machine もいい 感じに便利 ・・ だが、ベータ版ということ もあり 多少!?なところも・・
  • 71. Docker Swarm • ノードをまたぐ Volume や Link ができない Docker Machine • Windows版でローカルなVirtualBoxにvmを構築しよう とするとネットワーク(NIC)周りでエラー!利用断念 • AWSに Docker Machine で Swarm ノードを構築した場 合、各ノードを再起動すると、Swarm のノード構成が 失われた ・・・ ipアドレスが変わったせいかしら?? !?だったところ