实例讲解 Docker 自定义网络

Docker 自定义网络实战

这里我们通过一个实际案例,演示如何创建 Docker 自定义网络,让多个容器在同一网络中通信。

1. 需求分析

我们要搭建一个包含 Nginx(Web 服务器)Alpine(测试工具) 的小型网络环境,实现:

  1. nginx 作为 Web 服务器运行。
  2. alpine 作为测试容器,能够访问 nginx
  3. 使用自定义网络,让容器通过名称而不是 IP 地址通信。

2. 创建自定义网络

首先,创建一个 自定义桥接网络

1
docker network create my_bridge_network

🔹 docker network ls 查看网络:

1
docker network ls

你会看到类似输出:

1
2
3
4
5
6
NETWORK ID     NAME                DRIVER    SCOPE
0ef2a1336002 bridge bridge local
b85d4bee2b71 host host local
1f0b89155059 my_bridge_network bridge local
8632a9a59d62 none null local

✅ 说明 my_bridge_network 已成功创建。

3. 运行 Nginx 容器

1
docker run -d --name my_nginx --network my_bridge_network nginx

🔹 解释:

  • -d:后台运行。
  • --name my_nginx:容器名称 my_nginx
  • --network my_bridge_network:加入 my_bridge_network 网络。
  • nginx:使用 Nginx 官方镜像。

4. 运行 Alpine 测试容器

1
docker run -it --name my_alpine --network my_bridge_network alpine sh

🔹 解释:

  • -it:交互模式,进入 sh 终端。
  • --name my_alpine:容器名称 my_alpine
  • --network my_bridge_network:加入 my_bridge_network 网络。
  • alpine sh:使用 alpine 镜像并进入 sh 终端。

5. 容器之间的通信

my_alpine 容器的终端中,执行:

1
wget -qO- http://my_nginx

如果成功,你会看到 Nginx 默认的 HTML 页面内容。

6. 通过 Ping 测试网络

仍然在 my_alpine 容器的终端中:

1
ping my_nginx

你应该能看到类似:

1
2
3
4
5
PING my_nginx (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.495 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.084 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.114 ms

✅ 说明 my_alpine 成功解析 my_nginx 并与其通信!

7. 查看网络详情

1
docker network inspect my_bridge_network

你会看到 Containers 列表,显示 my_nginxmy_alpine 都已连接到该网络。

8. 断开和删除网络

断开某个容器的网络

1
docker network disconnect my_bridge_network my_alpine

删除网络(必须先停止所有容器)

1
2
3
docker stop my_nginx my_alpine
docker rm my_nginx my_alpine
docker network rm my_bridge_network

总结

步骤 命令
创建自定义网络 docker network create my_bridge_network
运行 Nginx 容器 docker run -d --name my_nginx --network my_bridge_network nginx
运行 Alpine 测试容器 docker run -it --name my_alpine --network my_bridge_network alpine sh
在 Alpine 容器中测试 wget -qO- http://my_nginx
Ping 其他容器 ping my_nginx
查看网络详情 docker network inspect my_bridge_network
断开容器与网络 docker network disconnect my_bridge_network my_alpine
删除网络 docker network rm my_bridge_network

这样,我们就完成了一个 Docker 自定义网络 的完整实战!🚀