docker网络配置

查看docker网络

[root@i zhizhu]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
94669184dd23        backend             bridge              local
57de7f32064e        bridge              bridge              local
4b44a5340d6e        host                host                local
1d49ba42e213        lijiacai            bridge              local
ac8e8ffe243f        none                null                local

 

1.docker单主机容器通信

1.docker网络有五种模式

none:docker容器内不使用任何网络,相当于与宿主是隔绝的

host:这个网络表示容器与宿主机共享网络,也就是宿主机内的ip与容器内是一致的

bridge:docker默认的网络模式,为容器创建独立的网络,容器具有独立的网卡等所有单独的网络栈,ip也将任意分配

容器模式:这种模式是将两个容器的网络进行共享,与host类似

用户自定义:这种模式网络会依附于bridge上,当然本身网络是隔离开的,网段不一样

 

2.整体图

 

3.模式理解

host

优势:

a) 直接使用宿主机ip进行通信,若宿主机具有公网ip,那么该容器一样具有公网ip

b) 性能上需要在bridge等方式转发数据包

劣势:

a) 不再拥有隔离网络栈

b) 容器内的所有端口资源不在享有,而要与宿主机保持一致

这样的劣势就代表你无法同时启动两个mysql服务的3306端口

bridge

优势:

a) 独立网卡,独立ip,通过docker0网桥仍然可以与宿主机通信

b) 容器内部可以使用所有端口号资源

 

劣势:

a) 与外界通信时,由于转发数据,影响性能

b) 容器内的ip任意分配的,不方便把握

none

不包含任何网络配置,只具有lo这个loopback网卡用于进程通信

其他容器模式

在这个模式下的容器,会使用其他容器的网络命名空间,其网络隔离性会处于bridge桥接模式与host模式之间

 

2.容器访问控制

1.容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现。

2.容器访问外部网络

    a) 查看本地系统的转发是否打开

[root@i ~]# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1

b) 如果为 0,说明没有开启转发,则需要手动打开

[root@i ~]# sysctl -w net.ipv4.ip_forward=1

 

3.访问所有端口

1.当启动docker服务的时候,默认会添加一条转发策略到本地主机 iptables 的 FORWARD 链上

2.策略为通过(ACCEPT)还是禁止(DROP)取决于配置--icc=true(缺省值)还是 --icc=false

3.如果手动指定 --iptables=false 则不会添加 iptables 规则

 

总结:

可见,默认情况下,不同容器之间是允许网络互通的。如果为了安全考虑,可以在 /etc/docker/daemon.json 文件中配置 {"icc": false} 来禁止它(Ubuntu 14.04 等使用 upstart 的系统在文件 /etc/default/docker 中配置 DOCKER_OPTS=--icc=false)。

 

4.访问指定端口

在通过 -icc=false 关闭网络访问后,还可以通过 --link=CONTAINER_NAME:ALIAS 选项来访问容器的开放端口。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章