# 删除所有容器
docker rm -f ${docker ps -aq}
# 删除所有镜像 -a 显示所有镜像 -q 只显示镜像ID
docker rmi -f ${docker images -aq}
1. Docker0
查看网络
1.查看本机网络
# 查看本机网络
ip addr
# lo 127.0.0.1本机回环地址
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
# eth0 172.28.176.102阿里云的内网地址
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:27:25:d9 brd ff:ff:ff:ff:ff:ff
inet 172.28.176.102/20 brd 172.28.191.255 scope global dynamic eth0
valid_lft 313708314sec preferred_lft 313708314sec
# docker0 172.17.0.1容器内地址
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:61:97:3d:71 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
2. 查看容器内地址
docker run -d -P --name tomcat01 tomcat:9
# 查看容器tomcat01的内部网络地址
docker exec -it tomcat01 ip addr
无法查看网络,则先安装命令
# 安装命令
[root@Link ~]# docker exec -it tomcat01 /bin/bash# 由于网络问题,安装会较慢
root@d06f08f707fa:/usr/local/tomcat# apt update && apt install -y iproute2
root@d06f08f707fa:/usr/local/tomcat# apt-get install net-tools
root@d06f08f707fa:/usr/local/tomcat# apt-get install iputils-ping
root@d06f08f707fa:/usr/local/tomcat# exit
密码安装后再次查看容器内部网络地址
docker exec -it tomcat01 ip addr
Linux能ping通容器内部
宿主机能够ping通容器内部
ping 172.17.0.3
veth-pair技术
当我们每启动一个容器,docker就给对应容器分配一个eth0,并能够桥接到docker0网卡。这个时候可以把docker0看作为路由器,每个容器可以看作为连接路由器的网络设备,docker0用来管理每个容器的和docker0通信的映射关系。
当我们的服务器成功安装docker并启动进程后,就会产生一个docker0的虚拟网桥,本质为Linux网桥(默认为桥接模式),使用的通信技术是Veth-pair技术。 veth-pair就是一对虚拟设备接口,它们都是成对出现的,一端连着协议,一端彼此相连,所以可以通信。正因为这个特性,veth-pair可以充当一个桥梁,连接各种虚拟网络设备。
容器之间相互ping通
# 容器和容器之间是可以互相ping通的
docker exec -it tomcat01 ping 172.17.0.5
tomcat01和tomcat02是共用的一个路由器即docker0。 所有的容器在不指定网络的情况下,都是docker0路由的,docker0会给我们的容器分配一个默认的可用ip。Docker中的所有网络接口都是虚拟的,因为虚拟的转发效率高。但是只要容器删除 docker rm -f 容器ID,则对应网桥一对也会一并删掉。
自定义网络
默认情况下,容器间不能够通过容器名进行ping
# 容器之间能够通过IP进行ping通
docker exec -it tomcat01 ping 172.17.0.5
#容器间不能够通过容器名进行ping
docker exec -it tomcat01 ping tomcat02
网络模式
none: 不配置网络 (一般不用)
container:容器内网络连通(一般不用)
host: 与宿主机共享网络
bridge:桥接模式 (默认使用,适合自定义网络)
docker run -d -P --name tomcat01 tomcat:9
# 等价于 加上--net bridge
docker run -d -P --name tomcat01 --net bridge tomcat:9
# 此处使用的是docker0,特点为:默认的,域名不能访问
常用命令
#列出Docker主机上的全部网络
docker network ls
# 移除指定的网络
docker network rm 网络名
#查看网络
docker network inspect 网络名
# 创建网络
docker network create --d 网络驱动类型 --subnet 子网范围 --gateway 网关地址 网络名
# 将容器连接到网络,例如跨网络操作
docker network connect 网络名 容器名
# 断开容器的网络
docker network disconnect 网络名 容器名
# 删除全部未使用的网络
docker network prune
容器互联
创建网络
# 创建网络
# --driver bridge 可不写,默认桥接模式
# --subnet 192.168.0.0/16 IP范围:192.168.0.2 ~ 192.168.255.255 总数:255*255个
# --gateway 192.168.0.1 设置网关docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
启动容器并制定自定义网络
启动容器并制定自定义网络
docker run -d -P --name tomcat_net_01 --net mynet tomcat:9
docker run -d -P --name tomcat_net_02 --net mynet tomcat:9
容器间能通过容器名进行ping
使用自定义网络的容器之间,可以使用IP进行ping,也可以使用容器名进行ping
# 通过ip进行ping
docker exec -it tomcat-net-01 ping 192.168.3
# 通过容器名进行ping
docker exec -it tomcat-net-02 ping tomcar-net-02
优势
Docker自定义网络的优势:
1.隔离容器:每个Docker网络都是独立的,可以限制哪些容器可以通信。
2.静态IP分配:可以为容器分配静态IP,方便部署和配置。
3.跨主机通信:使用自定义网络,容器可以跨多个主机通信
网络连通
将容器 tomcat01连接到网络
docker network connect 网络名 容器名
# 启动容器,不指定网络,使用默认的docker0
docker run -d -P --name tomcat01 tomcat:9
docker run -d -P --name tomcat02 tomcat:9
# 容器间不能够通过容器名进行ping
# 将容器tomcat01连接到网络,进行网络连通
docker network connect mynet tomcat01
# 容器间能够通过容器名进行ping
docker exec -it tomcat01 ping tomcat-net-01