下面是针对“Docker 网络模式及配置方式”的详细攻略。
什么是 Docker 网络模式?
Docker 网络模式定义了容器如何互相连接,以及和外部网络交互的方式。包括以下常用的网络模式:
-
host网络模式: 使用宿主机的网络栈。容器与宿主机平级,直接使用宿主机IP地址。
-
bridge(默认)网络模式: 通过虚拟网桥(docker0)将容器桥接到宿主机上。它会为每一个容器创建一对 veth 接口,一个接口连着容器,另一个接口连到虚拟网桥上。
-
overlay 网络模式: 创建一个可以跨多台物理主机的虚拟网络。
-
macvlan 网络模式: 允许容器绑定到宿主机网卡上并直接使用宿主机MAC地址。
Docker 网络配置
创建自定义 bridge 网络
假设我们需要在一台主机上创建一个名为 mynetwork 的自定义网桥网络。可以使用以下命令:
docker network create -d bridge mynetwork
其中 -d bridge
指定了使用 bridge 网络模式。创建成功后可以通过以下命令查看网络配置情况:
docker network inspect mynetwork
可以看到输出信息中有一个"Containers"字段,里面是当前自定义网络中的所有容器。
连接容器到自定义网络
现在我们来创建两个容器并连接到 mynetwork:
docker run --name my-webapp1 --network mynetwork -d nginx
docker run --name my-webapp2 --network mynetwork -d nginx
上述命令中 --network
指定了将容器连接到 mynetwork 自定义网络。打开浏览器,尝试访问 http://容器1的IP
和 http://容器2的IP
,应该能够正常访问 nginx 默认欢迎页面。
容器之间互联
假设我们现在需要在 mynetwork 中建立两个容器之间的互联。其中一个容器是 web 应用,另一个容器是 MySQL 数据库。MySQL 容器应该监听在一个非 3306 端口上,我们需要将 MySQL 容器暴露出来的端口映射到宿主机上。
假设 MySQL 容器的 IP 是 172.18.0.3 (可以通过 docker inspect
命令查看),MySQL 容器的端口是 13306 ,那么我们可以通过以下命令连接到 web 容器:
docker run --name webapp --network mynetwork -p 8000:80 -e DB_HOST=172.18.0.3 -e DB_PORT=13306 -d my-webapp-image
上述命令中 -p 8000:80
指定了将 web 容器内部的 80 端口映射到宿主机的 8000 端口,这样就可以通过浏览器访问 web 服务了。
值得注意的是,mysql 容器的 13306 端口在 mynetwork 内部是可以直接访问的,而在 webapp 容器内则需要通过原本的 localhost:13306
(或者 127.0.0.1:13306
)来访问。
总结
本文讲解了 Docker 网络模式以及相关的配置方式,并通过示例说明了如何自定义 bridge 网络、将容器连接到自定义网络、以及如何处理容器之间的互联问题。了解了这些内容之后,我们就可以自如地运用 Docker 来构建各种不同的应用环境了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker 网络模式及配置方式 - Python技术站