Docker 容器互联
# docker 容器互联
有的时候我们会有这样的诉求,想要让两个容器之间能够进行相互通信,那这个时候我们应该怎么办呢?答案就是让两个容器互联呗。
# link 方式
这种方式也比较简单,直接用 --link=[container name]:[alias]
就好了,话不多说,上码。
第一步创建一个容器:
docker run -idt --name=container1 ubuntu
接下来再创建另一个容器来和他进行连接:
docker run -it --name=container2 --link=container1 ubuntu /bin/bash
这样我们就会进入到 container2 容器的 bash 命令行,默认这个 ubuntu 容器是没有 ping 命令的,如果我们想测试一下两个容器连通性可以先安装一下 ping 命令。
apt-get update
apt-get install iputils-ping
2
安装完我们就可以快乐的执行 ping 命令了,那让我们来验证下吧:
root@5e09600af0ad:/# ping container1
PING container1 (172.17.0.2) 56(84) bytes of data.
64 bytes from container1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.713 ms
64 bytes from container1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.106 ms
2
3
4
直接 ping 链接的容器名即可,从打印出来的日志我们可以看到的确 ping 通了。
# 建立网络
# 相关命令
- 创建网络:
docker network create
- 连接网络:
docker network connect
- 断开连接:
docker network disconnect
- 查看网络详情:
docker network inspect
- 列出所有网络:
docker network ls
- 清理未使用的网络:
docker network prune
- 删除网络:
docker network rm
# 实践
简单介绍了一下 docker 操作网络的一些命令之后,我们就可以开始着手实践一下了。
第一步创建一个网络:
docker network create local-network
然后我们创建一个容器来连接上这个网络:
docker run -idt --name=con1 --network=local-network ubuntu
然后再创建一个容器也连接上来
docker run -idt --name=con2 --network=local-network ubuntu
完事之后我们就可以在 con1 容器里 ping 一下 con2,你会发现非常丝滑的通了。
# 网络模式介绍
- bridge
- overlay
默认情况下,我们如果不使用 -d bridge
来设置网络的话,docker engine 会自动帮你创建一个 bridge 网络,然后连接到这个网络上来。
bridge 网络是在单台 Engine 安装上的隔离网络。如果想创建一个跨多个运行着 Engine 的 docker 主机,必须创建一个 overlay 网络。不像 bridge 网络,在创建 overlay 网络之前,需要一些预存在的条件。
使用 overlay 网络需要满足下面的这些条件:
- 正常工作的 key-value 存储服务,比如 consul、etcd、zookeeper 等
- 可以访问到 key-value 服务的主机集群
- 集群中每台机器都安装并运行 docker daemon
- 集群中每台机器的 hostname 都是唯一的,因为 key-value 服务是通过 hostname 标识每台主机的
docker 支持 overlay 网络的选项是:
- --cluster-store
- --cluster-store-opt
- --cluster-advertise
虽然不是必须的,但推荐安装 docker swarm 来管理组成你的网络的集群。Swarm 提供了成熟的发现和服务器管理工具,可以帮助你更好地管理集群。
关于 docker 网络这块细节还没开始深入研究,慢慢补上。