1.介紹
Docker container網絡模式是指指定新創建的Docker容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。
使用Docker container網絡模式新建的容器不會創建的自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口等。然而兩個容器除了網絡方面,其它的如文件系統、進程信息等還是彼此獨立的。
2.原理
3.樣例
-->新建一個Docker容器
命令:
docker run -itd --name alpine1 alpine:latest /bin/sh
[root@centos79 ~]# docker run -itd --name alpine1 alpine:latest /bin/sh
5ff376a66567842eec668724e38c7866c520e3bfad8b00cded061bfbade14969
[root@centos79 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ff376a66567 alpine:latest "/bin/sh" 37 seconds ago Up 36 seconds alpine1
[root@centos79 ~]#
-->基於Docker apline1容器,使用Docker container網絡模式,再創建一個Docker容器
命令:
docker run -itd --network container:alpine1 --name alpine2 alpine:latest /bin/sh
[root@centos79 ~]# docker run -itd --network container:alpine1 --name alpine2 alpine:latest /bin/sh
b0590126bc3cd8d4f49e05cd2f07c0efb1846a5478c986994fd796feab3ccc95
[root@centos79 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0590126bc3c alpine:latest "/bin/sh" 8 seconds ago Up 7 seconds alpine2
5ff376a66567 alpine:latest "/bin/sh" 3 minutes ago Up 3 minutes alpine1
[root@centos79 ~]#
-->查看alpine1/2容器的IP地址
alpine1:
[root@centos79 ~]# docker exec -it alpine1 /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
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
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ #
alpine2:
[root@centos79 ~]# docker exec -it alpine2 /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
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
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ #
可以看出兩個容器共用一個網絡和IP地址
-->停止alpine1容器網絡,查看alpine2容器網絡
[root@centos79 ~]# docker stop alpine1
alpine1
[root@centos79 ~]# docker exec -it alpine1 /bin/sh
Error response from daemon: Container 5ff376a66567842eec668724e38c7866c520e3bfad8b00cded061bfbade14969 is not running
[root@centos79 ~]# docker exec -it alpine2 /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
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
/ #
由於Docker alpine1容器停止,網絡關係也就隨即彼此解除,alpine2容器的網絡也就斷開。
-->啓動alpine1容器網絡,查看alpine2容器網絡
[root@centos79 ~]# docker start alpine1
alpine1
[root@centos79 ~]# docker exec -it alpine1 /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
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
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # exit
[root@centos79 ~]# docker exec -it alpine2 /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
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
/ # exit
[root@centos79 ~]# docker stop alpine2
alpine2
[root@centos79 ~]# docker start alpine2
alpine2
[root@centos79 ~]# docker exec -it alpine2 /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
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
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ #
當Docker alpine1容器啓動,alpine2容器需要重啓,alpine2容器和alpine2容器的網絡關係才能建立。