当前位置: 首页 > news >正文

七.Docker网络

七.Docker网络

  • 1. 概述
  • 2.常见命令
  • 3.网络模式

1. 概述

Docker 网络是容器间以及容器与外部网络通信的基础架构,提供了多种网络模式来满足不同的应用场景

Docker 提供多种网络驱动来适应不同需求:
bridge: 默认网络模式
host: 共享主机网络
none: 无网络
overlay: 跨主机网络
macvlan: 物理网络连接

Docker启动后会产生一个名称为docker0的虚拟网络
在这里插入图片描述
查看docker网络模式:默认创建3种网络模式

docker network ls

在这里插入图片描述

2.常见命令

查看网络:docker network Is
#基本用法,列出所有网络
docker network Is
# 过滤显示
docker network ls --filter driver=bridge
docker network ls --filter name=my-network
docker network ls --filter label=env=production查看网络详细信息:docker network inspect 网络名字
# 查看默认 bridge 网络
docker network inspect bridge# 查看指定网络
docker network inspect my-network创建一个网络:docker network create 网络名字
# 创建默认 bridge 网络
docker network create my-network
# 创建自定义 subnet 网络
docker network create --subnet=192.168.1.0/24 my-network
# 创建带 IP 范围的网络
docker network create \--subnet=192.168.1.0/24 \--ip-range=192.168.1.128/25 \
my-network
# 创建不同驱动的网络
docker network create --driver bridge my-bridge
docker network create --driver overlay my-overlay删除网络:docker network rm网络名字
# 删除单个网络
docker network rm my-network
# 删除多个网络
docker network rm network1 network2
# 删除所有未使用的网络
docker network prune
# 删除时确认提示
docker network prune -f连接容器到网络:docker network connect
# 连接运行中的容器到网络
docker network connect my-network my-container
# 连接时指定别名
docker network connect --alias web my-network my-container
# 连接时指定 IP 地址
docker network connect --ip 192.168.1.10 my-network my-container断开容器网络连接:docker network disconnect
# 断开容器网络连接
docker network disconnect my-network my-container
# 强制断开连接
docker network disconnect -f my-network my-container端口映射相关
# 发布多个端口
docker run -p 8080:80 -p 8443:443 nginx
# 发布所有暴露端口
docker run -P nginx
# 绑定到特定 IP
docker run -p 127.0.0.1:8080:80 nginx
# 发布 UDP 端口
docker run -p 53:53/udp bind自定义网络创建示例
# 创建生产环境网络
docker network create \--driver bridge \--subnet=172.20.0.0/16 \--ip-range=172.20.240.0/20 \--gateway=172.20.0.1 \--label env=production \--opt com.docker.network.bridge.name=prod-bridge \prod-network# 创建开发环境网络
docker network create \--driver bridge \--subnet=172.21.0.0/16 \dev-network网络连通性测试
# 在容器内测试网络
docker exec container-name ping google.com
docker exec container-name curl http://service-name:8080
# 查看容器网络配置
docker exec container-name ip addr
docker exec container-name route -n
# 查看容器网络统计
docker exec container-name netstat -i端口检查
# 查看容器端口映射
docker port container-name
# 在主机上检查端口占用
netstat -tlnp | grep :8080
ss -tlnp | grep :8080Docker 网络调试
# 查看 Docker 网络详细日志
docker info | grep -i network
# 查看网络驱动信息
docker info --format '{{.Plugins.Network}}'
# 检查网络配置
docker network ls -q | xargs docker network inspect网络性能和安全
# 创建网络时设置 MTU, 是网络接口能够传输的最大数据包大小,以字节为单位
docker network create \--opt com.docker.network.driver.mtu=1454 \my-network
# 在 daemon.json 中全局设置
{"mtu": 1454
}# 创建内部网络(无外网访问)
docker network create \--internal \internal-network# 禁用网络服务发现
docker network create \--opt com.docker.network.bridge.enable_icc=false \isolated-network

3.网络模式

docker容器内部的ip是有可能会发生改变的
在这里插入图片描述

  • bridge模式:使用-network bridge指定,默认使用docker0

    Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络,让主机和容器之间可以通过网桥相互通信。

    Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

    网桥docker0创建一堆虚拟设备接口叫veth,每个容器实例内部也有一块网卡,每个接口叫eth0;docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。
    在这里插入图片描述

  • host模式:使用-network host指定

    直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。

    容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
    在这里插入图片描述

  • none模式:使用-network none指定
    在none模式下(禁用网络),不为Docker容器进行任何网络配置。即Docker容器没有网卡、IP、路由等信息,只有一个lo(127.0.0.1)。
    例:docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8

  • container模式:使用–network container:容器NAME或者容器ID
    新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
    例:docker run -it -network container:name1 --name name2 centos /bin/sh

  • 自定义网络
    自定义网络的核心作用

    1. 网络隔离与安全
      实现不同应用间的网络隔离
      控制容器间的通信权限
      提供更安全的网络环境
    2. 服务发现与DNS解析
      容器间可通过容器名直接通信
      自动DNS解析,无需手动配置IP
      支持网络别名实现负载均衡
    3. 灵活的网络拓扑
      可动态连接/断开网络
      支持多网络连接
      可自定义IP地址和子网
    4. 跨主机通信
      Overlay网络支持集群环境
      实现分布式应用部署

    不同场景的解决方案
    场景一:单主机多应用隔离
    适用情况:同一台主机上运行多个独立应用

    # 为每个应用创建独立网络
    docker network create app1-network
    docker network create app2-network# 应用1的容器组
    docker run -d --name app1-db --network app1-network mysql:8.0
    docker run -d --name app1-web --network app1-network nginx:alpine# 应用2的容器组
    docker run -d --name app2-db --network app2-network postgres:13
    docker run -d --name app2-web --network app2-network nginx:alpine
    

    优势:
    完全隔离不同应用的网络通信
    防止意外的网络访问
    简化应用管理
    场景二:微服务架构部署
    适用情况:前后端分离的微服务应用

    # 创建分层网络
    docker network create frontend-network
    docker network create backend-network# 数据库层(仅后端网络)
    docker run -d --name database --network backend-network mysql:8.0# 应用服务层(连接前后端网络)
    docker run -d --name api-server \--network backend-network \--network-alias api \my-api:latest# Web前端(仅前端网络)
    docker run -d --name web-server \--network frontend-network \nginx:alpine# 反向代理(连接前端网络,可访问API)
    docker run -d --name reverse-proxy \--network frontend-network \--network backend-network \nginx:alpine

    优势:
    明确的服务边界
    控制数据流向
    提高安全性
    场景三:开发测试环境
    适用情况:为不同开发团队或项目创建独立环境

    # 为不同团队创建网络
    docker network create teamA-dev-network
    docker network create teamB-dev-network# 团队A的开发环境
    docker run -d --name teamA-mysql --network teamA-dev-network mysql:8.0
    docker run -d --name teamA-redis --network teamA-dev-network redis:alpine
    docker run -d --name teamA-app --network teamA-dev-network my-app:dev# 团队B的开发环境
    docker run -d --name teamB-mysql --network teamB-dev-network mysql:8.0
    docker run -d --name teamB-redis --network teamB-dev-network redis:alpine
    docker run -d --name teamB-app --network teamB-dev-network my-app:dev

    优势:
    环境完全隔离
    避免资源冲突
    便于并行开发
    场景四:负载均衡与高可用
    适用情况:需要实现服务负载均衡

    # 创建服务网络
    docker network create service-network# 多个应用实例
    docker run -d --name web1 --network service-network --network-alias web nginx:alpine
    docker run -d --name web2 --network service-network --network-alias web nginx:alpine
    docker run -d --name web3 --network service-network --network-alias web nginx:alpine# 负载均衡器
    docker run -d --name load-balancer \--network service-network \-p 80:80 \haproxy:alpine

    优势:
    自动服务发现
    内置负载均衡
    动态扩展支持
    场景五:跨主机集群部署
    适用情况:Docker Swarm或Kubernetes集群环境

    # 创建overlay网络(适用于Swarm)
    docker network create -d overlay \--subnet=192.168.1.0/24 \--attachable \cluster-network# 在不同节点部署服务
    docker service create \--name database \--network cluster-network \mysql:8.0docker service create \--name web \--network cluster-network \--replicas 3 \nginx:alpine

    优势:
    跨主机通信
    服务编排支持
    高可用性
    场景六:网络调试与监控
    适用情况:需要监控网络流量或调试网络问题

    # 创建监控网络
    docker network create monitoring-network# 应用容器
    docker run -d --name app --network monitoring-network my-app:latest# 网络监控容器(连接同一网络)
    docker run -d --name network-monitor \--network monitoring-network \--cap-add NET_ADMIN \nicolaka/netshoot \tcpdump -i any -w /data/capture.pcap

    优势:
    便于网络问题排查
    支持流量监控
    不影响应用容器
    在这里插入图片描述

http://www.dtcms.com/a/560816.html

相关文章:

  • 怎么做免费视频网站吗网站建设哪儿好
  • 推荐优质wordpress外贸网站主题
  • TDengine 数学函数 ASCII 用户手册
  • @Builder注解导致mybatis类型匹配错误 Cannot determine value type from string
  • AI模型开发 | 从零部署Deepseek OCR模型,零门槛开发PDF文档解析工具
  • Linux INPUT 子系统实验
  • 1000套实习报告模板大合集+多行业多专业实习总结实践报告素材
  • 百度网站快速优化国内flask做的网站
  • Spring AI--Prompt、多轮对话实现方案
  • 网页模板免费下载网站广州页面制作公司
  • Java:继承与多态
  • 10. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--Web API 接口与前端集成:部署与生产运维:稳定性、可观测与成本
  • 网站开发招标网网站免费注册会员怎么做
  • linux系统中网络编程的实现
  • Vue-github 用户搜索案例
  • GD32F407VE天空星开发板的电压电流检测
  • 网站优化文章怎么做蔡甸城乡建设局网站
  • 中小企业网站开发韵茵全屋定制家具品牌排行榜前十名
  • 分库分表MyCat 架构迁移 OceanBase | 百丽核心财务系统迁移经验总结与问题汇总
  • joomla 企业网站模板沈阳网站优化 唐朝网络
  • Flink 优化-反压处理
  • AI代码开发宝库系列:LangChain 工具链:从LCEL到实际应用
  • 泉州网站排名优化十大免费论文网站
  • 高校招生网站建设做网站一定要效果图吗
  • 学习笔记四:性能度量
  • 使用JavaScript和Node.js构建简单的RESTful API
  • 【生活】做蛋糕
  • (论文速读)EgoLife:走向自我中心的生活助手
  • 大模型时代,我们该如何学习?从“知识存储器”到“思维策展人”的蜕变
  • vc_redist.x64.exe安装方法,解决软件游戏缺少运行库问题