SlideShare a Scribd company logo
1 of 74
Docker技術情報アップデート
v1.9-ネットワークとオーケストレーション
2015年12月10日(木)
DockerCon EU 2015 Catch Up
@zembutsu
Technology Evangelist; Creationline, Inc.
Networking and Orchestration
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
2
スライドで得られる知識
Docker技術情報アップデート 2015年12月号
‣ Docker コンテナの復習と 1.9
‣ Docker 1.9 の新ネットワーク機能
• 「docker network」コマンドで、複数のネットワーク管理機能
• リンク機能(--link)とネットワーキング機能
• マルチホスト・ネットワーキング(オーバレイ・ネットワーク)
‣ オーケストレーションが見えてきた
• Machine・Swarm・Composeがより一体化
• DTR, ORCA, UCP(Universal Control Plane)
前回の発表から半年過ぎました。
振り返ると、ネットワーク機能と
オーケストレーションの連携強化。
これが大きなポイントだと思い、
スライドにまとめたのがこちら。
1 32 4 5 6 7 8 9 10 11 12
2015 Timeline
DockerCon 2015
Docker 1.7 Release
Open Container Initiative
Docker 1.9
Release
LXC 1.0
Release
Docker 1.8,
Toolbox
Release
DockerCon
EU
HashiConf
2010
ギリシャ
金融危機
北陸新幹線開業
COP21
シャーロット
ちゃん
中国株式市場混乱 パリ同時多発テロ
官邸ドローン墜落事件
安全保障関連法成立
ISIS情勢
泥沼化
Docker Machine,
Swarm, Compose
Announcement
今年1年を振り返るとDockerを
取り巻く環境は、大きく変化。
関東東北豪雨
Dockerコンテナの復習と1.9
1■□□
サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
Docker
コンテナ
そもそもDockerコンテナとは?
13年3月のPyConでdotCloud社
(当時)のCEO、Hyke氏が発表。
dockerコマンドで簡単にアプリを
コンテナとして動かせるように。
サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
コンテナ
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
docker run …
Dockerコンテナとはプロセスの
1つ1つを隔離して起動すること。
正確には「隔離」または「分離」
する(英語のisolate)のは、単に
プロセスだけではありません。
ファイルシステムを(chroot風に)
マウントし、ネットワークを持ち、
メモリやCPUリソースの上限を
設定できます。Linuxカーネルの
機能を使います。
あくまでもDockerのホスト側から
は単純にプロセスが起動してい
るだけですし、ファイルシステム
が見えるにすぎません。
もう1つ重要な概念が、Docker
イメージです。Dockerコンテナ
の実行とは、Dockerイメージ上
のプロセスを実行することでもあ
るのです。もしイメージが手許
になければ…?
サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
レジストリ(DockerHub等)から
イメージをダウンロードします。
そして、その中に含まれるプロ
セスを、Dockerコンテナとして
実行するものでした。
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
そして、そのプロセスの実行を
コンテナを実行していると表現し、
プロセスが停止するとコンテナ
も停止しているものと扱います。
zem@dev:~$ docker run -ti ubuntu /bin/bash
root@bdf6207621c7:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 01:11 ? 00:00:00 /bin/bash
root 16 1 0 01:11 ? 00:00:00 ps -ef
root@bdf6207621c7:/#
コ ン テ ナ 内 の プ ロ セ ス
Dockerコンテナ内のプロセスは
PIDが「1」です。各々のコンテ
ナは、全てPID「1」として動作
します。
Dockerコンテナ内のプロセスは
PIDが「1」です。しかし、ホス
ト側からは、通常のPIDを持って
います。これはマジックミラーの
ようなものです。ホスト側から
は見えますが、コンテナABは
互いのことが見えません。
/sbin/init
PID 1
alice
PID 2
bob
PID 3
docker
PID 4
httpd
PID 1
コンテナA コンテナB
ruby
PID 1
chris.rb
PID 2
httpd
PID 5
chris.rb
PID 7
ruby
PID 6
root@bdf6207621c7:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@bdf6207621c7:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 20511356 12952564 6493836 67% /
none 20511356 12952564 6493836 67% /
tmpfs 250896 0 250896 0% /dev
shm 65536 0 65536 0% /dev/shm
tmpfs 250896 0 250896 0% /sys/fs/cgroup
/dev/disk/by-label/DOROOT 20511356 12952564 6493836 67% /etc/hosts
tmpfs 250896 0 250896 0% /proc/kcore
tmpfs 250896 0 250896 0% /proc/latency_stats
tmpfs 250896 0 250896 0% /proc/timer_stats
コ ン テ ナ 内 の フ ァ イ ル シ ス テ ム また、ファイルシステム(単に
ディレクトリのこと)もコンテナ
ごとに独立していますが、あくま
でもホスト側と共有しているため、
dfで見た時のディスク容量は、
ホスト側のものがそのまま表示
されます。
この図のように、ホスト側にある
ディレクトリが、コンテナ中では、
自分自身の(chrootした)ディレ
クトリしか見えません。
プロセスと同様、コンテナAB
は相互を参照できません(設定
追加で可能になります)
Kernelは共通ですから、ホスト
側とは違うLinuxが動くようにも
見えるでしょう。
/
/etc /bin /data
コンテナAのファイルシステム
… …
コンテナBのファイルシステム
/etc
(/data/ubuntu/etc)
/data/ubuntu /data/centos
/bin
(/data/ubuntu/bin)
/etc
(/data/ubuntu/etc)
/bin
(/data/ubuntu/bin)
/ /
root@bdf6207621c7:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
361: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
group default
link/ether 02:42:ac:11:00:25 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.37/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:25/64 scope link
valid_lft forever preferred_lft forever
root@bdf6207621c7:/# ip route
default via 172.17.42.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.37
コ ン テ ナ 内 の ネ ッ ト ワ ー ク
ネットワークも、個々のコンテナ
は別々のIPアドレスを持ちます。
ここでは eth0 に 127.0.0.37 と
いう IP アドレスが割り当てられ
ています。正確にはデフォルトは
ホスト上の docker0 ブリッジを
使用しています。
v1.9 以降は、任意のブリッジを
コンテナに追加したり、外したり
できるようになりました。詳細は
後述します。
root@bdf6207621c7:/# free
total used free shared buffers cached
Mem: 501792 485128 16664 460 127028 164560
-/+ buffers/cache: 193540 308252
Swap: 0 0 0
コ ン テ ナ 内 の メ モ リ
ディスク領域と同じく、メモリも
ホスト側と共有しています。その
ため、freeコマンドを実行しても、
ホスト側の情報が表示されます。
※個々のコンテナには利用可能
なメモリ上限を設定できます。
root@bdf6207621c7:/# exit
zem@dev:~$ docker stop bdf6207621c7
コ ン テ ナ の 終 了
そして、コンテナの終了とは、
PID 1 のプロセスを停止すること
をさします。docker stop や
docker kill コマンドも利用でき
ます。
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
これがDockerコンテナとDocker
イメージの関係です。コンテナ
で重要なのは、プロセスやファ
イルシステムやネットワークが、
お互いに分かれていること。
17
Docker 1.9
‣ 2015年11月の更新
• Docker Engine 1.9 リリース
– マルチホスト・ネットワーキングのサポート
– ボリューム用プラグインの再設計
• Docker Swarm 1.0.0 リリース
– ネットワーク機能・ボリューム機能のサポート
• Docker Compose 1.5 リリース
– ネットワーク機能の実験的サポート
11月の更新ではDockerエンジン
だけでなく、Swarm・Compose・
Machineの各ツールもバージョン
アップ。一番大きな変更点は、
ネットワーク機能の強化と、新し
い docker network コマンドの
サポートでしょう。
18
‣ Docker Engine 1.9
• Dockerfile 構築時のオプション追加
• イメージの並列取得
• 停止シグナルのカスタマイズ
• AWS CloudWatch ロギングドライバ対応
• docker stats コマンドにディスク I/O データを追加
19
‣ Docker Compose 1.5
• Windows に対応
• Compose ファイル(.yml)で環境変数が利用可能に
• 複数の Compose ファイルを読み込み可能
• ネットワーク機能の統合
• Compose ファイルの構文確認
20
‣ Docker Registry 2.2
• Google Cloud Storage 対応
• 読み込み専用モードのサポート
• ホスト名の設定
• ファイル存在と HTTP ヘルスチェック設定
• HTTP レスポンス・ヘッダ
Docker のネットワーク機能
2■■□ Docker Networking Features
Dockerの動作ホスト
コンテナA コンテナB
docker0 bridge
eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3
IP: 172.17.0.1
Docker 1.8 以前のネットワーク
これまでのDockerでは、コンテ
ナがホスト側のポートを利用した
り通信するには、docker0ブリッ
ジを通して通信していました。
vtehd... vtehd...
docker0ネットワーク
172.17.0.1/16
コンテナA コンテナB
eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3
docker0 bridge
IP: 172.17.0.1
veth.. veth..
eth0
ホスト側の
インターフェース
ブリッジ
docker0のブリッジを通し、コン
テナはホスト側やホストの外と
通信できるようになっていました。
Dockerの動作ホスト
コンテナ コンテナ
docker0 bridge
IP: 172.17.0.1
デフォルトのブリッジ・ホスト
ネットワーク
Docker 1.9 からのブリッジ・ネットワーク Docker 1.9からは、
複数のブリッジが利用
できるようになります。
eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3
コンテナ コンテナ
docker0 bridge 任意 bridge
デフォルトのブリッジ・ホスト
ネットワーク
ユーザ定義
ネットワーク
Docker 1.9 からのブリッジ・ネットワーク
…
Docker 1.9からは、
複数のブリッジが利用
できるようになります。
docker0はデフォルト
のネットワークという
位置付けです。
IP: 172.17.0.1 IP: 172.18.0.1
eth0 eth0
IP: 172.17.0.2 IP: 172.17.0.3
eth1
IP: 172.18.0.12172.18.0.11
eth1
Dockerの動作ホスト
コンテナ コンテナ
docker0 bridge 任意 bridge
デフォルトのブリッジ・ホスト
ネットワーク
ユーザ定義
ネットワーク
Docker 1.9 からのブリッジ・ネットワーク
…
詳しくは後述しますが、
これまでのリンク機能
はdocker0ブリッジの
みで利用可能です。
代替機能として新しく
コンテナ名とネット
ワークで名前解決が
可能になります。
IP: 172.17.0.1 IP: 172.18.0.1
eth0 eth0
IP: 172.17.0.2 IP: 172.17.0.3
eth1
IP: 172.18.0.12172.18.0.11
eth1
Dockerの動作ホスト
「--link」機能は
docker 0 ブリッジ
のみ対応
「コンテナ名.net名」で
動的な名前解決可能に
(リンク機能の代替)
docker0ネットワーク
172.17.0.1/16
eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3
docker0 bridge
IP: 172.17.0.1
veth.. veth..
ホスト側の
インターフェース
ブリッジ
改めて、先ほどのネットワー
ク図に置き換えますと、従来
はdocker0だけでしたが
コンテナA コンテナB
eth0
docker0ネットワーク
172.17.0.1/16
eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3
docker0 bridge
IP: 172.17.0.1
veth.. veth..
ホスト側の
インターフェース
ブリッジ
Docker1.9からネットワークは
複数のブリッジを持ち、コン
テナも複数のインターフェー
スを持てます。この設定はコ
ンテナの再起動が不要です。
ユーザ定義ネットワーク
172.18.0.1/16
コンテナA コンテナB
eth0
user bridge
eth1 eth1IP: 172.18.0.2 IP: 172.18.0.3veth.. veth..
IP: 172.18.0.1
docker0ネットワーク
172.17.0.1/16
eth0 IP: 172.17.0.3
docker0 bridge
IP: 172.17.0.1
veth..
ホスト側の
インターフェース
ブリッジ
Docker1.9からネットワークは
複数のブリッジを持ち、コン
テナも複数のインターフェー
スを持てます。この設定はコ
ンテナの再起動が不要です。
ユーザ定義ネットワーク
172.18.0.1/16
コンテナA コンテナB
eth0
user bridge
eth1 eth1IP: 172.18.0.2 IP: 172.18.0.3veth.. veth..
IP: 172.18.0.1
docker0ネットワーク
172.17.0.1/16
docker0 bridge
IP: 172.17.0.1
ホスト側の
インターフェース
ブリッジ
ネットワークを持たないコン
テナ作成も可能です。
(docker run --net=none)
もちろん、あとから追加削除
できます。
ユーザ定義ネットワーク
172.18.0.1/16
コンテナA コンテナC
eth0
user bridge
eth1 IP: 172.18.0.2veth..
IP: 172.18.0.1
オーバレイ・ネットワーク
$ docker network create --driver overlay internal
172.17.0.2 172.17.0.3 172.18.0.5
192.168.0.3192.168.0.1 192.168.0.2
実際のコンテナ利用において、
複数のサーバで共通のネット
ワーク通信を安全に行う場合
があります。そこで使えるの
が、新しいオーバレイ・ネット
ワーク。
docker0ネットワーク
172.17.0.1/16
docker0
bridge
IP: 172.17.0.1
ホスト側の
インターフェース
ブリッジ
overlayネットワーク
192.168.10.1/16
コンテナA
eth0
overlay
network
IP: 192.168.10.1
docker0
bridge
eth0
overlay
network
eth0 IP: 172.17.0.2veth..
コンテナB
ホスト1 ホスト2
オーバレイ・ネットワーク
ドライバは、VXLAN技術
(virtual extention lan)
を使い、複数ホスト上に
またがる仮想ネットワーク
の利用が可能です。
docker0ネットワーク
172.17.0.1/16
docker0
bridge
IP: 172.17.0.1
ホスト側の
インターフェース
ブリッジ
overlayネットワーク
192.168.10.1/16
コンテナA
eth0
overlay
network
eth1 IP: 192.168.10.2veth..
IP: 192.168.10.1
docker0
bridge
eth0
overlay
network
eth0 IP: 172.17.0.2veth..
eth1 IP: 192.168.10.3veth..
コンテナB
ホスト1 ホスト2
ネットワークには、ホスト
毎にネットワークIDが割り
振られます。オーバレイ・
ネットワークの場合、ホス
トが異なってもネットワー
クIDは同じです。
疎通
swarm-kvs
swarm-node0
(master)
swarm-node1
$ docker …
$ docker-compose …
tcp://<ip>:2376 tcp://<ip>:2376tcp://<ip>:2376
$ docker-machine …
docker docker docker
KVS ( consul )
bridge overlaybridge(docker0) bridgeoverlay
swam
master
コンテナ コンテナ
コンテナ
tcp:8500
eth0: 172.17.0.2 eth0: 172.17.0.2
eth0: 172.17.0.2
eth0: 172.17.0.5
eth0:172.17.0.4
eth1:172.18.0.2 eth1:172.18.0.3
35
docker network コマンド
‣ docker network create  ネットワーク作成
‣ docker network ls  ネットワーク一覧
‣ docker network connect  コンテナに接続
‣ docker network disconnect  切断
‣ docker network rm  ネットワーク削除
36
‣ docker network inspect  ネットワーク調査
‣ docker run --net=<ネットワーク名>
ライブ・デモ
root@demo1210:~# docker network ls
NETWORK ID NAME DRIVER
1a34c54ac517 bridge bridge
97f64692c37a none null
7bfea31360e9 host host
コマンド「network ls」は、ネットワーク一覧を表示
ドライバは4種類
・bridge … bridgeという名前は「docker0」ネットワーク
・host … ホスト・ネットワーキングは、コンテナが直接ホストを参照
・null … コンテナ内に仮想インターフェースを付けないモード
・overlay … 複数ホストにまたがるオーバレイ・ネットワーク
root@demo:~# docker network create front
9959a6e12da55fa6deacffa0146ae351204d8a89d72d900ddde969fdf1f3fe40
root@demo:~# docker network ls
NETWORK ID NAME DRIVER
28a6c2d24224 none null
49ef940103f8 host host
9959a6e12da5 front bridge
1ad2e3648872 bridge bridge
新しく「front」という名称のブリッジ・ネットワークを作成・確認
root@demo:~# docker network inspect front
[
{
"Name": "front",
"Id": "9959a6e12da55fa6deacffa0146ae351204d8a89d72d900ddde969fdf1f3fe40",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Config": [
{}
]
},
"Containers": {},
"Options": {}
}
]
新しいネットワーク
# docker run -itd --net=front --name=web ubuntu bash
ecc0e1d7ee23792a9bbd5b127e84af5534d66e92b10750413a8ff686c954c44e
root@demo:~# docker network inspect front
[
{
"Name": "front",
…
"Containers": {
"ecc0e1d7ee23792a9bbd5b127e84af5534d66e92b10750413a8ff686c954c44e": {
"EndpointID": "d5f681684213da53f558d34ce3359ac30053c2b2addc22caf99be8271e7bf603",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {}
}
]
コンテナを「front」ネットワークに作成
新しいネットワーク
(docker0の127.17.0.0/16ではない)
root@demo:~# docker network create back
6afc733feeaf46aaff80c5a605bacba63ae3463d1cfb925a9cdc9d82c3e9184b
root@demo:~# docker network ls
NETWORK ID NAME DRIVER
28a6c2d24224 none null
49ef940103f8 host host
9959a6e12da5 front bridge
6afc733feeaf back bridge
1ad2e3648872 bridge bridge
root@demo:~# docker run -itd --net=back --name=db ubuntu bash
0c3da94b22aa6d260a68ec7763e0962b2b273e6656e1d875a0c7c371244ebb41
新しいブリッジネットワーク「back」と、「db」コンテナをそこに作成
新しいネットワーク
root@demo:~# docker exec -it web bash
root@ecc0e1d7ee23:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KB) TX bytes:648 (648.0 B)
(省略)
「web」コンテナにプロセス bash を追加し、インターフェースを確認
root@demo:~# docker network connect back web
root@ecc0e1d7ee23:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KB) TX bytes:648 (648.0 B)
eth1 Link encap:Ethernet HWaddr 02:42:ac:13:00:03
inet addr:172.19.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe13:3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:648 (648.0 B) TX bytes:648 (648.0 B)
「web」「db」の両コンテナをつなげるには?「back」ネットワークに接続
root@ecc0e1d7ee23:/# cat /etc/hosts
172.18.0.2 ecc0e1d7ee23
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.2 db
172.19.0.2 db.back
さらに/etc/hostsを確認すると、「db」コンテナの名前解決も可能に
「コンテナ名.ネットワーク名」で名前解決
使用例:DB名やキャッシュ・サーバ等
※network connect をした時点で、ping 等、お互いが疎通する
※逆に、dbコンテナ上で/etc/hostsを確認すると、
「172.19.0.3 web.back」の記述が自動的に追加されている
root@0c3da94b22aa:/# cat /etc/hosts
172.19.0.2 0c3da94b22aa
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.3 web
172.19.0.3 web.back
「db」コンテナ内から「web」コンテナを確認
「ホスト名.ネットワーク名」で名前解決
使用例:DB名やキャッシュ・サーバ等
※webコンテナは172.18.0.2のIPアドレスも持つが、疎通できない。
あくまで web と db コンテナが共通している back ネットワーク内の
IPアドレス体系のみ(ネットワークを追加したら可能)。
ネットワークに関する詳細な情報は
コンテナのネットワーク — Docker-docs-ja 1.9.0b ドキュメント
http://docs.docker.jp/engine/userguide/networkingcontainers.html
Docker コンテナ・ネットワークの理解 — Docker-docs-ja 1.9.0b ドキュメント
http://docs.docker.jp/engine/userguide/networking/dockernetworks.html
【参考訳】 Docker 1.9 発表:Swarm とマルチホスト・ネットワーキングの
プロダクション対応
http://pocketstudio.jp/log3/2015/11/04/docker-1-9-production-ready-ja/
【参考訳】 プロダクションに対応するマルチホスト Docker ネットワーク機能
http://pocketstudio.jp/log3/2015/11/04/docker-multi-host-networking-ga/
オーケストレーションが見えてきた
3■■■Docker's Orchestration
┌──────────────────────┐
│ドッカースウォームが あらわれた! │
│ドッカーコンポーズが あらわれた! │
│コマンド? │
│ ∨ │
└━━━━━━━━━━━━━━━━━━━━━━┘
┌────┐
│ていじで │
│かえろう │
└━━━━┘
┌──────コマンド─────┐
│ たたかう じゅもん │
│ にげる げんじつとうひ │
└━━━━━━━━━━━━━━━┘
>
今年2月の時点では、なんだか
よく分からないツールが出たの?
オーケストレーション何?でした。
2015年2月
v1.5.0 v0.1.0 v1.1.0v0.1.0
experimental experimental
実験的だったツール群は、
2015年12月
v1.9.1 v0.5.2 v1.5.2v1.0.1
どれもβの扱いが外れています。
Docker API
Swarm
Manager
ディスカバリ・バックエンド
リソース・プール
スケジューラ
fleet
Docker API
Swarm
Manager
ディスカバリ・バックエンド
リソース・プール
スケジューラ
fleet
Docker環境の管理ツール
仮想サーバ環境
Dockerの自動セットアップ
Swarmクラスタの自動構築
Docker Machine
コンテナのスケジューリング
Docker API と互換性
ディスカバリ・バックエンドと連携
ネットワーク機能に対応
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 でデプロイ/プロビジョニング
ディスカバリ・バックエンド
複数のコンテナをコードで管理
コンテナの同時起動・停止
コンテナのスケール
ネットワーク機能に対応(実験的)
web:
image: wordpress
environment:
- "WORDPRESS_DB_HOST=cms_db_1"
- "WORDPRESS_DB_USER=root"
-
"WORDPRESS_DB_PASSWORD=example"
- "constraint:node==swarm-node0"
ports:
- 8080:80
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: example
docker-compose.yml
etcd:
image: gcr.io/google_containers/etcd:2.0.13
container_name: etcd
command: ['/usr/local/bin/etcd', '--bind-addr=0.0.0.0:4001', '--data-dir=/var/etcd/data']
apiserver:
image: gcr.io/google_containers/hyperkube:v1.0.7
container_name: apiserver
ports:
- "8080"
command: ["/hyperkube", "apiserver", "--service-cluster-ip-range=172.17.17.1/24", "--address=0.0.0.0", "--etcd_servers=http://etcd:4001", "--cluster_name=kubernetes", "--v=2"]
controller:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ["/hyperkube", "controller-manager", "--address=0.0.0.0", "--master=http://apiserver:8080", "--v=2"]
environment:
- "affinity:container==*apiserver*"
scheduler:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ["/hyperkube", "scheduler", "--address=0.0.0.0", "--master=http://apiserver:8080", "--v=2"]
environment:
- "affinity:container==*apiserver*"
kubelet:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ['/hyperkube', 'kubelet', '--containerized' , '--api_servers=http://apiserver:8080', '--v=2', '--address=0.0.0.0', '--enable_server']
volumes:
- /:/rootfs:ro
- /sys:/sys:ro
- /dev:/dev
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/:/var/lib/docker:ro
- /var/lib/kubelet/:/var/lib/kubelet:rw
- /var/run:/var/run:rw
privileged: true
# A kubelet shouldn't run alongside another kubelet - One privileged kubelet per node
environment:
- "affinity:container!=*kubelet*"
proxy:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ['/hyperkube', 'proxy', '--master=http://apiserver:8080', '--v=2']
privileged: true
# A proxy should run alongside another kubelet
environment:
- "affinity:container==*kubelet*"
これはComposeの設定ファイル
例です。複雑なコンテナの構成
だとしても、Composeのコマンド
1つで構築できます。
引用:Deploy and Manage Any Cluster Manager with Docker Swarm | Docker Blog
http://blog.docker.com/2015/11/deploy-manage-cluster-docker-swarm/
Docker Machineによって作られ
たSwarmクラスタ上だとしても
Composeが利用可能です。
ライブ・デモ
swarm-kvs
swarm-node0
(master)
swarm-node1
$ docker …
$ docker-compose …
tcp://<ip>:2376 tcp://<ip>:2376tcp://<ip>:2376
$ docker-machine …
docker docker docker
KVS ( consul )
bridge overlaybridge(docker0) bridgeoverlay
swam
master
コンテナ コンテナ
コンテナ
tcp:8500
eth0: 172.17.0.2 eth0: 172.17.0.2
eth0: 172.17.0.2
eth0: 172.17.0.5
eth0:172.17.0.4
eth1:172.18.0.2 eth1:172.18.0.3
DigitalOcean上の環境を
あらかじめ作成しておき
ました。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default - virtualbox Stopped
demo - digitalocean Running tcp://188.166.210.114:2376
demo1210 * digitalocean Running tcp://188.166.212.234:2376
dodocker - digitalocean Error tcp://188.166.218.71:2376
swarm-kvs - digitalocean Running tcp://188.166.223.150:2376
swarm-node0 - digitalocean Running tcp://188.166.223.157:2376 swarm-node0 (master)
swarm-node1 - digitalocean Running tcp://188.166.223.165:2376 swarm-node0
あらかじめ Docker Machine で Swarm クラスタを構築済みでした
手許PC(Windows)から、dockerクライアントで直接Swarmを操作できます
$ eval $(docker-machine env --swarm swarm-node0)
このSwarmクラスタ上で、WordPressを分散配置します。
$ docker info
Containers: 6
Images: 7
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
swarm-node0: 188.166.223.157:2376
m Containers: 4
m Reserved CPUs: 0 / 1
m Reserved Memory: 0 B / 514 MiB
m Labels: executiondriver=native-0.2, kernelversion=3.16.0-41-generic, operatingsystem=Ubuntu
14.04.3 LTS, provider=digitalocean, storagedriver=aufs
swarm-node1: 188.166.223.165:2376
m Containers: 2
m Reserved CPUs: 0 / 1
m Reserved Memory: 0 B / 514 MiB
m Labels: executiondriver=native-0.2, kernelversion=3.16.0-41-generic, operatingsystem=Ubuntu
14.04.3 LTS, provider=digitalocean, storagedriver=aufs
CPUs: 2
Total Memory: 1.004 GiB
Name: bea1b4473d7c
Swarm manager で docker info を実行すると、クラスタ情報を表示します。
$ docker network create cms
$ docker network ls
NETWORK ID NAME DRIVER
660a83d7dceb swarm-node1/none null
2f172240c30a swarm-node1/docker_gwbridge bridge
f31873cbef24 cms overlay
570d49557344 swarm-node1/bridge bridge
91a996769d0d swarm-node1/host host
64b008dee355 swarm-node0/docker_gwbridge bridge
7031059b130a swarm-node0/bridge bridge
cmsという名称のオーバレイ・ネットワークを作成します。
※dockerクライアントが操作しているのは、Swarmクラスタです。
特に明示しなければ、自動的にoverlayネットワークが有効になっています。
ただし、この機能はSwarmの各ノードが Linux 3.16以上の必要があります。
$ docker-compose --x-networking --x-network-driver overlay up –d
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------
98531c0a86_cms_web_1 /entrypoint.sh apache2-for ... Up 188.166.223.157:8080->80/tcp
cms_db_1 /docker-entrypoint.sh mysqld Up 3306/tcp
Compose を使って、WordPressを起動します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
ebf14768eacb mariadb "/docker-entrypoint.s" 6 days ago Up 26 hours
3306/tcp swarm-node1/cms_db_1
98531c0a8643 wordpress "/entrypoint.sh apach" 6 days ago Up 26 hours
188.166.223.157:8080->80/tcp swarm-node0/98531c0a86_cms_web_1
直接Swarmのリソースプールを操作。コンテナにホスト名が付与されています。
同一ネットワーク上に、Docker Swarm のストラテジとフィルタに従い
コンテナは自動的にスケジューリングされました。
(デフォルトは分散の Spread ストラテジ)
より詳細な情報は
Dockerのoverlayネットワークでコンテナを分散実行 - Qiita
http://qiita.com/zembutsu/items/4cd756ff8be4be76e5a3
docker - 参考訳:マルチホスト・ネットワーキングを始めよう - Qiita
http://qiita.com/zembutsu/items/36032ee78e82278b3c6a
tutum
https://www.tutum.co/
Docker社が買収(10月)
AWS, Digital Ocean, Azure,
SoftLayer, Packet と連携
コンテナのデプロイと管理
Docker Hub を補完する役割
その他の細かなトピックを紹介。
Docker Hub Tutum
パブリック環境でコンテナを実行
DTR
Docker Trusted Registry
Orca (beta) + UCP
Universal Control Plane
より安全にコンテナを実行
https://www.docker.com/universal-control-plane
72
まとめ
Docker技術情報アップデート 2015年12月号
‣ Docker 1.9 の新ネットワーク機能
• 「docker network」コマンドで、複数のネットワーク管理機能
• リンク機能(--link)とネットワーキング機能
• マルチホスト・ネットワーキング(オーバレイ・ネットワーク)
‣ オーケストレーションが見えてきた
• Machine・Swarm・Composeがより一体化
• DTR, ORCA, UCP(Universal Control Plane)
73
何か気になる所はありますか?
Docker技術情報アップデート 2015年12月号
‣ SwarmとKubernetesとの違いは?
• かつては同じようなクラスタ管理を指向していたように思えます。
今年のDockrCon以降は、Swarmはあくまで
コンテナ実行基盤としてのクラスタ管理に
特化しているように見えます。
KubernetesやMesos等の高度なコンテナの
スケジューリングは提供していません。
そこはプラグインのような形態で、利用者に
使い分けを求めているのかもしれません。
Docker に関するより詳細な情報は
Dockerドキュメント日本語化プロジェクト
http://docs.docker.jp/
・Docker Engine
・Docker Machine
・Docker Swarm
・Docker Compose
v1.9 対応

More Related Content

What's hot

Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Masahito Zembutsu
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらいNaoki Nagazumi
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Etsuji Nakai
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月VirtualTech Japan Inc.
 
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Masahito Zembutsu
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Masahito Zembutsu
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Masahito Zembutsu
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
【社内勉強会】Docker入門
【社内勉強会】Docker入門【社内勉強会】Docker入門
【社内勉強会】Docker入門Kazuki Murahama
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Masahito Zembutsu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 

What's hot (20)

Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
 
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
【社内勉強会】Docker入門
【社内勉強会】Docker入門【社内勉強会】Docker入門
【社内勉強会】Docker入門
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 

Viewers also liked

What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)Creationline,inc.
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
DockerのネットワークについてNobuyuki Matsui
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話gree_tech
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking toolsNobuyuki Matsui
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜Shuji Yamada
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Masahito Zembutsu
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらインターネット株式会社
 
Docker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionDocker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionCreationline,inc.
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~Kunihiro TANAKA
 
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 4Emma Haruka Iwao
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版Kamon Nobuchika
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月Emma Haruka Iwao
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...
Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...
Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...Creationline,inc.
 
Docker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaSDocker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaSDevOps Hub
 
Docker webinar 20170426−01
Docker webinar 20170426−01Docker webinar 20170426−01
Docker webinar 20170426−01Creationline,inc.
 
DevOpsを実践し成功に導くための ”はじめの一歩” 20171003
DevOpsを実践し成功に導くための ”はじめの一歩” 20171003DevOpsを実践し成功に導くための ”はじめの一歩” 20171003
DevOpsを実践し成功に導くための ”はじめの一歩” 20171003Creationline,inc.
 

Viewers also liked (20)

What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)What's New in Docker Enterprise Edition (in Japanese)
What's New in Docker Enterprise Edition (in Japanese)
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
Dockerのネットワークについて
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
Docker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionDocker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise Edition
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~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
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...
Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...
Docker webinar 20170616 - Modernize Traditional Apps with Docker Enterprise E...
 
Docker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaSDocker Enterprise Editionで実践するCaaS
Docker Enterprise Editionで実践するCaaS
 
Docker webinar 20170426−01
Docker webinar 20170426−01Docker webinar 20170426−01
Docker webinar 20170426−01
 
DevOpsを実践し成功に導くための ”はじめの一歩” 20171003
DevOpsを実践し成功に導くための ”はじめの一歩” 20171003DevOpsを実践し成功に導くための ”はじめの一歩” 20171003
DevOpsを実践し成功に導くための ”はじめの一歩” 20171003
 

Similar to Docker技術情報アップデート v1.9 ネットワークとオーケストレーション

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
 
[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
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineEtsuji Nakai
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016JUNICHI YOSHISE
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門KokiMakita1
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringGo Chiba
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouchYohei Sasaki
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワークYuji Oshima
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
OSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGOSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGHideki Saito
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on WindowsTsubasa Nomura
 

Similar to Docker技術情報アップデート v1.9 ネットワークとオーケストレーション (20)

Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
[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)
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
Cloud Foundry as Containerized Services - Cloud Foundry Days Tokyo 2016
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
 
Docker入門 OSC 2018 Tokyo/Spring
Docker入門 OSC 2018 Tokyo/SpringDocker入門 OSC 2018 Tokyo/Spring
Docker入門 OSC 2018 Tokyo/Spring
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワーク
 
Docker handson
Docker handsonDocker handson
Docker handson
 
OSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUGOSC2012 Tokyo/Spring JOSUG
OSC2012 Tokyo/Spring JOSUG
 
コンテナ on Windows
コンテナ on Windowsコンテナ on Windows
コンテナ on Windows
 

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道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Masahito Zembutsu
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」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
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編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
 

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
 
オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
Jitsi Meetとは?
Jitsi Meetとは?Jitsi Meetとは?
Jitsi Meetとは?
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
クリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようクリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしよう
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
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
 

Docker技術情報アップデート v1.9 ネットワークとオーケストレーション

  • 1. Docker技術情報アップデート v1.9-ネットワークとオーケストレーション 2015年12月10日(木) DockerCon EU 2015 Catch Up @zembutsu Technology Evangelist; Creationline, Inc. Networking and Orchestration 背景画像CREDIT:スフィア / PIXTA(ピクスタ)
  • 2. 2 スライドで得られる知識 Docker技術情報アップデート 2015年12月号 ‣ Docker コンテナの復習と 1.9 ‣ Docker 1.9 の新ネットワーク機能 • 「docker network」コマンドで、複数のネットワーク管理機能 • リンク機能(--link)とネットワーキング機能 • マルチホスト・ネットワーキング(オーバレイ・ネットワーク) ‣ オーケストレーションが見えてきた • Machine・Swarm・Composeがより一体化 • DTR, ORCA, UCP(Universal Control Plane) 前回の発表から半年過ぎました。 振り返ると、ネットワーク機能と オーケストレーションの連携強化。 これが大きなポイントだと思い、 スライドにまとめたのがこちら。
  • 3. 1 32 4 5 6 7 8 9 10 11 12 2015 Timeline DockerCon 2015 Docker 1.7 Release Open Container Initiative Docker 1.9 Release LXC 1.0 Release Docker 1.8, Toolbox Release DockerCon EU HashiConf 2010 ギリシャ 金融危機 北陸新幹線開業 COP21 シャーロット ちゃん 中国株式市場混乱 パリ同時多発テロ 官邸ドローン墜落事件 安全保障関連法成立 ISIS情勢 泥沼化 Docker Machine, Swarm, Compose Announcement 今年1年を振り返るとDockerを 取り巻く環境は、大きく変化。 関東東北豪雨
  • 5. サーバ OS のカーネル空間 Docker サーバ ユ ー ザ プ ロ セ ス ユ ー ザ プ ロ セ ス ユーザ空間 ユ ー ザ プ ロ セ ス ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … Docker コンテナ そもそもDockerコンテナとは? 13年3月のPyConでdotCloud社 (当時)のCEO、Hyke氏が発表。 dockerコマンドで簡単にアプリを コンテナとして動かせるように。
  • 6. サーバ OS のカーネル空間 Docker サーバ ユ ー ザ プ ロ セ ス ユ ー ザ プ ロ セ ス ユーザ空間 コンテナ Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket docker run … Dockerコンテナとはプロセスの 1つ1つを隔離して起動すること。 正確には「隔離」または「分離」 する(英語のisolate)のは、単に プロセスだけではありません。 ファイルシステムを(chroot風に) マウントし、ネットワークを持ち、 メモリやCPUリソースの上限を 設定できます。Linuxカーネルの 機能を使います。 あくまでもDockerのホスト側から は単純にプロセスが起動してい るだけですし、ファイルシステム が見えるにすぎません。 もう1つ重要な概念が、Docker イメージです。Dockerコンテナ の実行とは、Dockerイメージ上 のプロセスを実行することでもあ るのです。もしイメージが手許 になければ…?
  • 7. サーバ OS のカーネル空間 Docker サーバ ユ ー ザ プ ロ セ ス ユ ー ザ プ ロ セ ス ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … レジストリ(DockerHub等)から イメージをダウンロードします。 そして、その中に含まれるプロ セスを、Dockerコンテナとして 実行するものでした。
  • 8. • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User そして、そのプロセスの実行を コンテナを実行していると表現し、 プロセスが停止するとコンテナ も停止しているものと扱います。
  • 9. zem@dev:~$ docker run -ti ubuntu /bin/bash root@bdf6207621c7:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 01:11 ? 00:00:00 /bin/bash root 16 1 0 01:11 ? 00:00:00 ps -ef root@bdf6207621c7:/# コ ン テ ナ 内 の プ ロ セ ス Dockerコンテナ内のプロセスは PIDが「1」です。各々のコンテ ナは、全てPID「1」として動作 します。
  • 11. root@bdf6207621c7:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@bdf6207621c7:/# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 20511356 12952564 6493836 67% / none 20511356 12952564 6493836 67% / tmpfs 250896 0 250896 0% /dev shm 65536 0 65536 0% /dev/shm tmpfs 250896 0 250896 0% /sys/fs/cgroup /dev/disk/by-label/DOROOT 20511356 12952564 6493836 67% /etc/hosts tmpfs 250896 0 250896 0% /proc/kcore tmpfs 250896 0 250896 0% /proc/latency_stats tmpfs 250896 0 250896 0% /proc/timer_stats コ ン テ ナ 内 の フ ァ イ ル シ ス テ ム また、ファイルシステム(単に ディレクトリのこと)もコンテナ ごとに独立していますが、あくま でもホスト側と共有しているため、 dfで見た時のディスク容量は、 ホスト側のものがそのまま表示 されます。
  • 13. root@bdf6207621c7:/# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 361: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:25 brd ff:ff:ff:ff:ff:ff inet 172.17.0.37/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:25/64 scope link valid_lft forever preferred_lft forever root@bdf6207621c7:/# ip route default via 172.17.42.1 dev eth0 172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.37 コ ン テ ナ 内 の ネ ッ ト ワ ー ク ネットワークも、個々のコンテナ は別々のIPアドレスを持ちます。 ここでは eth0 に 127.0.0.37 と いう IP アドレスが割り当てられ ています。正確にはデフォルトは ホスト上の docker0 ブリッジを 使用しています。 v1.9 以降は、任意のブリッジを コンテナに追加したり、外したり できるようになりました。詳細は 後述します。
  • 14. root@bdf6207621c7:/# free total used free shared buffers cached Mem: 501792 485128 16664 460 127028 164560 -/+ buffers/cache: 193540 308252 Swap: 0 0 0 コ ン テ ナ 内 の メ モ リ ディスク領域と同じく、メモリも ホスト側と共有しています。その ため、freeコマンドを実行しても、 ホスト側の情報が表示されます。 ※個々のコンテナには利用可能 なメモリ上限を設定できます。
  • 15. root@bdf6207621c7:/# exit zem@dev:~$ docker stop bdf6207621c7 コ ン テ ナ の 終 了 そして、コンテナの終了とは、 PID 1 のプロセスを停止すること をさします。docker stop や docker kill コマンドも利用でき ます。
  • 16. • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User これがDockerコンテナとDocker イメージの関係です。コンテナ で重要なのは、プロセスやファ イルシステムやネットワークが、 お互いに分かれていること。
  • 17. 17 Docker 1.9 ‣ 2015年11月の更新 • Docker Engine 1.9 リリース – マルチホスト・ネットワーキングのサポート – ボリューム用プラグインの再設計 • Docker Swarm 1.0.0 リリース – ネットワーク機能・ボリューム機能のサポート • Docker Compose 1.5 リリース – ネットワーク機能の実験的サポート 11月の更新ではDockerエンジン だけでなく、Swarm・Compose・ Machineの各ツールもバージョン アップ。一番大きな変更点は、 ネットワーク機能の強化と、新し い docker network コマンドの サポートでしょう。
  • 18. 18 ‣ Docker Engine 1.9 • Dockerfile 構築時のオプション追加 • イメージの並列取得 • 停止シグナルのカスタマイズ • AWS CloudWatch ロギングドライバ対応 • docker stats コマンドにディスク I/O データを追加
  • 19. 19 ‣ Docker Compose 1.5 • Windows に対応 • Compose ファイル(.yml)で環境変数が利用可能に • 複数の Compose ファイルを読み込み可能 • ネットワーク機能の統合 • Compose ファイルの構文確認
  • 20. 20 ‣ Docker Registry 2.2 • Google Cloud Storage 対応 • 読み込み専用モードのサポート • ホスト名の設定 • ファイル存在と HTTP ヘルスチェック設定 • HTTP レスポンス・ヘッダ
  • 22. Dockerの動作ホスト コンテナA コンテナB docker0 bridge eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3 IP: 172.17.0.1 Docker 1.8 以前のネットワーク これまでのDockerでは、コンテ ナがホスト側のポートを利用した り通信するには、docker0ブリッ ジを通して通信していました。 vtehd... vtehd...
  • 23. docker0ネットワーク 172.17.0.1/16 コンテナA コンテナB eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3 docker0 bridge IP: 172.17.0.1 veth.. veth.. eth0 ホスト側の インターフェース ブリッジ docker0のブリッジを通し、コン テナはホスト側やホストの外と 通信できるようになっていました。
  • 24. Dockerの動作ホスト コンテナ コンテナ docker0 bridge IP: 172.17.0.1 デフォルトのブリッジ・ホスト ネットワーク Docker 1.9 からのブリッジ・ネットワーク Docker 1.9からは、 複数のブリッジが利用 できるようになります。 eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3
  • 25. コンテナ コンテナ docker0 bridge 任意 bridge デフォルトのブリッジ・ホスト ネットワーク ユーザ定義 ネットワーク Docker 1.9 からのブリッジ・ネットワーク … Docker 1.9からは、 複数のブリッジが利用 できるようになります。 docker0はデフォルト のネットワークという 位置付けです。 IP: 172.17.0.1 IP: 172.18.0.1 eth0 eth0 IP: 172.17.0.2 IP: 172.17.0.3 eth1 IP: 172.18.0.12172.18.0.11 eth1 Dockerの動作ホスト
  • 26. コンテナ コンテナ docker0 bridge 任意 bridge デフォルトのブリッジ・ホスト ネットワーク ユーザ定義 ネットワーク Docker 1.9 からのブリッジ・ネットワーク … 詳しくは後述しますが、 これまでのリンク機能 はdocker0ブリッジの みで利用可能です。 代替機能として新しく コンテナ名とネット ワークで名前解決が 可能になります。 IP: 172.17.0.1 IP: 172.18.0.1 eth0 eth0 IP: 172.17.0.2 IP: 172.17.0.3 eth1 IP: 172.18.0.12172.18.0.11 eth1 Dockerの動作ホスト 「--link」機能は docker 0 ブリッジ のみ対応 「コンテナ名.net名」で 動的な名前解決可能に (リンク機能の代替)
  • 27. docker0ネットワーク 172.17.0.1/16 eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3 docker0 bridge IP: 172.17.0.1 veth.. veth.. ホスト側の インターフェース ブリッジ 改めて、先ほどのネットワー ク図に置き換えますと、従来 はdocker0だけでしたが コンテナA コンテナB eth0
  • 28. docker0ネットワーク 172.17.0.1/16 eth0 eth0IP: 172.17.0.2 IP: 172.17.0.3 docker0 bridge IP: 172.17.0.1 veth.. veth.. ホスト側の インターフェース ブリッジ Docker1.9からネットワークは 複数のブリッジを持ち、コン テナも複数のインターフェー スを持てます。この設定はコ ンテナの再起動が不要です。 ユーザ定義ネットワーク 172.18.0.1/16 コンテナA コンテナB eth0 user bridge eth1 eth1IP: 172.18.0.2 IP: 172.18.0.3veth.. veth.. IP: 172.18.0.1
  • 29. docker0ネットワーク 172.17.0.1/16 eth0 IP: 172.17.0.3 docker0 bridge IP: 172.17.0.1 veth.. ホスト側の インターフェース ブリッジ Docker1.9からネットワークは 複数のブリッジを持ち、コン テナも複数のインターフェー スを持てます。この設定はコ ンテナの再起動が不要です。 ユーザ定義ネットワーク 172.18.0.1/16 コンテナA コンテナB eth0 user bridge eth1 eth1IP: 172.18.0.2 IP: 172.18.0.3veth.. veth.. IP: 172.18.0.1
  • 30. docker0ネットワーク 172.17.0.1/16 docker0 bridge IP: 172.17.0.1 ホスト側の インターフェース ブリッジ ネットワークを持たないコン テナ作成も可能です。 (docker run --net=none) もちろん、あとから追加削除 できます。 ユーザ定義ネットワーク 172.18.0.1/16 コンテナA コンテナC eth0 user bridge eth1 IP: 172.18.0.2veth.. IP: 172.18.0.1
  • 31. オーバレイ・ネットワーク $ docker network create --driver overlay internal 172.17.0.2 172.17.0.3 172.18.0.5 192.168.0.3192.168.0.1 192.168.0.2 実際のコンテナ利用において、 複数のサーバで共通のネット ワーク通信を安全に行う場合 があります。そこで使えるの が、新しいオーバレイ・ネット ワーク。
  • 32. docker0ネットワーク 172.17.0.1/16 docker0 bridge IP: 172.17.0.1 ホスト側の インターフェース ブリッジ overlayネットワーク 192.168.10.1/16 コンテナA eth0 overlay network IP: 192.168.10.1 docker0 bridge eth0 overlay network eth0 IP: 172.17.0.2veth.. コンテナB ホスト1 ホスト2 オーバレイ・ネットワーク ドライバは、VXLAN技術 (virtual extention lan) を使い、複数ホスト上に またがる仮想ネットワーク の利用が可能です。
  • 33. docker0ネットワーク 172.17.0.1/16 docker0 bridge IP: 172.17.0.1 ホスト側の インターフェース ブリッジ overlayネットワーク 192.168.10.1/16 コンテナA eth0 overlay network eth1 IP: 192.168.10.2veth.. IP: 192.168.10.1 docker0 bridge eth0 overlay network eth0 IP: 172.17.0.2veth.. eth1 IP: 192.168.10.3veth.. コンテナB ホスト1 ホスト2 ネットワークには、ホスト 毎にネットワークIDが割り 振られます。オーバレイ・ ネットワークの場合、ホス トが異なってもネットワー クIDは同じです。 疎通
  • 34. swarm-kvs swarm-node0 (master) swarm-node1 $ docker … $ docker-compose … tcp://<ip>:2376 tcp://<ip>:2376tcp://<ip>:2376 $ docker-machine … docker docker docker KVS ( consul ) bridge overlaybridge(docker0) bridgeoverlay swam master コンテナ コンテナ コンテナ tcp:8500 eth0: 172.17.0.2 eth0: 172.17.0.2 eth0: 172.17.0.2 eth0: 172.17.0.5 eth0:172.17.0.4 eth1:172.18.0.2 eth1:172.18.0.3
  • 35. 35 docker network コマンド ‣ docker network create  ネットワーク作成 ‣ docker network ls  ネットワーク一覧 ‣ docker network connect  コンテナに接続 ‣ docker network disconnect  切断 ‣ docker network rm  ネットワーク削除
  • 36. 36 ‣ docker network inspect  ネットワーク調査 ‣ docker run --net=<ネットワーク名>
  • 38. root@demo1210:~# docker network ls NETWORK ID NAME DRIVER 1a34c54ac517 bridge bridge 97f64692c37a none null 7bfea31360e9 host host コマンド「network ls」は、ネットワーク一覧を表示 ドライバは4種類 ・bridge … bridgeという名前は「docker0」ネットワーク ・host … ホスト・ネットワーキングは、コンテナが直接ホストを参照 ・null … コンテナ内に仮想インターフェースを付けないモード ・overlay … 複数ホストにまたがるオーバレイ・ネットワーク
  • 39. root@demo:~# docker network create front 9959a6e12da55fa6deacffa0146ae351204d8a89d72d900ddde969fdf1f3fe40 root@demo:~# docker network ls NETWORK ID NAME DRIVER 28a6c2d24224 none null 49ef940103f8 host host 9959a6e12da5 front bridge 1ad2e3648872 bridge bridge 新しく「front」という名称のブリッジ・ネットワークを作成・確認 root@demo:~# docker network inspect front [ { "Name": "front", "Id": "9959a6e12da55fa6deacffa0146ae351204d8a89d72d900ddde969fdf1f3fe40", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": {}, "Options": {} } ] 新しいネットワーク
  • 40. # docker run -itd --net=front --name=web ubuntu bash ecc0e1d7ee23792a9bbd5b127e84af5534d66e92b10750413a8ff686c954c44e root@demo:~# docker network inspect front [ { "Name": "front", … "Containers": { "ecc0e1d7ee23792a9bbd5b127e84af5534d66e92b10750413a8ff686c954c44e": { "EndpointID": "d5f681684213da53f558d34ce3359ac30053c2b2addc22caf99be8271e7bf603", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {} } ] コンテナを「front」ネットワークに作成 新しいネットワーク (docker0の127.17.0.0/16ではない)
  • 41. root@demo:~# docker network create back 6afc733feeaf46aaff80c5a605bacba63ae3463d1cfb925a9cdc9d82c3e9184b root@demo:~# docker network ls NETWORK ID NAME DRIVER 28a6c2d24224 none null 49ef940103f8 host host 9959a6e12da5 front bridge 6afc733feeaf back bridge 1ad2e3648872 bridge bridge root@demo:~# docker run -itd --net=back --name=db ubuntu bash 0c3da94b22aa6d260a68ec7763e0962b2b273e6656e1d875a0c7c371244ebb41 新しいブリッジネットワーク「back」と、「db」コンテナをそこに作成 新しいネットワーク
  • 42. root@demo:~# docker exec -it web bash root@ecc0e1d7ee23:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02 inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1296 (1.2 KB) TX bytes:648 (648.0 B) (省略) 「web」コンテナにプロセス bash を追加し、インターフェースを確認
  • 43. root@demo:~# docker network connect back web root@ecc0e1d7ee23:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02 inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1296 (1.2 KB) TX bytes:648 (648.0 B) eth1 Link encap:Ethernet HWaddr 02:42:ac:13:00:03 inet addr:172.19.0.3 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe13:3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:648 (648.0 B) TX bytes:648 (648.0 B) 「web」「db」の両コンテナをつなげるには?「back」ネットワークに接続
  • 44. root@ecc0e1d7ee23:/# cat /etc/hosts 172.18.0.2 ecc0e1d7ee23 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.19.0.2 db 172.19.0.2 db.back さらに/etc/hostsを確認すると、「db」コンテナの名前解決も可能に 「コンテナ名.ネットワーク名」で名前解決 使用例:DB名やキャッシュ・サーバ等 ※network connect をした時点で、ping 等、お互いが疎通する ※逆に、dbコンテナ上で/etc/hostsを確認すると、 「172.19.0.3 web.back」の記述が自動的に追加されている
  • 45. root@0c3da94b22aa:/# cat /etc/hosts 172.19.0.2 0c3da94b22aa 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.19.0.3 web 172.19.0.3 web.back 「db」コンテナ内から「web」コンテナを確認 「ホスト名.ネットワーク名」で名前解決 使用例:DB名やキャッシュ・サーバ等 ※webコンテナは172.18.0.2のIPアドレスも持つが、疎通できない。 あくまで web と db コンテナが共通している back ネットワーク内の IPアドレス体系のみ(ネットワークを追加したら可能)。
  • 46. ネットワークに関する詳細な情報は コンテナのネットワーク — Docker-docs-ja 1.9.0b ドキュメント http://docs.docker.jp/engine/userguide/networkingcontainers.html Docker コンテナ・ネットワークの理解 — Docker-docs-ja 1.9.0b ドキュメント http://docs.docker.jp/engine/userguide/networking/dockernetworks.html 【参考訳】 Docker 1.9 発表:Swarm とマルチホスト・ネットワーキングの プロダクション対応 http://pocketstudio.jp/log3/2015/11/04/docker-1-9-production-ready-ja/ 【参考訳】 プロダクションに対応するマルチホスト Docker ネットワーク機能 http://pocketstudio.jp/log3/2015/11/04/docker-multi-host-networking-ga/
  • 48. ┌──────────────────────┐ │ドッカースウォームが あらわれた! │ │ドッカーコンポーズが あらわれた! │ │コマンド? │ │ ∨ │ └━━━━━━━━━━━━━━━━━━━━━━┘ ┌────┐ │ていじで │ │かえろう │ └━━━━┘ ┌──────コマンド─────┐ │ たたかう じゅもん │ │ にげる げんじつとうひ │ └━━━━━━━━━━━━━━━┘ > 今年2月の時点では、なんだか よく分からないツールが出たの? オーケストレーション何?でした。
  • 49. 2015年2月 v1.5.0 v0.1.0 v1.1.0v0.1.0 experimental experimental 実験的だったツール群は、
  • 54.
  • 56. 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 でデプロイ/プロビジョニング ディスカバリ・バックエンド
  • 58. web: image: wordpress environment: - "WORDPRESS_DB_HOST=cms_db_1" - "WORDPRESS_DB_USER=root" - "WORDPRESS_DB_PASSWORD=example" - "constraint:node==swarm-node0" ports: - 8080:80 db: image: mariadb environment: MYSQL_ROOT_PASSWORD: example docker-compose.yml
  • 59. etcd: image: gcr.io/google_containers/etcd:2.0.13 container_name: etcd command: ['/usr/local/bin/etcd', '--bind-addr=0.0.0.0:4001', '--data-dir=/var/etcd/data'] apiserver: image: gcr.io/google_containers/hyperkube:v1.0.7 container_name: apiserver ports: - "8080" command: ["/hyperkube", "apiserver", "--service-cluster-ip-range=172.17.17.1/24", "--address=0.0.0.0", "--etcd_servers=http://etcd:4001", "--cluster_name=kubernetes", "--v=2"] controller: image: gcr.io/google_containers/hyperkube:v1.0.7 command: ["/hyperkube", "controller-manager", "--address=0.0.0.0", "--master=http://apiserver:8080", "--v=2"] environment: - "affinity:container==*apiserver*" scheduler: image: gcr.io/google_containers/hyperkube:v1.0.7 command: ["/hyperkube", "scheduler", "--address=0.0.0.0", "--master=http://apiserver:8080", "--v=2"] environment: - "affinity:container==*apiserver*" kubelet: image: gcr.io/google_containers/hyperkube:v1.0.7 command: ['/hyperkube', 'kubelet', '--containerized' , '--api_servers=http://apiserver:8080', '--v=2', '--address=0.0.0.0', '--enable_server'] volumes: - /:/rootfs:ro - /sys:/sys:ro - /dev:/dev - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/:/var/lib/docker:ro - /var/lib/kubelet/:/var/lib/kubelet:rw - /var/run:/var/run:rw privileged: true # A kubelet shouldn't run alongside another kubelet - One privileged kubelet per node environment: - "affinity:container!=*kubelet*" proxy: image: gcr.io/google_containers/hyperkube:v1.0.7 command: ['/hyperkube', 'proxy', '--master=http://apiserver:8080', '--v=2'] privileged: true # A proxy should run alongside another kubelet environment: - "affinity:container==*kubelet*" これはComposeの設定ファイル 例です。複雑なコンテナの構成 だとしても、Composeのコマンド 1つで構築できます。
  • 60. 引用:Deploy and Manage Any Cluster Manager with Docker Swarm | Docker Blog http://blog.docker.com/2015/11/deploy-manage-cluster-docker-swarm/ Docker Machineによって作られ たSwarmクラスタ上だとしても Composeが利用可能です。
  • 62. swarm-kvs swarm-node0 (master) swarm-node1 $ docker … $ docker-compose … tcp://<ip>:2376 tcp://<ip>:2376tcp://<ip>:2376 $ docker-machine … docker docker docker KVS ( consul ) bridge overlaybridge(docker0) bridgeoverlay swam master コンテナ コンテナ コンテナ tcp:8500 eth0: 172.17.0.2 eth0: 172.17.0.2 eth0: 172.17.0.2 eth0: 172.17.0.5 eth0:172.17.0.4 eth1:172.18.0.2 eth1:172.18.0.3 DigitalOcean上の環境を あらかじめ作成しておき ました。
  • 63. $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default - virtualbox Stopped demo - digitalocean Running tcp://188.166.210.114:2376 demo1210 * digitalocean Running tcp://188.166.212.234:2376 dodocker - digitalocean Error tcp://188.166.218.71:2376 swarm-kvs - digitalocean Running tcp://188.166.223.150:2376 swarm-node0 - digitalocean Running tcp://188.166.223.157:2376 swarm-node0 (master) swarm-node1 - digitalocean Running tcp://188.166.223.165:2376 swarm-node0 あらかじめ Docker Machine で Swarm クラスタを構築済みでした 手許PC(Windows)から、dockerクライアントで直接Swarmを操作できます $ eval $(docker-machine env --swarm swarm-node0) このSwarmクラスタ上で、WordPressを分散配置します。
  • 64. $ docker info Containers: 6 Images: 7 Role: primary Strategy: spread Filters: health, port, dependency, affinity, constraint Nodes: 2 swarm-node0: 188.166.223.157:2376 m Containers: 4 m Reserved CPUs: 0 / 1 m Reserved Memory: 0 B / 514 MiB m Labels: executiondriver=native-0.2, kernelversion=3.16.0-41-generic, operatingsystem=Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs swarm-node1: 188.166.223.165:2376 m Containers: 2 m Reserved CPUs: 0 / 1 m Reserved Memory: 0 B / 514 MiB m Labels: executiondriver=native-0.2, kernelversion=3.16.0-41-generic, operatingsystem=Ubuntu 14.04.3 LTS, provider=digitalocean, storagedriver=aufs CPUs: 2 Total Memory: 1.004 GiB Name: bea1b4473d7c Swarm manager で docker info を実行すると、クラスタ情報を表示します。
  • 65. $ docker network create cms $ docker network ls NETWORK ID NAME DRIVER 660a83d7dceb swarm-node1/none null 2f172240c30a swarm-node1/docker_gwbridge bridge f31873cbef24 cms overlay 570d49557344 swarm-node1/bridge bridge 91a996769d0d swarm-node1/host host 64b008dee355 swarm-node0/docker_gwbridge bridge 7031059b130a swarm-node0/bridge bridge cmsという名称のオーバレイ・ネットワークを作成します。 ※dockerクライアントが操作しているのは、Swarmクラスタです。 特に明示しなければ、自動的にoverlayネットワークが有効になっています。 ただし、この機能はSwarmの各ノードが Linux 3.16以上の必要があります。
  • 66. $ docker-compose --x-networking --x-network-driver overlay up –d $ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------- 98531c0a86_cms_web_1 /entrypoint.sh apache2-for ... Up 188.166.223.157:8080->80/tcp cms_db_1 /docker-entrypoint.sh mysqld Up 3306/tcp Compose を使って、WordPressを起動します。 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebf14768eacb mariadb "/docker-entrypoint.s" 6 days ago Up 26 hours 3306/tcp swarm-node1/cms_db_1 98531c0a8643 wordpress "/entrypoint.sh apach" 6 days ago Up 26 hours 188.166.223.157:8080->80/tcp swarm-node0/98531c0a86_cms_web_1 直接Swarmのリソースプールを操作。コンテナにホスト名が付与されています。 同一ネットワーク上に、Docker Swarm のストラテジとフィルタに従い コンテナは自動的にスケジューリングされました。 (デフォルトは分散の Spread ストラテジ)
  • 67. より詳細な情報は Dockerのoverlayネットワークでコンテナを分散実行 - Qiita http://qiita.com/zembutsu/items/4cd756ff8be4be76e5a3 docker - 参考訳:マルチホスト・ネットワーキングを始めよう - Qiita http://qiita.com/zembutsu/items/36032ee78e82278b3c6a
  • 68. tutum https://www.tutum.co/ Docker社が買収(10月) AWS, Digital Ocean, Azure, SoftLayer, Packet と連携 コンテナのデプロイと管理 Docker Hub を補完する役割 その他の細かなトピックを紹介。
  • 70. DTR Docker Trusted Registry Orca (beta) + UCP Universal Control Plane より安全にコンテナを実行 https://www.docker.com/universal-control-plane
  • 71.
  • 72. 72 まとめ Docker技術情報アップデート 2015年12月号 ‣ Docker 1.9 の新ネットワーク機能 • 「docker network」コマンドで、複数のネットワーク管理機能 • リンク機能(--link)とネットワーキング機能 • マルチホスト・ネットワーキング(オーバレイ・ネットワーク) ‣ オーケストレーションが見えてきた • Machine・Swarm・Composeがより一体化 • DTR, ORCA, UCP(Universal Control Plane)
  • 73. 73 何か気になる所はありますか? Docker技術情報アップデート 2015年12月号 ‣ SwarmとKubernetesとの違いは? • かつては同じようなクラスタ管理を指向していたように思えます。 今年のDockrCon以降は、Swarmはあくまで コンテナ実行基盤としてのクラスタ管理に 特化しているように見えます。 KubernetesやMesos等の高度なコンテナの スケジューリングは提供していません。 そこはプラグインのような形態で、利用者に 使い分けを求めているのかもしれません。