目录
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
一、docker原生网络
1、bridge网络
bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。 容器通过宿主机的NAT规则后可以访问外网。
docker network ls
cd harbor/
ls
docker-compose down ##停止容器
docker network ls ##docker的原生网络有三个
docker安装后会自动创建3种网络:bridge、host、none
ip addr #docker安装后有一个docker0的桥接口
docker run -d --name demo nginx ##开启新容器
docker ps
yum install -y bridge-utils
brctl show ##可以看到容器网络桥接到宿主机docker0上
docker inspect demo ##查看容器的信息
看到容器的网关为172.17.0.1,
#可以看到容器已经被分到一个ip地址【docker0网络端默认地址是172.17】
##注意ip分配是单调递增的
iptables -t nat -nL #有一个伪装
【容器通过桥接到达宿主机,宿主机通过l路由功能到达eth0出去,出去做了伪装】
172.17 为所有容器的地址,其他容器地址是以单调递增的方式动态分配的,谁启谁用
2、host 模型
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
docker run -d --name demo2 --network host nginx ##-d 打入后台
docker ps
brctl show
docker inspect demo2
没有网关和 ip地址
docker exec -it demo2 bash ##进入demo2可以看到容器内
docker rm -f demo2
docker run -it --name demo2 --network host busybox ##运行busybox打开终端
docker ps -a
docker rm -f demo
docker rm -f demo2
docker run -d --name demo --network host nginx ##运行demo
ip addr ##没有新建网络
可以看到跟宿主机的ip一样
在docker2上直接访问dokcer1
brctl show
netstat -antlp
systemctl status nginx
docker rm -f demo
容器开启占用的80端口
本机没有开nginx
停掉之后外部不能访问
3、none网络
none模式是指禁用网络功能,只有lo