当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连接在了一个二层网络中。
docker网络类型(包括不限于):bridge(桥接网络)、host(主机网络)、none(封闭网络)
查看docker默认网络
docker network ls
1.docker bridge网络(常用)
这是 Docker 默认的网络类型。当你创建一个容器时,如果不特别指定网络,它就会连接到默认的桥接网络上。可以把桥接网络想象成一个虚拟交换机
(1)修改docker网络默认的网段
vim /etc/docker/daemon.json
{"registry-mirrors": ["https://w1uieoaw.mirror.aliyuncs.com"],"bip": "192.168.200.1/24"
}
#重启docker
systemctl restart docker
#查看ip网段
(2)bridge网络的容器访问外部网络(端口映射)
在创建容器的时候可以指定这个容器的端口与主机端口的映射关系(端口映射):
-P(大写): #该参数会分配镜像中所有的会使用的端口,并映射到主机上的随机端口
-p: #可以指定主机与容器的端口关系,冒号左边是主机端口,右边是映射到容器端口
#创建容器时映射端口
命令格式:docker run -id --name容器名 -P -p 宿主机端口:容器端口 镜像名
docker run -id --name nginx-1.26 -P -p 422:22 nginx:1.26.1
#查看容器端口映射
docker port nginx-1.26
2.docker host网络
使用host网络的主机,与宿主机共享网络地址,可以获得最好的数据转发性能。缺点是,同一个宿主机上的多个容器共享同一个ip地址,如果多容器使用相同的端口,需要自行解决端口冲突问题。
(1)使用host网络
选项参数:
--net #指认要使用的网络,包含bridge、host、none
docker run -id --name mysql-5.7 --net host mysql:5.7
(2)查看容器网络
docker exec -it mysql-5.7 ifconfig
###可以看到容易设置为host网络之后,将直接共享宿主机的所有网卡
3.docker none网络(使用较少)
故名思议,none网络就是什么都没有的网络。使用none网络的容器除了lo,没有其他任何网卡,完全隔离。用于既不需要访问外部服务,也不允许外部服务访问自己的应用场景。
#创建容器时指定网络
选项参数:
--net #指认要使用的网络,包含bridge、host、none
docker run -id --name centos7 --net none centos