实践
1.docker run方式设置网络模式
# 桥接模式 -p 才有用,会把内部的断开和宿主机的端口进行映射。这种时候用来做集群好用,一台机器部署多个同类型服务
#默认就是桥接bridge 会创建一个网卡
docker run -d -p 6380:6379 --name redis redis:6.0
#设置模式bridge
docker run -d -p 6380:6379 --name redis --network bridge redis:6.0
# 创建自定义 bridge 网络 这种方式创建的桥接名称可以 自定义
docker network create my-network
docker run -d --name redis -p 6380:6379 --network my-network bridge redis:6.0
# host模式 可以提高性能。相当于直接把docker当成一个服务启动。跟直接部署没什么区别
docker run -d --name redis --network host redis:6.0
#查看端口占用
losf -i:6379
#none模式 这个应用没有网络功能,如果是redis这种应用部署就没有意义了
docker run -d --name redis --network none redis:6.0
#容器模式container -p指令同样没有意义 这种一般用于其他容器走nginx,只开放nginx80端口
#假设当前已经有一个nginx容器在运行
docker run -d --name redis --network container:nginx redis:6.0
#覆盖网络overlay
#略过
2.docker-compose设置网络模式
-
bridge模式
version: '3.8' services: web: image: nginx:1.27.0 ports: - "8080:80" #设置多个端口映射 - "443:443" networks: - backnet #后端网络 - beforenet # 前端网络 api: image: java-app:1.0.0 ports: - "48080:48080" networks: - backnet resource: image: resource:1.0.0 ports: - "88:88" network: - beforenet networks: backnet: driver: bridge beforenet: driver: bridge ipam: config: - subnet: 172.21.0.0/16 -
host模式
version: '3.8' services: web: image: nginx:1.27.0 network_mode: "host" #直接配置成host api: image: java-app:1.0.0 network_mode: "host" #直接配置成host -
none
-
container
四种模式解析
-
bridge(默认)容器创建网卡
-
docker安装完成后,docker建立一个虚拟网卡docker0,bridge模式下的容器会把这个网卡当作网关。即容器nat方式->docker0->宿主机
-
容器创建后会在宿主机建立一个网卡,这个网卡172.17.18.1(一般来说18代表建立了多少个容器,1代表网卡地址,容器里面的服务会以.1->.2开始分配)
-
-
*host *容器不创建网卡,性能更好延迟更低
直接把容器当作一个进程了。会占用端口
-
none
没有网络,也就是说,这个容器没法与外界进行交流,而且也不会有网卡。
-
container
和已经存在的容器共享一个网卡。不会创建网卡和ip。如果已经存在的容器可以和宿主机进行网络数据交换,那么新建的容器也能和宿主机进行网络数据交换。
- 自定义桥接
这种可以指定桥接方式