Loading
0

docker网络技术剖析

docker中的容器互联--linking 系统
docker 有一个 linking  系统可以连接多个容器。它会创建一对父子关系,父容器可以看到所选择的子容器的信息。该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息
自定义容器的命名
linking系统依据容器的名称来执行,因此,首先需要自定义一个好记的容器命名。当我们创建容器的时候,系统会随机分配一个名字。当然我们也可以自己来命名容器,这样做有 2 个好处:
当我们自己指定名称的时候,比较好记,比如一个 web 应用我们可以给它起名叫 web
当我们要连接其他容器时候,可以作为一个有用的参考点,比如连接 web 容器到 db 容器
使用  --name  标记可以为容器自定义命名。使用  docker ps 来验证设定的命名,也可以使用  docker inspect  来查看容器的名字dockerinspect -f "{{ .Name }}" 容器id
注意:容器的名称是唯一的。如果已经命名了一个叫 web 的容器,当你要再次使用 web 这个名称的时候,需要先用docker rm  来删除之前创建的同名容器。
在执行  docker run  的时候如果添加  --rm  标记,则容器在终止后会立刻删除。注意, --rm  和  -d 参数不能同时使用。

容器互联
使用--link参数可以让容器之间安全的进行交互。
下面先创建一个新的数据库容器。
docker run -dit --name dbserver镜像id

然后创建一个新的 web 容器,并将它连接到 db 容器

--link 标记的格式: --linkname:alias , name 是我们要链接的容器的名称, alias 是这个链接的别名。
使用docker ps来查看容器的连接

我们可以看到我们命名的容器, dbserver 和 web , dbserver 容器的 names 列有 dbserver 也有 web/dbserver。这表示 web 容器链接到 db 容器,他们是一个父子关系。在这个 link 中, 2 个容器中有一对父子关系。docker 在 2 个容器之间创建了一个安全的连接,而且不用映射dbserver容器的端口到宿主主机上。所以在启动 db容器的时候也不用 -p 和 -P 标记。使用 link 之后我们就可以不用暴露数据库端口到网络上。

注意:你可以链接多个子容器到父容器,比如我们可以链接多个 web 到 db 容器上。

Docker 会添加子容器的 host 信息到父容器的  /etc/hosts 的文件。
下面是父容器 web 的 hosts 文件

这里有 2 个 hosts,第一个是 web 容器,web 容器用 id 作为他的主机名,第二个是 dbserver 容器的 ip 和主机名。可以在 web 容器中安装 ping 命令来测试跟dbserver容器的连通。
注意:官方的镜像默认没有安装 ping,需要自行安装,软件包名iputils

附:在bridge模式下,连在同一网桥上的容器可以相互通信(若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTS变量中设置--icc=false,这样只有使用--link才能使两个容器通信)。

多台物理主机之间的容器互联(暴露容器到真实网络中)

docker 默认的桥接网卡是 docker0 。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起,如下:

这样就可以把这个网络看成是一个私有的网络,通过 nat  连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数。
如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理主机的容器组到一个物理网络中来,那么就需要将这个网桥桥接到我们指定的网卡上。


主机 A 和主机 B 的网卡一都连着物理交换机的同一个 vlan 101, 这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一 vlan 中的其他物理机器互联。
这样就直接把容器暴露到物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。
不同容器之间的通信可以借助于pipework 这个工具
pipework是由Docker的工程师JérômePetazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。

分页阅读: 1 2 3 4 5 6 7 8
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。