六、自定义Docker网络#
6.1、docker中的网络#
查看docker所有的网络:
- briage:桥接网络(也是默认的网络)。通过Docker0作为网桥,实现容器联网互通
- host:和宿主机共享网络(使用同一块网卡)
- none:不配置网络,形成一个全封闭的容器,无法和外网连接
- container:让一个容器共享另一个容器网络相关的namespace,实现让几个容器内网络互通
6.2、自定义网络#
默认网络参数
# 启动容器时我们不添加网络相关启动参数,Docker会为我们补全成下面这样 # 而这里指定的 bridge 就是就是docker0 docker run -d -P --name xxx --net bridge imageId # --net 指定当前容器启动后加入到哪个网络中
自定义
# 创建自定义网络 # --subnet 192.168.0.0/16 指定了子网网络,可以分配2的16次方-2个ip # --gateway 192.168.0.1 网关路由器的ip地址 [root@VM-0-5-centos ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet a8a84221d4a73a2e2eda9f692c74af75cdbdac440e8c7587b56847c61e1dde4c # 查看是否创建成功了 [root@VM-0-5-centos ~]# docker network ls NETWORK ID NAME DRIVER SCOPE a9ff308438a8 bridge bridge local 0d98ae518a10 host host local a8a84221d4a7 mynet bridge local cb71d8cdbbca none null local
查看我们自定义的网络详情
查看宿主机网卡信息:可以看到宿主机上多出来了一张虚拟网卡
在自定义的网络中的容器是可以直接通过对方的 容器名 ping通的
七、网络连通#
如何让Docker中两个不同网络中的容器互通呢?
见上图,理论上容器1和容器2彼此互通,容器3容器4彼此互通,但是容器12和容器34之间时不互通的,因为他们都不在一个网段中。
具体的作为如下图:
容器2想ping通容器3或者容器4,本质上是需要将容器2加入到mynet 的网络中。
# 使用connect命令,把一个容器连接到一个网络上 # 查看帮助文档 [root@VM-0-5-centos ~]# docker network --help Usage: docker network COMMAND Manage networks Commands: connect Connect a container to a network create Create a network disconnect Disconnect a container from a network inspect Display detailed information on one or more networks ls List networks prune Remove all unused networks rm Remove one or more networks Run 'docker network COMMAND --help' for more information on a command. # 查看connect帮助文档的使用 [root@VM-0-5-centos ~]# docker network connect --help Usage: docker network connect [OPTIONS] NETWORK CONTAINER Connect a container to a network Options: --alias strings Add network-scoped alias for the container --driver-opt strings driver options for the network --ip string IPv4 address (e.g., 172.30.100.104) --ip6 string IPv6 address (e.g., 2001:db8::33) --link list Add link to another container --link-local-ip strings Add a link-local address for the container # 将指定容器添加到指定网络 [root@VM-0-5-centos ~]# docker network connect mynet tomcat1 # 检查是否添加成功 [root@VM-0-5-centos ~]# docker inspect mynet [ { "Name": "mynet", "Id": "a8a84221d4a73a2e2eda9f692c74af75cdbdac440e8c7587b56847c61e1dde4c", "Created": "2020-09-18T09:30:17.769656045+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": { "41976989fbea4138554e131d4067d4eb2bcfb3b6a2491be94af2fd5c64c64256": { "Name": "tomcat1", "EndpointID": "6894396881ffbbfe0fcf62da1ffcee304218120207f5b5a27f907bb2c306955b", "MacAddress": "02:42:c0:a8:00:02", "IPv4Address": "192.168.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]