对于 Docker 新手来说,学习 Docker 的网络模式可能是一个难点。Docker 的网络模式是完全独立于主机网络的,其网络架构是高级应用程序的基础,也是容器之间通信的基础。本文将详细介绍 Docker 网络的基础知识、细节和配置方法。
Docker 网络模式
创建网络
Docker 网络分为默认网络和自定义网络,其中默认网络是 Docker 安装后自动创建的,Docker 对于每个容器都分配了一个 IP 地址。默认网络不支持容器之间的互相通信,因此一般使用自定义网络。
创建自定义网络的命令如下:
docker network create my_network
其中,my_network 是网络的名称。
网络细节
Docker 网络的设计允许容器之间直接通信,同一网络内的容器可以通过容器名称或 IP 地址相互访问。所有容器都可以加入同一个网络,只要它们在同一个 Docker 守护进程下。
Docker 的默认网络是 bridge(网桥)模式,可以创建其他类型的网络。其他网络类型包括 host(主机模式)和 null(空模式)模式。
bridge 模式
在桥接模式下,容器之间共享主机网络的 IP 地址。每个容器被分配一个网桥 IP 地址,这个地址的网段是 172.17.0.0/16
。容器之间的连接更像是连接到同一个子网。
host 模式
在主机模式下,容器和主机共享同一个网络命名空间。这意味着容器使用主机网络,没有自己的网络栈,也没有独立的 IP 地址。这种模式主要用于需要最大网络性能和最小网络延迟的应用程序。
null 模式
在 null 模式下,容器没有任何网络连接。这种模式只有在特殊情况下才使用。
Docker 网络配置
连接容器
Docker 的 run
命令有一个 --network
选项,可以将容器连接到指定的网络上。例如,在 my_network 网络中运行一个容器的命令如下:
docker run --name container_name --network my_network -d image_name
容器间通信
容器之间的通信是 Docker 网络中最基本的操作之一。如果两个容器在同一个网络中,它们可以通过容器名称或 IP 地址互相访问。
Docker 容器的名称可以在运行容器时使用 --name
选项指定,也可以在创建容器时由 Docker 自动生成。如果需要在同一个网络中连接一个容器,可以使用命令:
docker connect container_name network_name
其中,container_name
是要添加到网络中的容器名称,而network_name
是要添加到的网络名称。
暴露端口
默认情况下,Docker 容器相互之间是无法访问的。如果要将服务发布到网络上并允许它们被网络上的其他容器或主机访问,必须将 Docker 容器的端口暴露给外部网络。
在 Docker 容器中,可以使用 -p
或 --publish
选项将容器端口映射到主机端口。例如,以下命令将容器内的 8080 端口映射到主机的 80 端口:
docker run --name container_name -p 80:8080 -d image_name
路由到外部网络
Docker 容器可以访问同一网络中的其他容器,也可以访问主机网络。但是,如果需要从 Docker 容器中访问外部网络,例如互联网,就需要使用路由器来进行转发。
在 Linux 环境下,可以使用路由命令或 iptables 进行路由配置。以下是一个示例命令,可以将所有 Docker 容器的流量转发到主机网络:
sudo iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
总结
本文介绍了 Docker 的网络模式、创建自定义网络,以及 Docker 网络的细节和配置方法。希望读者能够通过学习,了解 Docker 网络的基本使用方法和原理,并能进一步掌握 Docker 的使用,尤其是在应用程序网络方面。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6468666c968c7c53b089f9dc