(1)docker镜像清空
[root@192 ~]# docker rmi -f $(docker images -aq)
(2)查看docker地址---docker0
[root@192 ~]# ip addr
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:79:12:89:34 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
[root@192 ~]#
(3)测试宿主机和容器是否可以ping通
[root@192 ~]# docker run -d -P --name tomcat01 tomcat
...
Status: Downloaded newer image for tomcat:latest
...
[root@192 ~]# docker exec -it tomcat01 ip addr
...
4: eth0@if5
...
[root@192 ~]# 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.083 ms ------linux宿主机可以ping通容器内部
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.046 ms
...
注意:
最新版本的tomcat默认不安装net-tools,如果执行docker -run -it tomcat01 ip addr失败,需先安装net-tools和iproute2。具体操作如下所示:
[root@192 ~]# docker exec -it 626a674478e9 /bin/bash
root@626a674478e9:/usr/local/tomcat# apt-get update
... -------------------安装步骤省略
root@626a674478e9:/usr/local/tomcat# apt-get install net-tools
... -------------------安装步骤省略
root@626a674478e9:/usr/local/tomcat# apt-get install -y iproute2
... -------------------安装步骤省略
(4)测试容器间是否可以ping通
[root@192 ~]# docker run -d -P --name tomcat02 tomcat --------创建并运行tomcat02
62785031e32527217b97966d03c113056b35572861f80f8707595504d954d22b
[root@192 ~]# ip addr
...
5: veth69305ef@if4: --------tomcat01网卡
...
7: vethd75534b@if6: --------tomcat02网卡
...
[root@192 ~]# docker exec -it tomcat02 ip addr
...
6: eth0@if7:
...
[root@192 ~]# docker exec -it tomcat01 ping 172.17.0.3 -------tomcat1可以ping通tomcat2
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.130 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.070 ms
...
[root@192 ~]# docker exec -it tomcat03 ping 172.17.0.2
Error: No such container: tomcat03
[root@192 ~]# docker exec -it tomcat02 ping 172.17.0.2 -------tomcat2可以ping通tomcat1
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.109 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.074 ms
...
[root@192 ~]#
(5)Docker网络原理
- 每启动一个docker容器,docker会给容器分配一个ip
- 安装了docker,默认有一个网卡docker0,使用的是桥接模式,利用的技术是evth-pair技术
- 所有容器在不指定网络的情况下,都是docker0路由的。docker给容器分配一个默认的ip
(6)原理图
(7)容器删除,对应虚拟网卡也会被删除
[root@192 ~]# docker rm -f 容器id
执行ip addr查看对应网卡已不存在。
(8)总结
- Docker使用的是linux的桥接;
- 宿主机中有一个docker容器的网桥: Docker0;
- Docker创建容器时会为容器创建一个虚拟网卡(转发效率高);