“这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战”
对于复杂的应用,不可避免需要多个服务部署在多个容器中,并且服务间存在网络互联通信的情况。比如服务 A 需要连接另一个 mysql 的容器。
1. 新建网络
先创建一个新的 Docker 网络
1 | bash复制代码docker network create -d bridge --subnet 172.27.0.0/16 cloud-net |
-d
参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode。subnet
参数表示新建了172.27.0.0/255.255.0.0
的网络,名称为 cloud-net。
新建网络是为了实现同主机的多个容器间网络互通,走内网,类似于软件交换机。
2. 查看网络
可以通过 network ls
命令查看当前宿主机中所有的 docker 网络
1 | bash复制代码[root@192 ~] docker network ls |
可以看到目前系统中已有的内部网络列表
建议将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 –link 参数
3. 连接容器
运行一个容器并连接到新建的 cloud-net 网络
1 | bash复制代码docker run -it --rm --network=cloud-net --ip=172.27.0.20 --name cloud1 cloud-image |
--network=cloud-net --ip=172.27.0.20
是为了固定当前容器的 IP 地址cloud-image
表示当前使用的镜像(替换为实际镜像名称)
打开新的终端,再运行一个容器并加入到 cloud-net 网络
1 | bash复制代码docker run -it --rm --network=cloud-net --ip=172.27.0.30 --name cloud2 cloud-image |
在 cloud1 容器输入以下命令来证明 cloud1 容器和 cloud2 容器建立了互联关系
1 | bash复制代码ping cloud2 |
这样在 cloud1 中就可以通过 ip 172.27.0.30 访问 cloud2 容器了。同台服务器安装N个容器中,就可以通过 docker 自建的网络实现互通
容器间不能使用 127.0.0.1 连接
4. 容器网络示意图
可以通过docker 容器网络示意图,清晰明白docker 的网络:
本文转载自: 掘金