Docker 是一个流行的容器化平台,能够帮助开发者轻松地打包应用程序、依赖和配置,从而轻松地部署到任何地方。一个常见的应用场景是在一个宿主机上运行多个容器来支持一个应用程序,这就需要考虑容器之间的通信问题,这就需要进行网络的配置。
Docker 网络类型
Docker 支持四种内置的网络类型:
1. None
None 网络类型表示容器没有网络,这意味着容器不能访问外部网络、外部容器或其他 IP 地址。
docker run --network none --name container1 ubuntu
2. Bridge
Bridge 网络类型是默认的网络类型。当一个容器被创建时,它会自动分配到一个 IP 地址,并被分配到一个默认的 Docker 网络 bridge 中。
docker run --network bridge --name container1 ubuntu
3. Host
Host 网络类型使用主机网络,并将容器直接连接到宿主机的网络。这意味着容器可以直接访问主机网络中的其他设备。
docker run --network host --name container1 ubuntu
4. Overlay
Overlay 网络类型允许多个 Docker 守护进程在不同的主机上协同工作。使用此网络类型需要对 Docker Swarm 进行初始化,并且使用 Docker 网络插件来创建网络。
docker swarm init docker network create --driver overlay my-overlay-network docker service create --network my-overlay-network --name container1 ubuntu
Docker 容器网络配置
1. 容器间通信
容器间通信是一个非常常见的需求,通常使用 Bridge 网络类型来实现。
docker network create my-bridge-network docker run --network my-bridge-network --name container1 ubuntu docker run --network my-bridge-network --name container2 ubuntu
这样,容器 1 和容器 2 都将自动连接到 my-bridge-network
网络中,它们可以彼此访问并互相通信。
2. 将容器映射到主机端口
将容器映射到主机端口是另一个常见的需求。这允许外部网络发送请求到主机端口,然后由 Docker 将请求转发到容器内部的端口。
docker run -p 8080:80 --name container1 nginx
这将把主机上的 8080
端口映射到容器内部的 80
端口。
3. 使用网络别名
Docker 允许您为容器分配一个或多个别名,这让容器的主机名可以与其 IP 地址相匹配。
docker run --network my-bridge-network --network-alias container1 --name container1 ubuntu docker run --network my-bridge-network --network-alias container2 --name container2 ubuntu
这样,你可以通过容器的 container1
和 container2
别名来访问它们,而不必知道它们的 IP 地址。
4. 使用不同的网络
在某些情况下,可能需要将容器分配到不同的网络中。这可以使用 --network
标志来完成。
docker network create my-network1 docker network create my-network2 docker run --name container1 --network my-network1 ubuntu docker run --name container2 --network my-network2 ubuntu
这样,容器 1 和容器 2 将分别在不同的网络中运行,不会相互通信。
总结
本文介绍了 Docker 内置的四种网络类型、如何创建 Docker 容器网络、如何将容器映射到主机端口、如何使用网络别名以及如何将容器分配到不同的网络中。这些功能都可以在实际生产环境中使用,并且可以根据需要进行灵活配置。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64756422968c7c53b02768a8