Dockers网络
ip addr
#可以看到有几个网卡,可以看到里面有一个docker网卡
1、docker如何处理容器网络访问
#启动一个容器,并使用ip addr命令
sudo docker exec -it tom01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
80: eth0@if81: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
# 使用ping命令查看网络连通性
ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.064 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.077 ms
# 可以看到容器内部的ip和主机ip同一网段
# 在主机继续查看网卡,发现又新增了一块网卡
# 得出结论,只要启动docker容器,主机就会分配一个网卡,并且与容器网段相同
# 启动第二个容器,两个容器互相使用ip地址ping,发现也可以连通
# 本质上,docker使用的是linux的桥接,主机的 docker是一个网桥
2、如何使用服务名连接
# --link
sudo docker run -d -P --name tom02 --link tom01 tomcat
sudo docker exec -it tom02 ping tom01
# 可以开单可以连通
# 但是有个问题,反向不可以连通
# 需要给运行中的容器也重新配置
sudo docker exec -it tom02 cat /etc/hosts
# 可以看到这边绑定了一个tom01的ip
# 但是这个已经不建议使用--link了
3、容器互联高级使用
# 可以看到一些连接模式,一般使用bridge桥接模式
sudo docker network ls
# 自定义创建一个网卡
sudo docker network create \
--driver bridge \ # 桥接
--subnet 192.168.0.0/16 \ # 子网
--gateway 192.168.0.1 mynet # 网关
# 创建镜像并使用网络配置
sudo docker run -d -P --name tom01 --net mynet tomcat
sudo docker run -d -P --name tom02 --net mynet tomcat
# 查看网卡,发现新增了两个网络配置
sudo docker network inspect mynet
# 容器之间使用ping服务名方式,测试
# 连通成功
# 好处,我们自定义的网络可以维护好对应关系
# 比如,不同的集群使用不同的网络,保证集群的安全和健康
4、连接一个网络到一个容器
sudo docker network connect mynet tom03
# 直接将容器放置到network网络中,tom03实际上就有了两个ip地址
# 官方解释即为一个容器两个ip
# 比较好的例子就是阿里云服务器,有一个公网ip和一个私网ip
Docker 高阶运用
Docker Compose
Docker Swarm
CI/CD之Jenkins