Docker网络介绍
Docker网络共分为四种模式,如下图,从左到右为:
- None(Close) container 封闭式网络模式
- Bridged container 桥接式网络模式
- Container(join) container 联合挂载式网络模式
- Host(open) container 开放式(主机)网络模式
(图片来源于网络)
注:这个图很重要,下面具体介绍每种模式的时候可以对照学习
我们也可以通过以下命令查看:
1 | [root@ramon ~]# docker network ls |
下面来依次介绍每种模式。
None网络模式
介绍:none网络模式下不会对容器进行网络配置,只有lo回环网络
配置:在执行docker run
的时候添加--network none
的选项
特点:封闭的网络保证了容器的安全性,适用于一些无需联网的场景,比如备份、进城诊断等。
示例:
1 | 1.启动一个none网络模式的docker |
Bridge网络模式
介绍:docker在安装的时候创建了一个名为docker0的虚拟网桥,启动的Docker容器会连接到这个虚拟网桥上,然后docker0通过NAT与宿主机上网卡之间进行数据转换,到达容器连接网络的目的。
配置:不用配置,默认的网络模式
特点:桥接模式为容器提供一个独立的网络栈,保证了容器内独立的网络环境,实现了网络隔离,适用于大多数需要独立网络的场景。
示例:
1 | 1.查看网桥(docker0) |
Container网络模式
介绍:指定一个已存在的容器共享一个网络,自己不会配置新的网卡
配置:在执行docker run
的时候添加--network container:$CONTAINER_ID
的选项
特点:与其他容器共享一个网络配置,两个容器可以直接通过lo网卡通信,适用于容器间大量通信且需要保证通信质量的情况。
示例:
1 | 1.运行一个centos容器 |
##Host网络模式
介绍:与宿主机共用同一个网络,网络配置相同
配置:在执行docker run
的时候添加--network host
的选项
特点:与宿主机共用一个网络,少了NAT转发的过程,速度加快,但会占用宿主机的端口
示例:
1 | 1.查看宿主机网络配置 |
容器互联
前面我们已经知道了默认的网桥docker0,但是在这个默认配置上创建的这些容器之间只能通过ip互相通信,不能直接通过容器名通信,这给我们集群配置自动化带来一定的复杂性(配置host或者配置静态ip都需要一些额外的操作和局限性)。
1 | 1.拉起两个容器 |
针对需求我们有如下方案:
link链接
在调用docker run
的时候我们增加--link
的选项,可以将新开始的容器之前已有的容器绑定,之后就可以接直接通过ping $docker_name
的方式进行网络互联了,如下图:
1 | 1.创建link到tomcat01的容器tomcat03 |
但是这种方式现在并不推荐,它的原理就是修改了/ect/hosts
文件,进行了地址映射,而且只是单向绑定,如下图:
1 | [root@ramon ~]# docker exec -it tomcat03 cat /etc/hosts |
另一种更好的处理方式就是自定义网络了。
自定义网络
自定义网络即我们使用docker network
自己创建一个网络,命令如下:
1 | 参数 |
创建一个自己的自定义网络示例如下:
1 | 1.创建一个网络 |
创建完成后,我们来查看我们的实际测试情况:
1 | 1.创建指定network的容器 |
当然,自定义网络的好处不只有这个,因为我们是可以自定义网段的,那么可以很分辨的对不同的集群分配不同的网段,这样可以实现集群之间的网络隔离,不过集群之间也是要相互链接的,这时候可以使用到我们的docker network connect
命令。
1 | 参数解析 |
docker network connect
的原理就是给这个容器在对应网段新分配了一个ip,这个容器有了两个网络配置。
1 | [root@ramon ~]# docker network inspect tomcat_net |