Your SlideShare is downloading. ×
0
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Dive into dockerネットワーク
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Dive into dockerネットワーク

9,209

Published on

Published in: Technology, Education
0 Comments
36 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,209
On Slideshare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
82
Comments
0
Likes
36
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Dive into Docker ネットワーク @mainyaa Image by Countney McNealy https://www.flickr.com/photos/courageousferret/4500059665
  • 2. Who ● @mainyaa ● Kazuyuki Mori ● フロントエンドからバックエンドまでやる系エンジニア ● AngualrJSとDocker大好き ● Topgate, Inc. - http://www.topgate.co.jp/ ● Happy New World - http://d.hatena.ne.jp/mainyaa
  • 3. Dockerのネットワークの問題 ●
  • 4. Dockerのネットワークの問題 ● 複数ホストでlinkしたいです>< ● 本番の環境は決まっているのだからそれに合 わせてチューニングしたい ● 開発の時とプロダクションを意識しないで複数コ ンテナを連携させたい ● ロックインを避けつつスケールしたい
  • 5. コンテナ間通信の3つの方法 ● -link ● ホストネットワークで実行 ● Open vSwitch
  • 6. 潜水してみよう!
  • 7. DockerのNetworking ● 確認してみよう! ● $ ip a ● ifconfigとか使ってるのはおっさんらしいです >< ● http://opcdiary.net/?p=28500 ● RHEL7ではsystem-config-networkは廃止、 ifconfigやrouteなどのnet-toolsが非推奨
  • 8. $ ip a 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 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:63:2d brd ff:ff:ff:ff:ff:ff inet 10.240.99.45/32 brd 10.240.99.45 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default link/ether 9e:7a:ac:ed:32:30 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever
  • 9. $ ip a 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 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:63:2d brd ff:ff:ff:ff:ff:ff inet 10.240.99.45/32 brd 10.240.99.45 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default link/ether 9e:7a:ac:ed:32:30 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever
  • 10. DockerのNetworking ● Dockerコンテナはdocker0という仮想ブリッジ上 で実行される ● コンテナのeth0はvethXXXXという仮想インター フェイスと接続される ● コンテナが実行時にコンテナごとに異なるipアド レスが払い出される
  • 11. $ sudo docker run base ip a ... 18: eth0: <NO-CARRIER,BROADCAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state DOWN qlen 1000 link/ether ca:2b:5e:2e:ce:78 brd ff:ff:ff:ff:ff:ff inet 172.17.0.9/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::c82b:5eff:fe2e:ce78/64 scope link tentative valid_lft forever preferred_lft forever
  • 12. $ ip a 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 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:eb:dd brd ff:ff:ff:ff:ff:ff inet 10.240.235.221/32 brd 10.240.235.221 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever 23: vethd07b: <BROADCAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast master docker0 state UP group default qlen 1000 link/ether 52:4f:9d:fe:a0:72 brd ff:ff:ff:ff:ff:ff 25: veth572b: <BROADCAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast master docker0 state UP group default qlen 1000 link/ether a2:0d:00:82:ef:fa brd ff:ff:ff:ff:ff:ff 29: vethad91: <BROADCAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast master docker0 state UP group default qlen 1000 link/ether 82:a9:af:0d:73:a2 brd ff:ff:ff:ff:ff:ff
  • 13. -link ● docker run -link <name>:<alias> ○ 既に起動しているDockerコンテナに接続する ○ Dockerが相手の環境変数とホスト名を設定してくれる refs: http://deeeet.com/writing/2014/05/11/docker-network/
  • 14. --name=node1 --name=node2
  • 15. Ubuntu Docker eth0 172.17.0.1 eth0 docker0 vethd07b 172.17.0.2 eth0 veth572b 10.240.99.45 172.17.0.0/16 -icc=[true|false] docker run --link refs: http://deeeet.com/writing/2014/05/11/docker-network/
  • 16. $ ip a 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 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:eb:dd brd ff:ff:ff:ff:ff:ff inet 10.240.235.221/32 brd 10.240.235.221 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever 23: vethd07b: <BROADCAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast master docker0 state UP group default qlen 1000 link/ether 52:4f:9d:fe:a0:72 brd ff:ff:ff:ff:ff:ff 25: veth572b: <BROADCAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast master docker0 state UP group default qlen 1000 link/ether a2:0d:00:82:ef:fa brd ff:ff:ff:ff:ff:ff
  • 17. $ sudo docker run --link redis1:redis1 base env HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=92b3a500b0ef TERM=xterm REDIS1_PORT=tcp://172.17.0.2:6379 REDIS1_PORT_6379_TCP=tcp://172.17.0.2:6379 REDIS1_PORT_6379_TCP_ADDR=172.17.0.2 REDIS1_PORT_6379_TCP_PORT=6379 REDIS1_PORT_6379_TCP_PROTO=tcp REDIS1_NAME=/happy_colden/redis1
  • 18. $ sudo docker run --link redis1:redis1 base cat /etc/hosts 172.17.0.4 950990b968c2 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.17.0.2 redis1
  • 19. -link ● 良い: ○ 手軽で便利。安全。Dockerが勝手にポートを振り分けて くれる ● 悪い: ○ $ sudo docker inspect --format ' {{ .NetworkSettings. IPAddress }} ' <container id> ○ スケールしない ○ 異なるホストにはlinkできない
  • 20. ホストネットワーク機能 ●
  • 21. ホストネットワーク機能 ● docker run --net=host ● docker 0.9から使用可能 ● 仮想ブリッジ(vethXXXXやdocker0)を経由しな いでコンテナ立ち上げ ● コンテナのIP = ホストOSのIP
  • 22. $ ip a 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 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:f0:eb:dd brd ff:ff:ff:ff:ff:ff inet 10.240.235.221/32 brd 10.240.235.221 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever
  • 23. $ sudo docker run --net=host base ip a 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP qlen 1000 link/ether 42:01:0a:f0:eb:dd brd ff:ff:ff:ff:ff:ff inet 10.240.235.221/32 brd 10.240.235.221 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1460 qdisc noqueue state DOWN link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever
  • 24. Host Docker node1 node2 refs: http://mogproject.blogspot.jp/2014/03/docker-how-networking-of-mac.html eth0 10.240.99.45
  • 25. ホストネットワークで実行 ● 良い: ○ docker run -pでポート開放も、コンテナのIPを調べる必 要もなくなって便利 ○ 仮想ブリッジもiptablesを通さないので速い
  • 26. ホストネットワークで実行 ● 悪い: ○ ポートが被らないようにしないといけない ○ 安全性が犠牲になるため、本番環境での運用は完全に 別ネットワークにしないといけない
  • 27. ● image by openvswitch: http://openvswitch.org/
  • 28. Open vSwitch ● オープンソースの仮想スイッチ ● 柔軟なネットワークが可能になる ○ 転送機能: Bridge, VLAN, STP, LACP, GRE, GRE over IPsec, CAPWAP ○ 管理機能: NetFlow, sFlow ○ 制御機能: OpenFlow 1.0,1.1,1.2 ● sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath- sourcerefs: http://www.slideshare.net/kotto_hihihi/openv-switch
  • 29. Docker + Open vSwitch ● Dockerデーモンのオプションに-b=noneを指定する ● 全てのコンテナをdocker0ブリッジを経由する ● docker0ブリッジはOpen vSwitchから作られたbr0ブリッジ に接続される ● GRE Tunnelで異なるホスト間のブリッジを接続し、バーチャ ルなネットワーク空間172.16.42.2/24を構築する ● refs: http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/
  • 30. Open vSwitch Open vSwitch Docker eth0 172.16.4 2.21 eth0 docker0 172.16.4 2.14 eth0 refs: http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/ Docker eth0 172.16.4 2.13 eth0 docker0 172.16.4 2.15 eth0 host2host1 br0 gre0 br0gre0 GRE tunnel
  • 31. Docker + Open vSwitch ● 良い点: ○ 安全。ポータビリティも保ちつつ多数のホストに展開でき る ● 悪い点: ○ IPが被ってしまうおそれがあるため、goldmann/docker- dhcp などの、DHCPを使う refs: http://d.hatena.ne.jp/xlis/20130317/1363507787
  • 32. ロックインを避けつつスケール ●
  • 33. ロックインを避けつつスケール ● オープンソースのオーケストレーションツールを 使おう ○ SerfやConsul ○ etcd+fleet ● メンバー追加イベント発行されたら、そのIPを SkyDNSやHAProxyに登録するだけ
  • 34. まとめ ●
  • 35. まとめ ● Dockerは特別なことしてないよ ○ Dockerのネットワークを隔離してホストネットワークで動 かせばかなり速くなるよ ● Docker時代に合わせてネットワークも柔軟にし てみよう ○ もちろん、インフラがコードになっていることを前提で。開 発環境ではfigを使おう
  • 36. まとめ ● 結局プロヴィジョン環境と環境変数の共有が重 要。 ● コンテナIPの解決はSerfやConsulに任せよう ● 複雑になりすぎないように注意
  • 37. 時間が余ったらデモ ● 4つのコンテナをfigで作り、Serfで繋ぐ ● git clone https://github.com/mainyaa/fig- example-4-container ● https://github.com/centurylinklabs/fig2coreos
  • 38. 時間が余ったらデモ ● Docker + Open vSwitch

×