Docker使用网络命令,创建自己的网络
2017-08-15 12:27
597 查看
Docker官方推荐用户使用自己的自定义网络,所以在使用容器的时候最好使用自定义的网络,默认docker使用自带的bridge网络,bridge网络下的docker容器相互之间无法解析彼此的容器名称。如果您需要容器能够通过 bridge 网络进行通信,则官方允许使用旧版本的--link,这
好了,开始讨论Docker的基本网络配置(没有使用overlay网络):
1.首先,创建并运行两个容器,
2.创建一个孤立的
3.连接
<
4000
/span>
注意
提醒一下,
4.启动第三个容器,但这次使用该
只要您为容器指定的IP地址是网络子网的一部分,可以通过使用
5.检查所使用的网络资源
因为连接
6.检查所使用的网络资源
注意
eth0 Link encap:以太网HWaddr 02:42:AC:11:00:03
eth1 Link encap:以太网HWaddr 02:42:AC:15:00:02
7.使用
使用该
8.
Docker嵌入式DNS服务器可以连接到给定网络的容器进行名称解析。这意味着任何连接的容器都可以通过其容器名称在同一网络上ping另一个容器。从里面
此功能不适用于默认
您仍然可以直接ping IP地址:
从分离
9.
目前,
从分离
即使容器未运行,也可以将容器连接到网络。但是,
以上为Docker基本网络的信息,但是如果您确实要使用默认的bridge网络,请看下面使用--link选项如何使用。
使用旧
将容器名称解析为IP地址的能力
将网络别名定义为引用链接容器的替代方法的能力,使用
安全的集装箱连接(隔离通过
环境变量注入
要重申,当您使用用户定义的网络时,默认情况下提供所有这些功能,不需要其他配置。此外,您可以自动附加到多个网络并从多个网络中分离。
使用DNS进行自动名称解析
支持
网络中容器的自动安全隔离环境
环境变量注入
以下示例简要介绍如何使用
1.继续上面的例子,创建一个新的容器
这有点棘手,因为
注意:使用传统链接创建的容器之间的任何链接本质上都是静态的,并且通过别名强制绑定容器。它不容忍链接的容器重新启动。用户定义的网络中的新链接功能支持容器之间的动态链接,并允许链接的容器中的重新启动和IP地址更改。
由于您尚未创建容器
离开container4运行
2.创建另一个名为的容器
现在附加
退出container4运行
3.最后,附上
--link是建议使用的唯一用例。最后,官方强烈地考虑使用用户定义的网络。
好了,开始讨论Docker的基本网络配置(没有使用overlay网络):
1.首先,创建并运行两个容器,
container1和
container2:
$ docker run -itd --name=container1 busybox 18c062ef45ac0c026ee48a83afa39d25635ee5f02b58de4abc8f467bcaa28731 $ docker run -itd --name=container2 busybox 498eaaaf328e1018042c04b2de04036fc04719a6e39a097a4f4866043a2c2152
2.创建一个孤立的
bridge网络来测试(即:自定义网络)。
$ docker network create -d bridge --subnet 172.25.0.0/16 isolated_nw 06a62f1c73c4e3107c0f555b7a5f163309827bfbbf999840166065a8f35455a8
3.连接
container2到网络,然后
inspect网络验证连接:
<
4000
/span>
$ docker network connect isolated_nw container2 $ docker network inspect isolated_nw [ { "Name": "isolated_nw", "Id": "06a62f1c73c4e3107c0f555b7a5f163309827bfbbf999840166065a8f35455a8", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.25.0.0/16", "Gateway": "172.25.0.1/16" } ] }, "Containers": { "90e1f3ec71caf82ae776a827e0712a68a110a3f175954e5bd4222fd142ac9428": { "Name": "container2", "EndpointID": "11cedac1810e864d6b1589d92da12af66203879ab89f4ccd8c8fdaa9b1c48b1d", "MacAddress": "02:42:ac:19:00:02", "IPv4Address": "172.25.0.2/16", "IPv6Address": "" } }, "Options": {} } ]
注意
container2自动分配了一个IP地址。由于您
--subnet在创建网络时指定了IP地址,因此从该子网中选择了IP地址。
提醒一下,
container1只能连接到默认
bridge网络。
4.启动第三个容器,但这次使用该
--ip标志为其分配IP地址, 并
isolated_nw使用
docker run命令的
--network选项将其连接到网络:
$ docker run --network=isolated_nw --ip=172.25.3.3 -itd --name=container3 busybox 467a7863c3f0277ef8e661b38427737f28099b61fa55622d6c30fb288d88c551
只要您为容器指定的IP地址是网络子网的一部分,可以通过使用
--ip或
--ip6标志将IPv4或IPv6地址连接到网络时将容器分配到容器。当您在使用用户定义的网络时以此方式指定IP地址时,配置将作为容器配置的一部分进行保留,并在容器重新加载时进行应用。使用非用户定义的网络时,分配的IP地址将被保留,因为不保证Docker守护程序重新启动时容器的子网不会更改,除非您使用用户定义的网络。
5.检查所使用的网络资源
container3。为简洁起见,截断以下输出。
$ docker inspect --format='' container3 {"isolated_nw": {"IPAMConfig": { "IPv4Address":"172.25.3.3"}, "NetworkID":"1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b", "EndpointID":"dffc7ec2915af58cc827d995e6ebdc897342be0420123277103c40ae35579103", "Gateway":"172.25.0.1", "IPAddress":"172.25.3.3", "IPPrefixLen":16, "IPv6Gateway":"", "GlobalIPv6Address":"", "GlobalIPv6PrefixLen":0, "MacAddress":"02:42:ac:19:03:03"} } } }
因为连接
container3到
isolated_nw您启动时,它根本没有连接到默认
bridge网络。
6.检查所使用的网络资源
container2。如果你安装了Python,你可以打印输出。
$ docker inspect --format='' container2 | python -m json.tool { "bridge": { "NetworkID":"7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", "EndpointID": "0099f9efb5a3727f6a554f176b1e96fca34cae773da68b3b6a26d046c12cb365", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAMConfig": null, "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:03" }, "isolated_nw": { "NetworkID":"1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b", "EndpointID": "11cedac1810e864d6b1589d92da12af66203879ab89f4ccd8c8fdaa9b1c48b1d", "Gateway": "172.25.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAMConfig": null, "IPAddress": "172.25.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:19:00:02" } }
注意
container2属于两个网络。
bridge当您启动它时,它加入了默认网络,并将其连接到
isolated_nw。
eth0 Link encap:以太网HWaddr 02:42:AC:11:00:03
eth1 Link encap:以太网HWaddr 02:42:AC:15:00:02
7.使用
docker attach命令连接到运行
container2并检查其网络堆栈:
$ docker attach container2
使用该
ifconfig命令检查容器的网络堆栈。您应该看到两个以太网接口,一个用于默认
bridge网络,另一个用于
isolated_nw网络。
$ sudo ifconfig -a eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03 inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 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) eth1 Link encap:Ethernet HWaddr 02:42:AC:15:00:02 inet addr:172.25.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe19:2/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) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
8.
Docker嵌入式DNS服务器可以连接到给定网络的容器进行名称解析。这意味着任何连接的容器都可以通过其容器名称在同一网络上ping另一个容器。从里面
container2,你可以
container3按名字ping 。
/ # ping -w 4 container3 PING container3 (172.25.3.3): 56 data bytes 64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.070 ms 64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.080 ms 64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.080 ms 64 bytes from 172.25.3.3: seq=3 ttl=64 time=0.097 ms --- container3 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.070/0.081/0.097 ms
此功能不适用于默认
bridge网络。双方
container1并
container2连接到
bridge网络,但你不能ping
container1从
container2使用的容器名称。
/ # ping -w 4 container1 ping: bad address 'container1'
您仍然可以直接ping IP地址:
/ # ping -w 4 172.17.0.2 PING 172.17.0.2 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.095 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.075 ms 64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.072 ms 64 bytes from 172.17.0.2: seq=3 ttl=64 time=0.101 ms --- 172.17.0.2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.072/0.085/0.101 ms
从分离
container2,离开它使用运行
CTRL-p CTRL-q。
9.
目前,
container2连接到这两个
bridge和
isolated_nw网络,因此它可以与两个通讯
container1和
container3。然而,
container3并
container1没有任何网络共同点,所以他们无法沟通。要验证这一点,请附加
container3并尝试
container1通过IP地址ping 。
$ docker attach container3 $ ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2): 56 data bytes ^C --- 172.17.0.2 ping statistics --- 10 packets transmitted, 0 packets received, 100% packet loss
从分离
container3,离开它使用运行
CTRL-p CTRL-q。
即使容器未运行,也可以将容器连接到网络。但是,
docker network inspect仅显示运行容器的信息。
以上为Docker基本网络的信息,但是如果您确实要使用默认的bridge网络,请看下面使用--link选项如何使用。
链接容器而不使用用户定义的网络
完成基本容器网络示例中的步骤后 ,container2可以
container3自动解析名称,因为这两个容器都连接到
isolated_nw网络。但是,连接到默认
bridge网络的容器无法解析彼此的容器名称。如果您需要容器能够通过
bridge网络进行通信,则需要使用旧版链接功能。这
--link是建议使用的唯一用例。您应该强烈地考虑使用用户定义的网络。
使用旧
link标志在默认
bridge网络上的通信之间添加以下功能进行通信:
将容器名称解析为IP地址的能力
将网络别名定义为引用链接容器的替代方法的能力,使用
--link=CONTAINER-NAME:ALIAS
安全的集装箱连接(隔离通过
--icc=false)
环境变量注入
要重申,当您使用用户定义的网络时,默认情况下提供所有这些功能,不需要其他配置。此外,您可以自动附加到多个网络并从多个网络中分离。
使用DNS进行自动名称解析
支持
--link为链接的容器提供名称别名的选项
网络中容器的自动安全隔离环境
环境变量注入
以下示例简要介绍如何使用
--link。
1.继续上面的例子,创建一个新的容器
container4并将其连接到网络
isolated_nw。另外,
container5使用
--link标志链接到容器 (container5不存在!)。
$ docker run --network=isolated_nw -itd --name=container4 --link container5:c5 busybox 01b5df970834b77a9eadbaff39051f237957bd35c4c56f11193e0594cfd5117c
这有点棘手,因为
container5还不存在。当
container5创建,
container4将能够解决的名字
c5到
container5的IP地址。
注意:使用传统链接创建的容器之间的任何链接本质上都是静态的,并且通过别名强制绑定容器。它不容忍链接的容器重新启动。用户定义的网络中的新链接功能支持容器之间的动态链接,并允许链接的容器中的重新启动和IP地址更改。
由于您尚未创建容器
container5尝试ping它将导致错误。附加
container4并尝试ping任一
container5或
c5:
$ docker attach container4 $ ping container5 ping: bad address 'container5' $ ping c5 ping: bad address 'c5'
离开container4运行
CTRL-p CTRL-q。
2.创建另一个名为的容器
container5,并将其链接到
container4使用别名
c4。
$ docker run --network=isolated_nw -itd --name=container5 --link container4:c4 busybox 72eccf2208336f31e9e33ba327734125af00d1e1d2657878e2ee8154fbb23c7a
现在附加
container4并尝试ping
c5和
container5。
$ docker attach container4 / # ping -w 4 c5 PING c5 (172.25.0.5): 56 data bytes 64 bytes from 172.25.0.5: seq=0 ttl=64 time=0.070 ms 64 bytes from 172.25.0.5: seq=1 ttl=64 time=0.080 ms 64 bytes from 172.25.0.5: seq=2 ttl=64 time=0.080 ms 64 bytes from 172.25.0.5: seq=3 ttl=64 time=0.097 ms --- c5 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.070/0.081/0.097 ms / # ping -w 4 container5 PING container5 (172.25.0.5): 56 data bytes 64 bytes from 172.25.0.5: seq=0 ttl=64 time=0.070 ms 64 bytes from 172.25.0.5: seq=1 ttl=64 time=0.080 ms 64 bytes from 172.25.0.5: seq=2 ttl=64 time=0.080 ms 64 bytes from 172.25.0.5: seq=3 ttl=64 time=0.097 ms --- container5 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.070/0.081/0.097 ms
退出container4运行
CTRL-p CTRL-q。
3.最后,附上
container5并验证你可以ping通
container4。
$ docker attach container5 / # ping -w 4 c4 PING c4 (172.25.0.4): 56 data bytes 64 bytes from 172.25.0.4: seq=0 ttl=64 time=0.065 ms 64 bytes from 172.25.0.4: seq=1 ttl=64 time=0.070 ms 64 bytes from 172.25.0.4: seq=2 ttl=64 time=0.067 ms 64 bytes from 172.25.0.4: seq=3 ttl=64 time=0.082 ms --- c4 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.065/0.070/0.082 ms / # ping -w 4 container4 PING container4 (172.25.0.4): 56 data bytes 64 bytes from 172.25.0.4: seq=0 ttl=64 time=0.065 ms 64 bytes from 172.25.0.4: seq=1 ttl=64 time=0.070 ms 64 bytes from 172.25.0.4: seq=2 ttl=64 time=0.067 ms 64 bytes from 172.25.0.4: seq=3 ttl=64 time=0.082 ms --- container4 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.065/0.070/0.082 ms
相关文章推荐
- 用DOS命令创建Maven项目时出错,原因是访问网络使用了代理
- 使用Dockerfile创建自己的镜像
- Docker网络管理机制实例解析+创建自己Docker网络
- docker学习笔记3—使用Dockerfile与docker build命令创建一个nginx服务器镜像,并使用浏览器进行访问
- 在WINDOWS2008 Server 中创建NFS服务器,使用LINUX的MOUNT命令去加载网络盘
- 使用别名创建自己的命令之---alias
- 自己学Docker:14.Docker使用实战:MySQL服务的创建
- 使用 docker 创建自己的镜像
- 使用glide和volley创建自己的网络图库
- 使用docker网络相关命令
- docker学习系列(二):使用Dockerfile创建自己的镜像
- Docker网络管理机制实例解析+创建自己Docker网络
- 使用Docker网络相关的命令管理容器
- 使用Win7自带的命令创建无线网络并共享给其他设备
- Docker入门实战(二)----使用Dockerfile创建自己的镜像
- Docker基本命令与使用 —— Docker容器的网络连接(四)
- Docker网络管理机制实例解析+创建自己Docker网络
- Docker - compose 使用连边命令创建 mysql+tomcat 并挂卷
- 14. 使用脚本创建Docker及配置网络
- 使用C#调用外部Ping命令获取网络连接情况