1. 高级网络配置
1.1 说明
- 当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
- 同时,Docker 随机分配一个本地未占用的私有网段(在RFC1918中定义)中的一个地址给 docker0 接口。比如典型的172.17.42.1,掩码为255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
- 当创建一个 Docker 容器的时候,同时会创建了一对veth pair接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即eth0;另一端在本地并被挂载到docker0网桥,名称以veth开头(例如vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
1.2 查看网络信息
# docker network ls
1.3 创建一个网桥
# docker network create -d bridge 网桥名称
1.4 删除一个网桥
# docker network rm 网桥名称
1.5 容器之前使用网络通信
# 1. 查看当前网络配置
- docker network ls
[root@yongz ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
2f2a3163a85d bridge bridge local
e1ce532103d6 heartbleed_default bridge local
8651b581442c host host local
6c87ffeaa59d none null local
de8a76b26c51 ssti_default bridge local
# 2. 创建桥接网络
- docker network create -d bridge info
[root@yongz ~]# docker network create -d bridge info
cef6d5e292df7dc583d0797e346d880d2500fb8069344d7dfcafb9cd973c91c4
[root@yongz ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
2f2a3163a85d bridge bridge local
e1ce532103d6 heartbleed_default bridge local
8651b581442c host host local
cef6d5e292df info bridge local
6c87ffeaa59d none null local
de8a76b26c51 ssti_default bridge local
# 3. 启动容器指定使用网桥
- docker run -d -p 8890:80 --name nginx001 --network info nginx
- docker run -d -p 8891:80 --name nginx002 --network info nginx
# 注意:一旦指定网桥后 --name 指定名字就是主机名,多个容器指定在同一个网桥时,可以在任意一个容器中使用主机名与容器进行互通
[root@yongz ~]# docker run -d -p 80:80 --name nginx001 --network info nginx
aa13765019b58dd5facad5b421783bed27a97662b3a0e9cd800191e91a3f7a68
[root@yongz ~]# docker run -d -p 8080:80 --name nginx002 --network info nginx
4105a92501d7afea2543d074c5940c940728b48d35482873d48c16ddddab0435
[root@yongz ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4105a92501d7 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp nginx002
aa13765019b5 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx001