
本文共 1690 字,大约阅读时间需要 5 分钟。
查看docker网络
[root@i zhizhu]# docker network lsNETWORK ID NAME DRIVER SCOPE94669184dd23 backend bridge local57de7f32064e bridge bridge local4b44a5340d6e host host local1d49ba42e213 lijiacai bridge localac8e8ffe243f 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 选项来访问容器的开放端口。
发表评论
最新留言
关于作者
