实践

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 *容器不创建网卡,性能更好延迟更低

    直接把容器当作一个进程了。会占用端口

    网络2
  • none

    没有网络,也就是说,这个容器没法与外界进行交流,而且也不会有网卡。

  • container

    和已经存在的容器共享一个网卡。不会创建网卡和ip。如果已经存在的容器可以和宿主机进行网络数据交换,那么新建的容器也能和宿主机进行网络数据交换。

网络3
  • 自定义桥接

​ 这种可以指定桥接方式