(3)Docker搭建Network网络

1.Docker网络模式简介

Docker提供以下几种内置网络模式:
(1)bridge(默认): 每个容器连接到一个虚拟网桥(docker0),容器之间可通过IP通信,但需要通过-p映射端口到宿主机才能被外部访问。自定义bridge网络支持容器名自动DNS解析。
(2)host: 容器直接使用宿主机的网络栈,没有网络隔离,端口直接暴露在宿主机上,性能最高但安全性较低。
(3)none: 容器无网络,适用于完全自定义网络的场景。
(4)overlay: 用于Swarm集群,跨多个宿主机实现容器间通信。
(5)macvlan: 为容器分配MAC地址,使其像物理设备一样接入网络。

这里暂时介绍bridge,host两种network案例,其他模式以后熟悉再介绍。主流三种network流程图如下:

因为上章节,我已经建立一个Harbor私人仓库,现在分别发布两个不同网络类型的net程序镜象(192.168.1.100:8090/test/jayden-test-webapi-bridge:v1,192.168.1.100:8090/test/jayden-test-webapi-host:v1)到仓库上,方便后续操作:

2. Bridge模式(默认)

2.1. run自定义Bridge模式

(1)创建一个自定义bridge网络(例如:docker_myhost,自动分配IP4与网关):

bash 复制代码
# 创建一个docker_myhost bridge网络 
docker network create --driver bridge docker_myhost

(2)run启动.NET应用容器时加入该网络,并指定容器名(jayden-test-webapi-run-bridge-dev,jayden-test-webapi-run- bridge-pro),如果需要登录仓库才能下载镜象,请输入docker login命令登录:

bash 复制代码
docker run -d \
  --name jayden-test-webapi-run-bridge-dev \ # 容器名字
  --restart unless-stopped \ # 除非手動停止,不然一直重啟
  --network docker-ha_myhost \ # 自定義網路
  # 將宿主機的8000和4330端口映射到容器內的80和433端口
  -p 8000:80 \
  -p 4430:443 \
  -e ASPNETCORE_ENVIRONMENT=Development \ # 配置環境變量
  --log-opt max-size=50m \ # 單一Log文檔最大限制為50MB
  --log-opt max-file=5 \ # 最多保留5個Log文檔
  192.168.1.100:8090/test/jayden-test-webapi-bridge:v1 # Harbor倉庫的镜像

这里启动两个容器jayden-test-webapi-run-bridge-dev(开发环境),jayden-test-webapi-run- bridge-pro(生产环境)同时都加入了docker_myhost网络。如下图所示:

以上就是run自定义Bridge network模式的方式,接下来让我们学习下docker-compose编排如何自定义Bridge network模式。

2.2. docker-compose自定义Bridge模式

(1)可以先创建一个自定义bridge网络,也可以让docker自动生成(自动分配IP4与网关)。如果先创建执行如下命令。这里我选择自动生成(docker默认生成network规则是"project path+custom network name"):

bash 复制代码
# 创建一个docker-ha_myhost bridge网络 
docker network create --driver bridge docker-ha_myhost

创建并编辑docker-compose.yml输入如下内容:

bash 复制代码
services:
  jayden-test-webapi-dev: # 服務名稱
    image: 192.168.1.100:8090/test/jayden-test-webapi-bridge:v1 # Harbor倉庫的镜像
    container_name: jayden-test-webapi-compose-bridge-dev # 容器名字
    restart: unless-stopped # 除非手動停止,不然一直重啟
    ports:
      # 將宿主機的8000和4330端口映射到容器內的80和433端口
      - "8000:80"
      - "4330:433"
    # 容器內監聽端口(外部不能直接訪問)
    expose:
      - "80"
      - "443"      
    environment:
      - ASPNETCORE_ENVIRONMENT=Development # 配置環境變量
      #- ASPNETCORE_URLS=http://+:8000 # .NET監聽所有界面
      # 其他環境變量,例如連接字符串:
      # - ConnectionStrings__DefaultConnection=...
    networks: # 配置環境變量
       - myhost

  jayden-test-webapi-pro: # 服務名稱
    image: 192.168.1.100:8090/test/jayden-test-webapi-bridge:v1 # Harbor倉庫的镜像
    container_name: jayden-test-webapi-compose-bridge-pro # 容器名字
    restart: unless-stopped # 除非手動停止,不然一直重啟
    ports:
      # 將宿主機的8000和4330端口映射到容器內的80和433端口
      - "8001:80"
      - "4331:433"
    # 容器內監聽端口(外部不能直接訪問)
    expose:
      - "80"
      - "443"      
    environment:
      - ASPNETCORE_ENVIRONMENT=Production # 配置環境變量
      #- ASPNETCORE_URLS=http://+:8000 # .NET監聽所有界面
      # 其他環境變量,例如連接字符串:
      # - ConnectionStrings__DefaultConnection=...
    networks: # 配置環境變量
       - myhost

networks: # 自定義網路
  myhost:
    driver: bridge

(2)compose up启动.NET应用容器时加入该网络,并指定容器名(如jayden-test-webapi-compose-bridge-dev,jayden-test-webapi-compose-bridge-pro):

bash 复制代码
# 启动所有容器
docker compose --file /opt/docker-ha/docker-compose-bridge.yml up -d
# 停止所有容器
docker compose --file /opt/docker-ha/docker-compose-bridge.yml down

这里启动两个容器jayden-test-webapi-compose-bridge-dev,jayden-test-webapi-compose-bridge-pro同时都加入了自动生成的docker-ha_myhost网络。如下图所示:

以上就是docker- compose编排自定义Bridge network模式的方式。至于docker- compose方法,后续抽时间再单独来讲解。

3.Host模式

3.1.run Host模式

启动容器时添加 --network host,容器内的进程直接绑定宿主机端口,无需端口映射。因为我提前发布一个http指定端口为8000的镜象到Harbor私人仓库去了(具体net操作:launchSettings配置把Container (Dockerfile)环境变量选项environmentVariables. ASPNETCORE_URLS修改为http://+:8000;Dockerfile配置把EXPOSE修改为8000端口,加入环境变量指向ENV ASPNETCORE_URLS=http://+:8000),所以需要提前pull该镜象到对应服务器去:

bash 复制代码
docker run -d \
  --name jayden-test-webapi-run-host-dev \ # 容器名字
  --restart unless-stopped \ # 除非手動停止,不然一直重啟
  --network host \ # 自定義網路
  -e APP_PORT=8000 \ # 指定端口
  -e ASPNETCORE_ENVIRONMENT=Development \ # 配置環境變量
  --log-opt max-size=50m \ # 單一Log文檔最大限制為50MB
  --log-opt max-file=5 \ # 最多保留5個Log文檔
  192.168.1.100:8090/test/jayden-test-webapi-host:v1 # Harbor倉庫的镜像

这里启动一个容器jayden-test-webapi-run- host-dev加入了host网络。如下图所示:

3.2.docker-compose Host模式

创建并编辑docker-compose.yml输入如下内容:

bash 复制代码
version: '3.8'

services:
  jayden-test-webapi-dev: # 服務名稱
    image: 192.168.1.100:8090/test/jayden-test-webapi-host:v1 # Harbor倉庫的镜像
    container_name: jayden-test-webapi-compose-host-dev # 容器名字
    restart: unless-stopped # 除非手動停止,不然一直重啟 
    environment:
      - ASPNETCORE_ENVIRONMENT=Development # 配置環境變量
    network_mode: host # 配置特定网络

compose up启动.NET应用容器时加入该网络,并指定容器名(如jayden-test-webapi-compose-host-dev),如下图所示:

4.总结

4.1 .Bridge

(1)适合应用场景:

单机开发、测试,以及需要隔离容器网络的环境。
(2)优点:

容器间通过DNS自动解析,解耦了IP变化。

与默认bridge相比,自定义bridge提供更好的隔离和自动服务发现。

可通过docker-compose轻松管理,网络自动创建。
(3)缺点:

多了一层NAT转换,性能略低于Host模式。

跨主机通信困难,需要额外配置端口映射或使用代理。

4.2.Host

(1)适合应用场景:

对网络性能要求极高(如视频流、高频交易),或容器需要大量端口映射的场景(如监控agent、负载均衡器nginx)。
(2)优点:

网络性能接近原生,无额外开销。

无需端口映射,自动暴露所有端口,方便调试。
(3)缺点:

缺乏隔离性,容器与主机共用网络栈,易产生端口冲突。

安全风险大,容器内程序可监听主机所有网络接口。

参考资料:

Docker网络管理:https://docs.docker.com/engine/network/drivers/

相关推荐
sanyii3131311 小时前
k8s核心资源Pod-主容器之存活性探测
云原生·容器·kubernetes
小二·2 小时前
Go 语言系统编程与云原生开发实战(第21篇)
开发语言·云原生·golang
小二·2 小时前
Go 语言系统编程与云原生开发实战(第20篇)
开发语言·云原生·golang
weixin_3954489115 小时前
cursor日志0224
eureka·flink·etcd
EverydayJoy^v^17 小时前
Kubernetes 知识点(1)——基础依赖
云原生·容器·kubernetes
hopsky18 小时前
Docker Compose 启动的容器内存 监控
docker·容器·eureka
海兰20 小时前
Docker部署OpenClaw及常见问题解决(win11)
docker·容器·eureka
wyyl19870820 小时前
北京奶茶原料定制厂家
云原生
nxb5561 天前
云原生keepalived实验设定
linux·运维·云原生