行业资讯

帮助中心 >  产品文档 >  云计算 >  从零开始学Docker系列 Docker 容器网络

在当今的容器化技术浪潮中,Docker 已成为应用部署的关键工具。而其中,Docker 网络的配置与运用,宛如搭建一座数字城市的交通脉络,直接决定了容器间以及容器与外部世界的互联互通。了解 Docker 网络,是解锁高效、灵活应用架构的密码。


一、 Docker 网络简介


Docker 提供了多种网络模式来满足不同的应用场景需求。通过配置网络,容器可以与主机、其他容器以及外部网络进行通信。理解 Docker 的网络模型和配置方法对于部署复杂的应用架构至关重要。

二、 Docker 默认网络类型

Docker 默认提供了几种网络模式:

2.1 bridge(桥接网络)

  • 描述:这是 Docker 的默认网络模式。每个容器都会连接到一个虚拟的网桥 docker0,并通过 NAT 访问外部网络。

  • 特点:容器之间可以通过 IP 地址互相通信,但默认情况下无法通过容器名称直接通信。

2.2 host(主机网络)

  • 描述:容器与主机共享网络命名空间,容器可以直接使用主机的网络接口。

  • 特点:容器不会获得独立的 IP 地址,而是直接使用主机的 IP 地址,适用于需要高网络性能的场景。

2.3 none(无网络)

  • 描述:禁用网络功能,容器没有任何网络接口。

  • 特点:适用于不需要网络访问的场景,如离线批处理任务。

2.4 overlay(覆盖网络)

  • 描述:用于跨主机的容器间通信,通常与 Docker Swarm 或 Kubernetes 集群一起使用。

  • 特点:支持多主机间的容器通信,适合分布式应用。

2.5 macvlan(MAC VLAN 网络)

  • 描述:为每个容器分配一个 MAC 地址,并将其作为独立设备接入物理网络。

  • 特点:适用于需要直接访问物理网络的场景。

三、 常用网络命令

3.1 查看网络

列出当前所有的 Docker 网络:


docker network ls

3.2 创建网络

创建一个新的自定义网络(例如 bridge 网络):


docker network create my_bridge_network

3.3 删除网络

删除一个指定的网络:


docker network rm my_bridge_network

3.4 连接容器到网络

将容器连接到指定的网络:


docker network connect my_bridge_network my_container

3.5 断开容器与网络的连接

断开容器与指定网络的连接:


docker network disconnect my_bridge_network my_container

3.6 查看网络详细信息

查看指定网络的详细信息:


docker network inspect my_bridge_network

四、 实践示例

为了更好地理解 Docker 网络的概念和操作,下面我们通过一些实际的例子来演示常见的网络配置。

示例 1:使用默认 bridge 网络

1 启动两个容器

启动两个 Nginx 容器并映射端口:


docker run -d --name web1 -p 8081:80 nginxdocker run -d --name web2 -p 8082:80 nginx

2 验证容器之间的通信

进入其中一个容器并尝试 ping 另一个容器:


docker exec -it web1 ping web2

注意:默认情况下,使用默认的 bridge 网络时,容器不能通过名称互相通信。你需要使用容器的 IP 地址或者创建自定义的 bridge 网络。

示例 2:创建自定义 bridge 网络

1 创建自定义 bridge 网络


docker network create my_custom_network

2 启动容器并连接到自定义网络


docker run -d --name web1 --network my_custom_network nginxdocker run -d --name web2 --network my_custom_network nginx

3 验证容器之间的通信

进入其中一个容器并尝试 ping 另一个容器:


docker exec -it web1 ping web2

使用自定义 bridge 网络时,容器可以通过名称互相通信。

示例 3:使用 host 网络

1 启动容器并使用 host 网络


docker run -d --name web_host --network host nginx

2 验证容器的网络配置

在主机上运行以下命令查看网络接口:


ip addr show

你会发现容器没有独立的网络接口,而是直接使用主机的网络接口。

示例 4:使用 macvlan 网络

1 创建 macvlan 网络

假设你的主机有一个物理网络接口 eth0,你可以创建一个 macvlan 网络:


docker network create -d macvlan \\\\  --subnet=192.168.1.0/24 \\\\  --gateway=192.168.1.1 \\\\  -o parent=eth0 \\\\  my_macvlan_network

2 启动容器并连接到 macvlan 网络


docker run -d --name my_macvlan_container --network my_macvlan_network nginx

3 验证容器的网络配置

进入容器并检查其网络接口:


docker exec -it my_macvlan_container ip addr show

五、 网络高级配置

5.1 DNS 配置

Docker 提供了一些选项来配置容器的 DNS 设置:

  • --dns:指定 DNS 服务器地址。

  • --hostname:设置容器的主机名。

  • --domainname:设置容器的域名。

示例:


docker run -d --name my_container --dns 8.8.8.8 --hostname mycontainer.example.com nginx

5.2 端口映射

使用 -p 或 --publish 选项将容器的端口映射到主机的端口:


docker run -d --name my_container -p 8080:80 nginx

5.3 端口范围映射

你还可以映射端口范围:


docker run -d --name my_container -p 8080-8085:80 nginx



通过对 Docker 网络的多方面探索,从网络类型的选择,到命令的熟练运用,再到高级配置的实践,我们能看到 Docker 网络在构建复杂应用架构时的强大支撑能力。它不仅提升了部署效率,更为现代分布式应用的发展铺平了道路。


想了解更多相关技术小分享可以上蓝队云官网查阅,更多技术问题,也可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: