Docker 和容器技术现在越来越火,因为它们能够大大简化应用程序的部署和管理。Docker 镜像是部署和管理容器的基本单位,在一个容器中最初启动时,Docker 可以为其分配一个 IP 地址并且默认创建一个“桥接”类型的网络以使其与其他容器或主机通信。
然而,有时候将多个 Docker 容器链接在一起形成应用程序是必要的,而这通常需要在不同的容器中设置网络。Docker 提供了两种类型的网络:桥接网络和覆盖网络。桥接网络将容器连接到 Docker 主机的默认网络。覆盖网络允许容器在不同的 Docker 主机之间进行通信。
# 创建一个桥接网络 docker network create my-bridge-network # 创建一个容器并将其添加到网络中 docker run --rm -itd --network my-bridge-network --name container1 ubuntu # 列出网络中的容器 docker network inspect my-bridge-network
上面的例子中,执行第一条命令会创建一个名为 my-bridge-network 的桥接网络。第二条命令将一个 Ubuntu 容器添加到这个网络中,这里使用了--network 标志表示将容器添加到 my-bridge-network 网络。第三条命令使用docker network inspect查看一个网络中的所有容器。
覆盖网络允许在 Docker 环境中创建跨主机的容器网络。可以通过在主机上安装 Docker 并创建一个参加同一个 Docker swarm 集群的节点,然后在节点之间创建覆盖网络来实现。在容器中,可以使用容器名而不是 IP 地址进行通信,并且容器可以在任何节点上启动和停止。
# 创建一个覆盖网络 docker network create --driver overlay my-overlay-network # 启动一个 web 服务 docker service create --name my-web -p 80:80 --network my-overlay-network nginx:latest
这里的第一条命令会创建一个覆盖网络,名字为 my-overlay-network。使用--driver overlay 标志来指定此网络是一个覆盖网络。第二条命令将一个nginx服务添加到这个网络中,使用--network标志来指定在哪个网络中运行。最后,该服务会绑定到主机的80端口上,而请求将由 nginx 处理并在覆盖网络中的所有容器间进行转发。
总结来说,Docker 镜像间的网络可以通过桥接网络和覆盖网络来实现。桥接网络在默认情况下创建,但覆盖网络需要手动创建和配置。覆盖网络允许容器在大规模的 Docker 环境中灵活地通信。