docker学习笔记-docker网络
1.默认网络docker0
只要下载docker,默认回创建一个docker0的虚拟网卡
每启动一个容器,docker就回给容器分配一个ip,使用桥接模式进行连接(veth-pair)
每次启动会在容器内部和主机部分个增加一个网卡
(成对出现 267-266 277-276)

# 我们发现这个容器带来网卡,都是一对对的。
# veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连。
# 正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的。
# openstack,Docker容器之间的连接,OVS的连接,都是使用veth-pair技术。
ps:容器之间可以互相连通,docker0相当于公用的路由器
2.——link
使用名称代替IP地址实现高可用
docker network ls 可以查询所有的网络id
docker network inspect 网络id 查询网络的详细信息

# 通过服务名ping不通;如何解决?
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known
# 通过--link可以解决网络连接问题。
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker run -d -P --name tomcat03 --link tomcat02 tomcat:7.0
2393eecb870e5755068ea8b7d8bdcdd0f1ff110534c3359384413677c651bec4
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.085 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.055 ms
# 反向可以ping通吗?(不可以)
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known
tomcat03配置在Tomcat02的host文件中
# 查看
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it tomcat03 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 tomcat02 20398a94efa7
172.17.0.4 2393eecb870e
建议使用自定义网络,使用--link太过于麻烦,无法面对复杂的场景但是docker0不支持容器名连接访问
3.自定义网络
查看docker所有的网络
网络模式
bridge:桥接 docker(默认,自己创建也使用bridge桥接模式)
none:不配置网络
host:和主机共享网络
container:容器网络连通!(用的少!局限很大)
# 我们直接启动的命令--net bridge(这个就是我们的docker0);默认带上这个参数的,以下两种启动方式效果一致。
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --het bridge tomcat
# docker0特点:默认,域名不能访问,--1ink可以打通连接!
# 我们可以自定义一个网络!
# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
7254ffccbdf5 bridge bridge local
45610891738f host host local
266acd66473c mynet bridge local
7795cbc2686c none null local
创建容器都加入自定义网络则可以互相连通
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat:7.0
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat:7.0
redis -不同的集群使用不同的网络,保证集群是安全和健康的
mysql -不同的集群使用不同的网络,保证集群是安全和健康的
4.网络连通
、、、
容器加入自定义网络
使用docker network 自定义网络名称 容器名称
实现跨网络访问
、、、


浙公网安备 33010602011771号