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 就创建了在主机和所有容器之间一个虚拟共享网络。

4. Docker Network - 图1

1.2 查看网络信息

  1. # docker network ls

1.3 创建一个网桥

  1. # 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