Docker网络
从docker0说起
docker默认网络
docker安装后,会自动创建3个网络
docker network ls
docker默认采用的网络:
bridge
桥接网络docker安装成功后,会出现
docker
的网络设备,本质是一个虚拟网桥brctl show
注意:brctl show命令需要通过
yum install bridge-utils -y
安装
docker的作用
给容器分配IP地址(与docker8同网段)
给容器分配Mac地址
是每个容器的默认网关
同一个宿主机的各个容器之间通信基础(都接入dockere网桥)
宿主机和容器之间通信的基础
docker的地址划分
- dockere本身的IP:172.17.0.1
- dockero的子双掩码:255.255.0.0
- dockere分配的IP范围:172.17.0.2~172.17.255.254,总计65534个
docker0如何组织网络
运行某个容器
- dockersearch alpine
- docker pull alpine
- docker run -itd --name ap01 alpine
- ip addr
- 17:veth c587b92 @if16 ap01
- 19:veth 875bff4 @if18 ap02 brctl show
查看容器网络接口
bashdocker exec -it ap01 ip addr
查看容器IP
bashdocker exec -it ap01 hostname -i docker inspect ap01
小结 veth全称是Virtual Ethernet(虚拟以太网)
- veth通过"veth pair"技术在veth设备一端写入网络包,其对端的veth设备可以读取到对应的网络包:(可想象成使用一根虚拟网线将两个veth设备连接起来)
- 容器启动
- docker创建一对虚拟接口’
- 一端放到本地主机,如veth75f9,然后桥接到默认的 docker0 上
- 另外一端放到新容器中,并修改名字为eth0
- docker0分配一个IP给容器的eth0,并配置默认路由到桥接网卡veth75f9。
网络互连
容器与宿主机之间的互连
- 宿主机IP地址:192.168.13.21
- 容器ap01:172.17.0.2
- 容器ap01:172.17.0.3
容器与容器之间的互连
默认情况下,docker(Docker)容器之间都是通过IP互相连接的
通过docker运行指令的参数“--链接容器名:别名”,直接修改容器的hosts映射(/etc/hosts)
基于安全考虑,通过 vim /etc/docker/daome.json 在末尾添加配置
“icc”:false
禁止所有的容器通信可禁止容器之间的互连(需要重启docker生效,但此配置不对--link 生效)
"iptables":true
设置了--link的可以访问,其它的不能访问service docker restart
容器访问互联网
白定义网络
为何需要自定义网络 容器的隔离,提高安全性;DNS解析和服务发现:容器与外网的连接;容器之间的负载均衡。
如何创建自定义网络
- docker network create[--driver 驱动类型] [--subnet=192.168.1.0/24] 自定义网络名
- 注意:--driver代表驱动类型,默认"bridge"
- subnet代表网段设置,默认dockere地址上递增(172.17.0.1-->172.18.0.1)
- 可通过 docker network ls 查看自定义网络
查看网络详情
通过 docker network inspect 网络名
bashdocker network inspect rh
如何使用自定义网络
bash# 容器启动时加入 docker run --network 自定义网络名 # 容器启动后加入 docker network connect 网络名 容器名
自定义网络删除
删除时网络中没有容器,如果有先使用命令
docker network disconnect 网络名 容器名
退出网络bashdocker network delete rh
总结
涉及到了docker网络基本概念、组网原理、自定义网络以及容器的互连
未涉及到不同主机之间容器的网络连接。