一.Docker网络模式
-
docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。
-
docker安装后会自动创建3种网络:bridge、host、none
-
可以使用以下命令查看:
二.基本网路配置
bridge:
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。
如果不指定网络的话默认为bridge默认桥接:
- 在容器中查看网络,会生成ip,容器与宿主机之间的连接就相当于网线,其中显示的16表示网线的一端,同时在宿主机上查看时会显示另一端:
-
在宿主机中查看网络并且查看网桥:
-
在宿主机上查看docker容器网络产生的进程
host: -
host网络模式需要在容器创建时指–network=host
-
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
1.运行容器指定为host网络类型,并且查看网络与宿主机相同
none: -
none模式是指禁用网络功能,只有lo接口,在容器创建时使用–network=none指定。
1.运行容器指定网络方式为none并且查看
container:
- Container 网络模式是 Docker 中一种较为特别的网络的模式。在容器创建–network=container:vm1指定。(vm1指定的是运行的容器名)
- 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速信。
1.使用container模式运行容器并且查看网络
2.运行新的容器与container的网络模式下的数据库进行连接
三.高级网络配置
自定义网络模式,docker提供了三种自定义网络驱动:
- bridge
- overlay
- macvlan
bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。
建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。
1.创建自定义网桥
2.以自定义网桥运行容器,并测试
3.以自定义网桥再运行容器查看自定义网桥运行的俩个容器是否能ping通
docker容器之间的互连:
4.还可以自己定义网段:
- 在创建时指定参数:–subnet 、–gateway
//创建自定义网络,指定网段及其网关
//使用自定义的网络运行容器,并且查看网络
使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的。
docker在设计上就是要隔离不同network的,那么如何使两个不同网桥的容器通信呢:
使用 docker network connect命令为vm1添加一块my_net2 的网卡。
并且进入容器进行测试:
发现俩个容器时互通的
外网如何访问容器:
- 端口映射
- -p 选项指定映射端口
- 外网访问容器用到了docker-proxy和iptables DNAT
- 宿主机访问本机容器使用的是iptables DNAT
- 外部主机访问容器或容器之间的访问是docker-proxy实现