当你安装了 docker, 它会自动创建 3 个网络,可以使用 docker network ls 命令来查看
bridge
host
当你运行一个容器的时候,可以使用 --network 参数来指定你的容器连接到哪一个网络。
bridge模式
当 Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。
虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。 从docker0 子网中分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的默认网关。
在主机上创建一对虚拟网卡 veth pair 设备, Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为eth0 (容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。
bridge 模式是 docker 的默认网络模式,不写 --net 参数,就是 bridge 模式。
查看 bridge信息 docker inspect bridge
打开容器 docker run -itd --net=bridge --name cname iname
查看 docker0网桥 ip addr
查看容器网络 ifconfig
docker0就像是一个路由器,容器就像是路由器下的设备,它们在同一个网段内,可以互相ping通。
外部访问 :设置端口映射
docker run -itd --name bridge03 -p 8081:8080 spring:1.0
-p参数可以出现多次,绑定多个端口号:
docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0
host模式
如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace ,而是和宿主机共用一个Network Namespace 。 容器将不会虚拟出自己的网卡,配置自己的IP 等,而是使用宿主机的 IP 和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。如下图:
docker run -itd --name host01 --net=host spring:1.0
创建自定义网络 ( 自定义 IP)
docker network create --subnet 网段 name
删除:docker network rm xx
固定 ip启动 docker run -itd --name net01 --net mynet --ip 172.18.0.2 spring:1.0
测试 docker exec -it net01 ping net02
跨网桥测试 docker exec -it net01 ping 172.0.0.2