(1)查看当前已经存在的docker网络
docker network list
如:
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
9741ca08001e bridge bridge local
405291d91242 host host local
c07d37e1f457 none null local
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]#
(2)创建192.168.0.0网段的自定义网络
如下,指定网段为192.168.0.0/24,网关为192.168.0.1,网络类型为bridge,网络名称为mynet
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
创建后再次查看当前docker网络
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
9741ca08001e bridge bridge local
405291d91242 host host local
5fea02b3963d mynet bridge local
c07d37e1f457 none null local
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]#
(3)查看具体docker网络的详细信息
如下为查看新创建的mynet网络的详细信息
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "5fea02b3963d7e7a8628f8c4e6e99d46db28442e6b0ea2a14962963ae1a94ed5",
"Created": "2021-10-30T20:01:53.186295499+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]#
(4)创建名为centos1的docker容器,并指定网络为mynet
docker run -it --name centos1 --net mynet centos
如下为创建后并进入,查看ip
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]# docker run -it --name centos1 --net mynet centos
[root@e98a944fec1e /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
217: eth0@if218: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.0.2/16 brd 192.168.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@e98a944fec1e /]#
(5)创建名为centos2的docker容器,使用网络mynet
docker run -it --name centos2 --net mynet centos
如下,创建容器后进入并查看网络
[root@iZbp1flzt6x7pxmxfhmxeeZ ~]# docker run -it --name centos2 --net mynet centos
[root@e4b7913e1581 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
219: eth0@if220: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.0.3/16 brd 192.168.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@e4b7913e1581 /]#
(6)在名为centos1的容器中ping名为centos2的容器名
如下,可以ping通
[root@e98a944fec1e /]# ping centos2 -c 3
PING centos2 (192.168.0.3) 56(84) bytes of data.
64 bytes from centos2.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from centos2.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.072 ms
64 bytes from centos2.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.069 ms
--- centos2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.049/0.063/0.072/0.012 ms
[root@e98a944fec1e /]#
(7)在名为centos2的容器中ping名为centos1的容器名
如下,同样可以ping通
[root@e4b7913e1581 /]# ping centos1 -c 3
PING centos1 (192.168.0.2) 56(84) bytes of data.
64 bytes from centos1.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from centos1.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.069 ms
64 bytes from centos1.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.063 ms
--- centos1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.038/0.056/0.069/0.016 ms
[root@e4b7913e1581 /]#
(8)自定义网络好处
- 可以自动支持容器名到容器ip的映射,即可以直接把容器名作为ip使用
- 可以为每个集群环境设置独立的网段,从而做到集群之间的隔离
- 可以自定义容器网络的网段