设为首页 收藏本站
查看: 946|回复: 0

[经验分享] Docker 网络命令

[复制链接]

尚未签到

发表于 2017-12-6 12:32:52 | 显示全部楼层 |阅读模式

  • docker network create
  • docker network connect
  • docker network ls
  • docker network rm
  • docker network disconnect
  • docker network inspect




创建网络






zane@zane-V:~$ docker network create simple-network
8bf58f43c56622d1100f7da9ef6506e45a4aa68556b586311f3756130c311d75
zane@zane-V:~$ docker network inspect simple-network
[
{
"Name": "simple-network",
"Id": "8bf58f43c56622d1100f7da9ef6506e45a4aa68556b586311f3756130c311d75",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1/16"
}
]
},
"Internal": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]

不像bridge网络,直接可以创建。创建overlay网络需要一些条件,比如:

  • 进入一个键值存储。引擎支持Consul,Etcd,ZooKeeper.
  • 与键值存储连接的主机集群。
  • 在群集中的每个主机上正确配置的deamon引擎




支持overlay网络的docker选项:

  • --cluster-store
  • --cluster-store-opt
  • --cluster-advertise




使用--subnet选项直接指定子网络,在bridge网络中只可以指定一个子网络,而在overlay网络中支持多个子网络。

除了--subnet,还可以指定:--gateway,--ip-range,--aux-address选项。




$ docker network create -d overlay \
--subnet=192.168.0.0/16 \
--subnet=192.170.0.0/16 \
--gateway=192.168.0.100 \
--gateway=192.170.0.100 \
--ip-range=192.168.1.0/24 \
--aux-address="my-router=192.168.1.5"
--aux-address="my-switch=192.168.1.6" \
--aux-address="my-printer=192.170.1.5"
--aux-address="my-nas=192.170.1.6" \
my-multihost-network


如何要创建自己定制的网络,docker也是支持很多选项的。

可以指定网络的端口号:




$ docker run -d -P --name redis --network my-network redis
bafb0c808c53104b2c90346f284bda33a69beadcab4fc83ab8f2c5a4410cd129

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bafb0c808c53 redis "/entrypoint.sh redis" 4 seconds ago Up 3 seconds 172.23.0.1:32770->6379/tcp redis


连接容器



可以连接已存在的容器到一个或者多个网络中。一个容器可以连接到多个不同网络驱动的网络中。

当连接一旦建立,容器便可以可其他的容器通讯,通过IP 或者 容器名称。



基本容器网络实例:

1.创建两个容器,container1 和 container2






$ docker run -itd --name=container1 busybox
18c062ef45ac0c026ee48a83afa39d25635ee5f02b58de4abc8f467bcaa28731

$ docker run -itd --name=container2 busybox
498eaaaf328e1018042c04b2de04036fc04719a6e39a097a4f4866043a2c2152

2.创建一个隔离,bridge网络来测试




zane@zane-V:~$ docker network create -d bridge --subnet 172.25.0.0/16 isolated_nw
a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b



3.连接container2到这个网络,然后验证一下:








zane@zane-V:~$ docker network connect isolated_nw container2

zane@zane-V:~$ docker network inspect isolated_nw
[
{
"Name": "isolated_nw",
"Id": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.25.0.0/16"
}
]
},
"Internal": false,
"Containers": {
"e9bce535ae32945f5e43340facdb6c16c93d92119e85b61c6cb7a5379a0caf63": {
"Name": "container2",
"EndpointID": "ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f",
"MacAddress": "02:42:ac:19:00:02",
"IPv4Address": "172.25.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]


注意container2,自动分配到了IP地址。此时container1,仍然连接在默认的bridge网络。



4.启动第三个container,但是这是使用--ip 选项指定它的IP地址,




zane@zane-V:~$ docker run --network=isolated_nw --ip=172.25.3.3 -itd --name=container3 busybox
adf68dd9e09c101e507e2106901d25270f71375f07ac7f61db21707c27075c0d



5.检查container3使用的是哪个网络:






"Networks": {
"isolated_nw": {
"IPAMConfig": {
"IPv4Address": "172.25.3.3"
},
"Links": null,
"Aliases": [
"adf68dd9e09c"
],
"NetworkID": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b",
"EndpointID": "71d5d272d056b6111a83f0843a10d1944f1648f34d5099258d5865d053a939b0",
"Gateway": "172.25.0.1",
"IPAddress": "172.25.3.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:19:03:03"
}
}
}


6.检查container2使用的是哪个网络:




"Networks": {
"isolated_nw": {
"Aliases": [
"e9bce535ae32"
],
"EndpointID": "ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f",
"Gateway": "172.25.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAMConfig": {},
"IPAddress": "172.25.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"Links": null,
"MacAddress": "02:42:ac:19:00:02",
"NetworkID": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b"
}
},




注意:container2 在两个网络中间,它加入了默认bridge网络,当你在创建它的时候,然后又连接它到了isolation_nw.



一个容器可以连接到多个网络中

DSC0000.png





7.使用docker attach 命令连接一个正在运行的容器,然后查看








zane@zane-V:~$ docker attach container2
/ # ifconfig -a
eth1      Link encap:Ethernet  HWaddr 02:42:AC:19: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:86 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:11780 (11.5 KiB)  TX bytes:648 (648.0 B)

eth2      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:1500  Metric:1
RX packets:23 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:3809 (3.7 KiB)  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.可以通过容器名称来相互连接




/ # 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.077 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.049 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.047 ms
64 bytes from 172.25.3.3: seq=3 ttl=64 time=0.054 ms


但是注意:默认bridge网络中是不支持容器名称通信的:

虽然container1 和 container2 都在bridge网络中,但是他们是不支持 容器名称通信的。

但是肯定支持IP地址通信。






zane@zane-V:~$ docker attach container2
/ # ping container3
PING container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.042 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.050 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.063 ms
^C
--- container3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.042/0.051/0.063 ms

/ # ping -w 4 container1
ping: bad address 'container1'

/ # 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.104 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.052 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.127 ms
64 bytes from 172.17.0.2: seq=3 ttl=64 time=0.057 ms

--- 172.17.0.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.052/0.085/0.127 ms

注意退出attach 时,使用ctr-p + ctr-q.

如果使用ctr-d 则会stop container.



9.此时container3是不能通过ip地址和container1通信的。






zane@zane-V:~$ docker attach container3
/ # ping -w 4 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes

--- 172.17.0.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss


链接容器而不使用用户定义的网络



上面的实验我们知道,用户自定义的网络,是可以相互解析容器名的,也就是可以用容器名来相互同行。

而默认网络中是不可以的。那如果想让默认网络中,也可以使用容器名进行通信呢?



使用link的特性。这是唯一推荐使用link的场景。应该使用自定义的网络来替代它的。



在默认网络中使用link增加了一下特性:

  • 解析容器名到IP地址
  • 定义网络别名

    • --link=CONTAINER-NAME:ALIAS


  • 增强网络连接的安全性
  • 环境变量注入




断开容器连接



1.断开container2和isolated_nw的连接,然后




zane@zane-V:~$ docker network disconnect isolated_nw container2




2.删除网络




zane@zane-V:~$ docker network rm simple-network
simple-network




总结





  • 创建网络

    • docker network create simple-network
    • overlay网络条件

      • 进入一个键值存储
      • 与键值存储连接的主机集群
      • 在集群中每个主机上正确配置deamon引擎


    • 支持overlay网络的docker选项

      • --cluser-store
      • --cluster-store-opt
      • --cluster-advertise


    • 指定子网络,网关,地址范围


  • 将容器添加到网络中

    • docker network connect isolated_nw container2
    • 一个容器可以连接到多个网络中


  • 连接一个正在运行的容器

    • docker attach
    • attach 的退出

      • ctr p + ctr q




  • 默认bridge网络不支持,容器名称通信,其他网络支持;

    • 使用link 来支持默认网络的容器名称通信


  • 断开连接

    • docker network disconnect isolated_nw container2


  • 删除网络

    • docker network rm simple-network






  • 检测网络

    • docker network inspect isolated_nw



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421284-1-1.html 上篇帖子: centos中docker mongodb 配置 下篇帖子: docker三剑客之docker compose
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表