docker网络的创建
docker network create [options]
参数:-d:指定driver,如bridge
例子:docker network create -d bridge mybridge[root@localhost ~]# docker network create -d bridge mybridgea0bc67bd61e96496569fe5cb99cf3541a94fb5344ab78744d017ce68b08e56de[root@localhost ~]#[root@localhost ~]# docker network lsNETWORK ID NAME DRIVER SCOPEc4b678a93972 bridge bridge locald0763579887a host host locala0bc67bd61e9 mybridge bridge local6a03d63270a6 none null local[root@localhost ~]#[root@localhost ~]# docker network inspect a0b[{"Name": "mybridge","Id": "a0bc67bd61e96496569fe5cb99cf3541a94fb5344ab78744d017ce68b08e56de","Created": "2021-12-12T15:39:11.777904385+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}]
-
使用自定义bridge
创建container时使用
--network [network_name]来指定网络[root@localhost ~]# docker container run -d --name box3 --network mybridge busybox /bin/sh -c "while true; do sleep 3600; done"d4d224ad1847593352e11877e2264797129c3205d13aae42c227c50fea6b903a[root@localhost ~]#[root@localhost ~]# docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd4d224ad1847 busybox "/bin/sh -c 'while t…" 11 seconds ago Up 10 seconds box3a99bb30012ad busybox "/bin/sh -c 'while t…" 19 hours ago Up 19 hours box280c4a01d050e busybox "/bin/sh -c 'while t…" 19 hours ago Up 19 hours box1
使用
docker container inspect box3查看容器信息,发现网络使用的是自定义的bridge
使用
docker network inspect mybridge查看自定义的bridge信息,发现container下有box3
自定义网络提供类似DNS功能
使用
docker network connect bridge box3来使容器box3连接默认的bridge网络- 连接完成后
docker container inspect box3来查看box3的信息,发现box3同时连接了自定义的mybridge和默认的bridge
进入到容器中
docker container exec -it box3 sh查看ip信息ip a,也能查看到此容器连接了172.18.0.2/16以及172.17.0.4/16两个接口[root@localhost ~]# docker container exec -it box3 sh/ # ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever29: eth0@if30: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ffinet 172.18.0.2/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever31: eth1@if32: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ffinet 172.17.0.4/16 brd 172.17.255.255 scope global eth1valid_lft forever preferred_lft forever
使用
docker network inspect bridge也能查看到container中多了box3这个容器
关闭网络连接
docker network disconnect [network_name] [container_name]容器网络互通实验
- 创建第四个容器box4,网络连接至mybridge:
docker container run -d --name box4 --network mybridge busybox /bin/sh -c "while true; do sleep 3600; done" 查看box3和box4的网络连接
[root@localhost ~]# docker container exec -it box3 ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever29: eth0@if30: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ffinet 172.18.0.2/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever[root@localhost ~]#[root@localhost ~]# docker container exec -it box4 ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever33: eth0@if34: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ffinet 172.18.0.3/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever
在box3中使用box4的ip以及名字进行网络连接(ping)

Note 由此可见自定义的mybridge提供了类似DNS的功能,可以通过容器名称查询其ip地址。但是默认的bridge不提供类似的DNS的功能。

docker network其他参数
[root@localhost ~]# docker network create --helpUsage: docker network create [OPTIONS] NETWORKCreate a networkOptions:--attachable Enable manual container attachment--aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])--config-from string The network from which to copy the configuration--config-only Create a configuration only network-d, --driver string Driver to manage the Network (default "bridge")--gateway strings IPv4 or IPv6 Gateway for the master subnet--ingress Create swarm routing-mesh network--internal Restrict external access to the network--ip-range strings Allocate container ip from a sub-range--ipam-driver string IP Address Management Driver (default "default")--ipam-opt map Set IPAM driver specific options (default map[])--ipv6 Enable IPv6 networking--label list Set metadata on a network-o, --opt map Set driver specific options (default map[])--scope string Control the network's scope--subnet strings Subnet in CIDR format that represents a network segment
- 指定网关和子网
docker network create -d bridge --gateway 172.200.0.1 --subnet 172.200.0.0/16 demo-bridge[root@localhost ~]# docker network create -d bridge --gateway 172.200.0.1 --subnet 172.200.0.0/16 demo-bridge18294d3e66dd7004ff956f8f1243ffcaf2d29940f3e024dfcd70c41814cc1b01[root@localhost ~]#[root@localhost ~]# docker network inspect demo-bridge[{"Name": "demo-bridge","Id": "18294d3e66dd7004ff956f8f1243ffcaf2d29940f3e024dfcd70c41814cc1b01","Created": "2021-12-12T16:19:44.154286168+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.200.0.0/16","Gateway": "172.200.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}]
