此篇为Docker笔记,文章可能存在疏忽,建议直接观看原视频。
视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0
Docker网络
理解Docker0
清空所有环境
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)
root@zhucz:/home# ip a
Docker如何处理容器间的网络访问的?
root@zhucz:/home# docker run -d -P --name tomcat01 tomcat
# 查看容器内部的网络地址,发现容器启动的时候会得到一个docker分配的ip地址
root@zhucz:/home# docker inspect --format='{
{.NetworkSettings.IPAddress}}' tomcat01
172.17.0.2
# 或者 前提是容器安装了iproute2(docker exec -it tomcat01 apt-get install iproute2)
# docker exec -it tomcat01 apt-get install inetutils-ping 使用ping命令
root@zhucz:/home# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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
42: eth0@if43: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
# 本地尝试ping一下容器内部ip
root@zhucz:/home# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.403 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.047 ms
我们每启动一个docker容器,docker就会给docker容器分配一个ip。只要安装了docker,也就会有一个特定的网卡docker0,桥接模式,使用的技术是evth-pair技术。
evth-pari 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连。正因为这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备。
再次查看ip,发现多了一对网卡:
再启动一个tomcat:
尝试使用tomcat01 ping tomcat02,发现容器之间可以互相ping通:
root@zhucz:/home# docker exec -it tomcat01 ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: icmp_seq=0 ttl=64 time=14.116 ms
64 bytes from 172.17.0.3: icmp_seq=1 ttl