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

Docker 高级管理——容器通信技术与数据持久化

目录

一、Docker 容器的网络模式

1. Bridge 模式

2.  Host 模式

3. Container 模式

4. None 模式

5. Overlay 模式

6. Macvlan 模式

7. 自定义网络模式

 二、端口映射

1. 端口映射

2. 随机映射端口

3. 指定映射端口

(1)固定端口

(2)宿主机随机端口

三、容器互联

1. 使用 --link 选项

(1)创建源容器

(2)创建接收容器

(3)测试容器互联

四、容器间通信实现案例

1. docker network create 常用选项及示例

(一)--driver, -d

(二)--subnet

(三)--gateway

(四)--ip-range

(五)--internal

(六)--attachable

2. 容器间通信步骤

(一)创建自定义网络

(二)创建一个不在此自定义网络的容器

(三)创建两个容器,并加入自定义网络

(四)登录到容器,测试通信结果

五、数据持久化技术

一、数据卷基础概念

二、数据卷的作用

三、数据卷创建与使用

(一)匿名数据卷

(二)具名数据卷

四、数据卷共享

五、挂载主机目录 / 文件作为数据卷

(一)挂载主机目录案例(以 httpd 容器为例 )

(二)挂载主机文件 / 多目录案例(以 nginx 容器为例 )

六、Docker 数据管理注意事项总结


一、Docker 容器的网络模式

1. Bridge 模式

  • 含义
    Docker 创建的虚拟网络交换机(docker0),容器通过 veth pair 虚拟网卡接入隔离子网。

  • 特点

    • 容器获得独立私有 IP(如 172.17.0.2

    • 默认启用 NAT 地址转换

    • 同网络内容器互通,跨网络隔离

  • 作用

    • 容器网络隔离:避免与宿主机网络冲突

    • 便捷互通:同一 Bridge 网络内自动 DNS 解析

    • 访问外网:通过 iptables MASQUERADE 规则实现出向流量伪装

  • 配置

    # 创建自定义Bridge网络(解决默认网络无DNS问题)
    docker network create \--driver bridge \        # 网络驱动类型--subnet 192.168.5.0/24 \ # 明确子网范围(防IP冲突)--gateway 192.168.5.1 \   # 指定网关地址my-bridge                # 网络名称# 容器接入自定义网络
    docker run -d \--name web \  --network my-bridge \    # 绑定网络--ip 192.168.5.10 \      # 固定IP(可选)nginx

2.  Host 模式

  • 含义
    容器直接共享宿主机的网络命名空间,使用宿主机 IP 和端口资源。

  • 特点

    • 无独立网络栈(ifconfig 显示宿主机网卡)

    • 无 NAT 转发层

  • 作用

    • 网络零损耗:消除 NAT 性能开销(延迟降低 10%~15%)

    • 直接暴露服务:省去端口映射步骤

  • 配置

    docker run -d \--network host \  # 启用Host模式nginx            # 容器直接监听宿主机80端口

3. Container 模式

  • 含义
    新容器共享指定容器的网络命名空间(共用 IP、端口、MAC 等)。

  • 特点

    • 多容器共享同一网络身份

    • 通过 localhost 直接互访

  • 作用

    • 进程协同:实现 Sidecar 模式(如日志收集器监控应用容器)

    • 零延迟通信:容器间直接环回接口通信

  • 配置

    # 启动目标容器(提供网络栈)
    docker run -d --name web nginx# 新容器共享web容器的网络
    docker run -it \--network container:web \  # 绑定目标容器alpine \wget -qO- http://localhost  # 直接访问web容器的服务

4. None 模式

  • 含义
    容器无任何网络接口(仅保留 lo 环回)。

  • 特点

    • 极致网络隔离

    • 需手动配置网络栈

  • 作用

    • 安全沙箱:禁止所有网络通信(金融级数据处理)

    • 自定义网络:用户手动添加复杂网络配置

  • 配置

    docker run -it \--network none \  # 禁用网络alpine ip addr   # 仅显示lo接口

5. Overlay 模式

  • 含义
    基于 VXLAN 隧道封装的跨主机虚拟网络,用于集群环境。

  • 特点

    • 大二层网络抽象

    • 支持 TLS 加密通信

  • 作用

    • 跨主机直连:不同物理机上的容器互通如局域网

    • 服务发现:内置分布式 KV 存储(Swarm 集群)

  • 配置

    # 初始化Swarm集群(必需)
    docker swarm init --advertise-addr <宿主机IP># 创建加密Overlay网络
    docker network create \-d overlay \  --subnet 10.11.0.0/16 \  --opt encrypted \  # 启用数据加密swarm-net

6. Macvlan 模式

  • 含义
    为容器分配真实 MAC 地址,使其作为独立设备接入物理网络。

  • 特点

    • 容器直连物理网络

    • 需手动管理 IP

  • 作用

    • 物理网络集成:容器直接获取物理网段 IP

    • 绕过 NAT:外部设备可直接访问容器

  • 配置

    docker network create \-d macvlan \--subnet 192.168.1.0/24 \--gateway 192.168.1.1 \-o parent=eth0 \         # 绑定物理网卡-o macvlan_mode=bridge \ # MACVLAN模式macvlan-netdocker run -d \--network macvlan-net \--ip 192.168.1.105 \      # 必须指定未用IPnginx

7. 自定义网络模式

  • 含义
    用户根据需求创建的定制化网络,支持多种驱动(Bridge/Overlay/Macvlan等)。

  • 特点

    • 可定义子网/IP范围

    • 支持自动 DNS 服务发现

    • 网络策略精细化控制

  • 作用

    • 隔离环境:创建逻辑隔离的网络域

    • 服务发现:容器名自动解析为 IP

    • 跨主机通信:Overlay 驱动支持集群

  • 配置

    # 创建自定义Bridge网络
    docker network create \--driver bridge \        # 网络驱动类型--subnet 10.7.0.0/16 \   # 自定义子网--gateway 10.7.0.1 \     # 网关地址--ip-range 10.7.1.0/24 \ # IP分配范围--attachable \           # 允许运行中容器接入my-network              # 网络名称# 容器加入自定义网络
    docker run -d --name web --network my-network nginx

 二、端口映射

1. 端口映射

  • 含义:建立宿主机端口与容器端口的流量转发通道。

  • 特点

    • 基于 iptables DNAT 规则

    • 支持 TCP/UDP 协议

  • 作用

    • 暴露容器服务到外部网络

    • 解决容器网络隔离导致的访问限制

2. 随机映射端口

  • 含义:由 Docker 自动分配宿主机可用端口。

  • 作用

    • 避免端口冲突

    • 快速测试多实例服务

  • 配置

    # 映射所有EXPOSE声明的端口
    docker run -d -P nginx  # 大写P参数# 查看映射关系
    docker port <容器名>
    # 输出示例:80/tcp -> 0.0.0.0:32768#查看进程状态
    docker ps -a
    

3. 指定映射端口

docker run 用于创建并启动新的容器,通过-p可以指定容器端口到宿主机端口的映射

(1)固定端口

本质:将宿主机指定端口永久绑定到容器端口。
配置

# 基础语法:-p <宿主机端口>:<容器端口>[/协议]
docker run -d -p 8080:80 nginx  # 宿主机8080 → 容器80# 绑定特定IP(仅该IP可访问)
docker run -d -p 192.168.1.100:8080:80 nginx# 多协议支持
docker run -d \-p 80:80/tcp \    # TCP协议-p 53:53/udp      # UDP协议dns-server# 端口范围映射
docker run -d -p 8000-8010:8000-8010 port-app
(2)宿主机随机端口

本质:由 Docker 自动分配宿主机可用端口。
配置

# 随机绑定宿主机端口到容器指定端口
docker run -d -p 80 nginx  # 查看端口:docker port <容器名># 随机绑定TCP和UDP端口
docker run -d -p 80/tcp -p 53/udp dual-protocol-app# 批量随机映射(容器EXPOSE的所有端口)
docker run -d -P nginx  # 大写P参数

查看映射

docker port my-container
# 输出:80/tcp -> 0.0.0.0:32768
#       443/tcp -> 0.0.0.0:32769

三、容器互联

容器互联(Container Networking) 是 Docker 中实现容器间通信的核心机制,其核心逻辑为:
通过虚拟网络层,使多个容器在隔离环境中安全、高效地交换数据,无需依赖物理网络配置。

1. 使用 --link 选项

  • 含义:在容器间建立单向网络连接。

  • 特点

    • 自动更新 /etc/hosts 文件

    • 注入环境变量

  • 作用

    • 实现容器间基础通信

    • 提供简单的服务发现

(1)创建源容器
docker run -dit --name web01 centos:7
(2)创建接收容器
docker run -dit --name web02 --link web01:myweb01 centos:7
(3)测试容器互联
#登录
docker exec -it web02 /bin/bash#查看
cat /etc/hosts#测试
ping myweb01

四、容器间通信实现案例

因 --link 选项渐被弃用,推荐用 Docker 网络实现容器互联,docker network create 用于创建自定义网络,支撑容器间及容器与外部通信。

1. docker network create 常用选项及示例

(一)--driver, -d

指定网络驱动程序,默认 bridge ,常见驱动:

  • bridge:单 Docker 主机容器间通信,示例 :docker network create -d bridge my_bridge_network
  • host:容器用宿主机网络接口,无网络隔离
  • overlay:多 Docker 主机跨主机网络,用于 Docker Swarm 集群
  • macvlan:给容器分配 MAC 地址,模拟独立物理设备
(二)--subnet

指定网络子网,用 CIDR 表示法,示例 :docker network create --subnet=172.18.0.0/16 my_subnet_network

(三)--gateway

指定网络网关 IP 地址,示例 :

docker network create \
--subnet=172.19.0.0/16 \
--gateway=172.19.0.1 \
my_gateway_network
(四)--ip-range

指定容器可用 IP 地址范围,示例 :

docker network create \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
--ip-range=172.20.1.0/24 \
my_ip_range_network

(五)--internal

设为内部网络,容器无法访问外部网络,示例 :docker network create --internal my_internal_network

(六)--attachable

允许独立容器(非服务器容器 )连入网络,示例 :docker network create --attachable my_attachable_network

2. 容器间通信步骤
(一)创建自定义网络

执行 docker network create my_net ,先构建容器通信的网络基础。

(二)创建一个不在此自定义网络的容器

docker run -dit --name web03 centos:7

(三)创建两个容器,并加入自定义网络

docker run -dit --name pc01 --net=my_net centos:7

docker run -dit --name pc02 --net=my_net centos:7

(四)登录到容器,测试通信结果

docker exec -it pc01 /bin/bash

ping pc02 #通

ping web03 #不通

五、数据持久化技术

一、数据卷基础概念

Docker 数据卷(Data Volumes)是实现容器与宿主机数据持久化存储、共享的机制。它是供一个或多个容器使用的特殊目录,绕过容器文件系统,直接关联宿主机目录 / 文件,容器删除后数据卷数据仍留存,保障数据持久化 。

二、数据卷的作用

  1. 数据持久化:容器生命周期短暂,内部文件系统数据随容器删除消失,数据卷将数据存宿主机,避免因容器删除丢失 。

  2. 数据共享:多个容器可挂载同一数据卷,实现配置文件、日志等数据共享,适配需共享数据的场景 。

  3. 数据备份和恢复:数据存于宿主机,便于对数据卷执行备份、恢复操作 。

  4. 分离数据和应用:数据存数据卷,让容器镜像更轻巧(仅含应用程序),提升容器可移植性与可维护性 。

三、数据卷创建与使用

(一)匿名数据卷

创建容器时用 -v 或 --volume 参数创建、挂载。如:

docker run -dit -v /data1 -v /data2 --name web04 centos:7

会在容器内建 /data1/data2 数据卷,宿主机对应存储目录为 /var/lib/docker/volumes/ 下自动分配的目录,容器删除后宿主机数据仍在 。可进入容器(docker exec -it web04 /bin/bash )验证数据卷目录。

(二)具名数据卷
  1. 创建:通过 docker volume create my_volume 命令,创建名为 my_volume 的具名数据卷,便于管理识别 。
  2. 挂载使用:创建容器时挂载,如 docker run -d -v my_volume:/data --name my_container nginx ,先建具名卷,再挂载到容器 /data 目录 。

四、数据卷共享

  1. 借助 --volumes-from 参数,让新容器挂载已有容器的数据卷,实现数据共享。示例:
    docker run -dit --volumes-from web04 --name web05 centos:7 /bin/bash

    新容器 web05 会挂载 web04 已挂载的数据卷,即便 web04 删除,只要数据卷未删,web05 仍能访问数据;且多个容器共享数据卷时,数据修改会影响所有挂载该卷的容器 。

五、挂载主机目录 / 文件作为数据卷

(一)挂载主机目录案例(以 httpd 容器为例 )
docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web06 httpd

将宿主机 /data1 目录挂载到容器 /usr/local/apache2/htdocs 目录,可在宿主机 /data1 建测试文件(如 echo "ni hao">/data1/index.html ),通过 curl 192.168.10.101:8080 访问验证 。

(二)挂载主机文件 / 多目录案例(以 nginx 容器为例 )
  1. 准备工作:在宿主机建挂载目录(mkdir -p /www/{conf,html} ),将 nginx 配置文件放 /www/conf ,网页代码放 /www/html 。

  2. 创建容器挂载

    docker run -d -p 9090:80 \
    -v /www/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /www/html:/www/html \
    -v /www/nginx/log:/var/log/nginx \
    --name web07 nginx /bin/bash -c "nginx"

    或简化启动命令(利用 nginx 默认启动指令 ):

    docker run -d -p 9090:80 \
    -v /www/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /www/html:/www/html \
    -v /www/nginx/log:/var/log/nginx \
    --name web08 nginx "nginx"

    实现主机文件、多目录挂载到 nginx 容器对应位置,需注意挂载文件时,宿主机要先有对应文件,否则会创建同名目录致容器内无法正常使用文件 。

    数据卷通过灵活的创建、挂载、共享等操作,满足 Docker 容器在数据持久化、共享协作等场景的需求,是 Docker 数据管理的核心手段之一 。

六、Docker 数据管理注意事项总结

在 Docker 进行数据管理时,需从多维度保障数据有效管理,具体注意事项如下:

  1. 类型适配场景:依据需求选数据卷类型,匿名卷(创建简,管不便 )存临时中间数据(如编译文件 );具名卷(易管理共享 )存持久化高频使用数据(如数据库 );挂载主机目录卷适配主机交互场景(共享配置、数据 )。

  2. 路径规范使用:挂载主机目录作数据卷,务必用绝对路径,否则挂载失败。

  3. 数据卷定期清理:借 docker volume ls 查数据卷,用 docker volume rm 清理不用的匿名 / 具名卷,释放磁盘空间。

  4. 容器数据持久化:容器文件系统数据易失,需持久化的数据(尤其是数据库、日志等关键数据 )存数据卷;多容器挂载同卷要处理并发,可在应用层设同步机制(锁、事务 );关键数据(如 MySQL 数据目录 /var/lib/mysql )绑定数据卷,保障可恢复 。

http://www.lqws.cn/news/480511.html

相关文章:

  • Neo4j 中存储和查询数组数据的完整指南
  • 删除node并且重装然后重装vue
  • day039-nginx配置补充
  • 从 Cluely 融资看“AI 协同开发”认证:软件考试应该怎么升级?
  • 【unitrix】 4.0 类型级数值表示系统(types.rs)
  • 如何用AI开发完整的小程序<7>—让AI微调UI排版
  • 深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台
  • Redis-CPP 5大类型操作
  • 深入解析C#数组协变与克隆机制
  • c#websocket心跳包自定义实现,支持异步操作的取消
  • C++——继承
  • 7.4.1_1B树
  • 从零开始手写redis(16)实现渐进式 rehash map
  • 《福格行为模型》
  • 鲲鹏服务器创建Zookeeper镜像实例
  • 【LLIE专题】NTIRE 2025 低照度图像增强第一名方案解读
  • C#设计模式-Builder-生成器-对象创建型模式
  • 编程江湖-设计模式
  • CentOS7中源码编译安装freeswitch
  • [project-based-learning] 开源贡献指南 | 自动化链接验证 | Issue模板规范
  • 系统思考:救火先放火
  • 详解Redis数据库和缓存不一致的情况及解决方案
  • sc4336p硬件设计上电时序
  • DeepSeek技术解析:开源大模型的创新突围之路
  • 基于Python Websockets的客户端程序,能够连接服务端、处理ping/pong、发送订阅请求并保持长连接
  • 《算法笔记》之二(笔记)
  • 基于split-Bregman算法的L1正则化matlab仿真,对比GRSR算法
  • RA4M2开发IOT(8)----IIC驱动OLED
  • 分库分表下的 ID 冲突问题与雪花算法讲解
  • Qt项目,记事本