?
This document uses PHP Chinese website manual Release
如果您正在按您的方式完成用戶指南,您只需構建并運行一個簡單的應用程序。你也建立了自己的形象。本節(jié)教您如何將容器聯網。
Docker通過使用網絡驅動程序默認情況下,Docker為您提供兩個網絡驅動程序,bridge
而overlay
司機。您還可以編寫一個網絡驅動程序插件,以便您可以創(chuàng)建自己的驅動程序,但這是一個高級任務。
Docker引擎的每個安裝都會自動包含三個默認網絡。你可以列出它們:
$ docker network ls NETWORK ID NAME DRIVER 18a2866682b8 none nullc288470c46f6 host host 7b369448dccb bridge bridge
名為bridge
是一個特殊的網絡。除非您另有說明,否則Docker總是在此網絡中啟動您的容器?,F在試試這個:
$ docker run -itd --name=networktest ubuntu 74695c9cea6d9810718fddadc01a727a5dd3ce6a69d09752239736c030599741
二次
二次
檢查網絡是查找容器IP地址的一種簡單方法。
$ docker network inspect bridge[ { "Name": "bridge", "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Containers": { "3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c": { "Name": "networktest", "EndpointID": "647c12443e91faf0fd508b6edfe59c30b642abb60dfab890b4bdccee38750bc1", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" }, "Labels": {} }]
您可以通過斷開容器從網絡中刪除容器。要做到這一點,您可以同時提供網絡名稱和容器名稱。還可以使用容器ID。但是,在這個例子中,名稱更快。
$ docker network disconnect bridge networktest
當您可以將容器從網絡斷開時,您不能刪除內置的bridge
網絡名bridge
.網絡是將集裝箱與其他集裝箱或其他網絡隔離開來的自然方式。因此,當您在Docker方面獲得更多經驗時,您將希望創(chuàng)建您自己的網絡。
Docker引擎本機支持橋接網絡和覆蓋網絡。橋網絡僅限于運行Docker引擎的單個主機。覆蓋網絡可以包括多個主機,是一個更高級的主題。對于本例,您將創(chuàng)建一個橋網絡:
$ docker network create -d bridge my_bridge
大-d
標志告訴Docker使用bridge
新網絡的驅動程序。你本可以把這面旗子bridge
此標志的默認值。繼續(xù)列出您機器上的網絡:
$ docker network ls NETWORK ID NAME DRIVER 7b369448dccb bridge bridge 615d565d498c my_bridge bridge 18a2866682b8 none nullc288470c46f6 host host
如果你檢查這個網絡,你會發(fā)現它里面什么都沒有。
$ docker network inspect my_bridge[ { "Name": "my_bridge", "Id": "5a8afc6364bccb199540e133e63adb76a557906dd9ff82b94183fc48c40857ac", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "10.0.0.0/24", "Gateway": "10.0.0.1" } ] }, "Containers": {}, "Options": {}, "Labels": {} }]
要構建協(xié)同工作但安全可靠的web應用程序,請創(chuàng)建一個網絡。根據定義,網絡為容器提供了完全的隔離。您可以在第一次運行容器時將容器添加到網絡中。
啟動運行PostgreSQL數據庫的容器,并將--net=my_bridge
標志將其連接到新網絡:
$ docker run -d --net=my_bridge --name db training/postgres
如果你檢查你的my_bridge
你會看到它有一個容器。還可以檢查容器的連接位置:
$ docker inspect --format='{{json .NetworkSettings.Networks}}' db{"my_bridge":{"NetworkID":"7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99","EndpointID":"508b170d56b2ac9e4ef86694b0a76a22dd3df1983404f7321da5649645bf7043","Gateway":"10.0.0.1","IPAddress":"10.0.0.254","IPPrefixLen":24,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}
現在,繼續(xù)并啟動您現在熟悉的web應用程序。這次不要指定網絡。
$ docker run -d --name web training/webapp python app.py
二次
二次
哪個網絡是你的web
應用程序運行在?檢查應用程序,您會發(fā)現它在默認情況下運行bridge
網絡。
$ docker inspect --format='{{json .NetworkSettings.Networks}}' web{"bridge":{"NetworkID":"7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812","EndpointID":"508b170d56b2ac9e4ef86694b0a76a22dd3df1983404f7321da5649645bf7043","Gateway":"172.17.0.1","IPAddress":"10.0.0.2","IPPrefixLen":24,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}
然后,獲取您的ip地址web
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web172.17.0.2
現在,打開一個運行的shell。db
集裝箱:
$ docker exec -it db bash root@a205f0dd33b2:/# ping 172.17.0.2ping 172.17.0.2PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.^C--- 172.17.0.2 ping statistics ---44 packets transmitted, 0 received, 100% packet loss, time 43185ms
過了一會兒,用CTRL-C
結束ping
你會發(fā)現ping失敗了。這是因為這兩個容器在不同的網絡上運行。你能修好的。然后,使用exit
命令關閉容器。
Docker網絡允許您將容器附加到任意數量的網絡上。您還可以附加一個已經在運行的容器。去吧,把你的跑步web
應用程序到my_bridge
...
$ docker network connect my_bridge web
二次
二次
打開一個外殼到db
再次應用程序并嘗試ping命令。這一次只需使用容器名。web
而不是IP地址。
$ docker exec -it db bash root@a205f0dd33b2:/# ping web PING web (10.0.0.2) 56(84) bytes of data.64 bytes from web (10.0.0.2): icmp_seq=1 ttl=64 time=0.095 ms64 bytes from web (10.0.0.2): icmp_seq=2 ttl=64 time=0.060 ms64 bytes from web (10.0.0.2): icmp_seq=3 ttl=64 time=0.066 ms^C--- web ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.060/0.073/0.095/0.018 ms
大ping
顯示它正在聯系一個不同的IP地址,該地址位于my_bridge
的地址不同。bridge
網絡。
現在您已經知道了如何對容器進行網絡連接,請參見如何管理容器中的數據...