1.从docker说起
1.1 docker默认网络
docker安装后,会自动创建3个网络->docker network ls
docker默认采用的网络:"bridge"桥接网络
docker安装成功后,会出现 docker0 的网络设备,本质是一个虚拟网桥 ->brctl show
注意:brctl show命令需要通过"yum install bridge-utils -y"安装
1.2 docker0的作用
172.17.0.1
给容器分配IP地址(与docker0同网段)-172.17.0.2、172.17.0.3.
给容器分配Mac地址
是每个容器的默认网关
同一个宿主机的各个容器之间通信基础(都接入docker0网桥)
宿主机和容器之间通信的基础
1.3 docker0的地址划分
docker0本身的IP:172.17.0.1
docker0的子网掩码:255.255.0.0
docker0分配的IP范围:172.17.0.2~172.17.255.254,总计65534个
2.docker0如何组织网络
2.1 运行某个容器
docker search alpine # alpine是一个轻量级的Linux基础镜像(ip、ifconig、ping)
docker pull alpine
docker run -itd --name ap01 alpine
ip addr
11: veth 2c06577 @if 10 ---> ap01
13: veth cbf8bdb @if 12 ---> ap02
brctl show
2.2 查看容器网络接口
docker exec -it ap01 ip addr
2.3查看容器IP
docker exec -it ap01 hostname -i | docker inspect ap01
2.4 小结
veth全称是Virtual Ethernet(虚拟以太网):
veth通过"veth pair"技术在veth设备一端写入网络包,其对端的veth设备可以读取到对应的网络包;(可想象成使用一根虚拟网线将两个veth设备连接起来)
->容器启动
-> docker创建一对虚拟接口
一端放到本地主机,如 veth***,然后桥接到默认的 docker0 上>
->另外一端放到新容器中,并修改名字为eth0
->docker0分配一个IP给容器的eth0,并配置默认路由到桥接网卡veth75f9
3.网络互连
3.1 容器与宿主机之间的互连
宿主机IP:192.168.13.21
容器ap01:172.17.0.2
容器ap02:172.17.0.3
3.2 容器与容器之间的互连
- 默认情况下,docker容器之间都是通过IP互相连接的;
- 通过 docker run 指令的参数"--link 容器名:别名",该参数会修改容器的hosts映射(/etc/hosts):
docker run -itd --name ap02 --link ap01:ap01 alpine
- 基于安全考虑,通过 vim /etc/docker/daemon.json 在末尾添加配置:
"icc":false(一刀切,不推荐)
可禁止容器之间的互连(需要重启生效 systemctl restart docker,但此配置不对--link 生效)
"iptables":true(配合规则使用,推荐)
示例:
启动容器一:docker run --name ng01 -itd nginx
启动容器二:docker run --name ng02 -itd --link ng01:ng01 nginx
ng02可以单向访问ng01,但ng01不可以访问ng02
3.3 容器访问互联网
4.自定义网络
4.1 为何需要自定义网络
容器的隔离,提高安全性;DNS解析和服务发现;容器之间的负载均衡.….
4.2 如何创建自定义网络
docker network create [OPTIONS] NETWORK
--driver string Driver to manage the Network (default "bridge")
--subnet strings Subnet in CIDR format that represents a network segment
。。。
例如:docker network create apnet --subnet=192.168.1.0/24
注意:--driver代表驱动类型,默认"bridge":
--subnet代表网段设置,默认docker地址上递增(172.17.0.1-->172.18.0.1)
--可通过 docker network ls 查看自定义网络
docker network inspect 网络名 #查看使用网络的详情
4.3 如何使用自定义网络
容器启动时:
docker run --network 自定义网络名
容器启动后:
docker network connect/disconnect 网络名 容器名
4.4 删除自定义网络
docker network rm 网络名 #必须确保网络未被使用过
.
5.总结
涉及到了docker网络基本概念、组网原理、自定义网络以及容器的互连;
未涉及到不同主机之间容器的网络连接。