技术: 深耕 Docker 生态圈(八){Docker 网络部分}

容器(应用)之间如何互连 & 协作?容器与外部网络如何通信?

综述

其实这部分内容还是不少的(网络一直是虚拟化部分的大头),我尽量简写吧。(需要网桥,iptables等基础)

老一批 docker 用户可能喜欢用 --link,不过现在 docker 更提倡用 network

该部分主要写三个方面内容:

  • 容器网络基础
  • Docker容器互连
  • Docker与外部网络
  • 结合 iptables 实现访问控制

下面展开两个方面,其他的可以参考我的云笔记。

容器互连

首先知道 docker port 可以查看端口映射状况, docker -p 参数可以指定开放的端口。

例如,使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。

1
$ docker run -d -p 127.0.0.1::5000 training/webapp python app.py

完全体可以写成这样:

1
$ docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

或者同时指定 协议 udp:

1
$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

之后容器之间默认是可以互连的,如果使用 iptables 控制不能互连后,就要在启动容器的时候手动指定了:

新建一个网络:

1
$ docker network create -d bridge my-net

网络的类型用 -d 指定,一般都会指定桥接 bridge,也有情况指定 overlay。
其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。

运行容器,连接到网络:

1
$ docker run -it --rm --name busybox1 --network my-net busybox sh

之后运行容器,直接加入这个网络即可:

1
$ docker run -it --rm --name busybox2 --network my-net busybox sh

而如果使用 --link 参数,则只能指定这个容器运行时连接哪个容器。

证明容器是否可以互相通信,直接进去,然后用 container_name 互相 ping 一下即可。

多个容器之间互连,可以用 compose, 然后指定应用的时候,使用 –links

容器互连不仅仅只有这些内容,其实还有别的内容,比如说结合数据共享:

某个容器挂载数据目录,然后其他容器直接挂载这个容器,即可以挂载相应的数据目录

本质上,现在常用的内容就这些;高级的内容以后专门来补充,或者参考 高级网络配置,主要和运维相关了。


Merlin 2018.3 可以参考我的有道云笔记(当前mac端无法分享)

文章目录
  1. 1. 综述
  2. 2. 容器互连
|