Docker 容器通信与数据持久化

目录

简介

一、Docker 容器通信

1. Docker 网络模式

2. Bridge 模式

3. Host 模式

4. Container 模式

5. Overlay 模式

6. 端口映射:容器与外部的桥梁

7. 容器互联:从 --link 到自定义网络

二、Docker 数据持久化

1. 数据卷:Docker 持久化的机制

2. 匿名数据卷

3. 具名数据卷

4. 容器间数据共享:--volumes-from 实现数据传递

5. 挂载主机目录

三、注意事项

1. 网络配置

2. 数据持久化

四、总结


简介

在现代软件开发与部署中,Docker 容器化技术已成为不可或缺的基础设施。随着应用规模的扩大,容器间的通信效率与数据持久化管理成为两大核心挑战。本文将深入探讨 Docker 高级管理中的容器通信技术与数据持久化方案,帮助读者构建高效、可靠的容器化应用架构。

一、Docker 容器通信

1. Docker 网络模式

Docker 提供了丰富的网络模式,满足不同场景下的通信需求:

网络模式

关键参数

核心特性

适用场景

host

--network host

共享宿主机网络栈,无网络命名空间

高性能、无隔离需求的服务

container

--network container: 目标容器

共享指定容器的网络配置

紧密耦合的容器组(如应用 + 日志收集器)

none

--network none

仅保留回环接口,无外部网络

高安全需求、手动配置网络的场景

bridge

默认模式,-d bridge

通过 docker0 网桥实现容器互联

单主机多容器通信(默认模式)

overlay

-d overlay

基于 VXLAN 跨主机容器通信

Docker Swarm 集群

macvlan

-d macvlan

为容器分配独立 MAC 地址

高性能网络、直接接入物理网络

自定义

docker network create

灵活配置子网、网关等参数

定制化网络需求

2. Bridge 模式

Bridge 模式是 Docker 的默认网络模式,工作原理如下:

  • 自动创建 docker0 虚拟网桥
  • 容器通过 veth pair 连接到网桥
  • 宿主机通过 NAT 实现容器与外部网络通信

实战示例:创建自定义 Bridge 网络

# 创建名为 my-net 的 bridge 网络
docker network create -d bridge my-net
# 解释:-d 指定驱动类型为 bridge,my-net 是网络名称# 查看所有网络
docker network ls
# 输出包含网络 ID、名称、驱动类型等信息# 运行容器并连接到 my-net 网络
docker run -itd --rm --name busybox1 --network my-net busybox sh -c 'while true; do echo hello; done'
# 解释:
# -itd:交互模式、守护进程运行、后台运行
# --rm:容器停止后自动删除
# --name:指定容器名称
# --network:指定连接的网络
# busybox:基础镜像
# sh -c 'while true; do echo hello; done':容器启动后执行的命令# 另一个容器加入同一网络并测试通信
docker run -it --rm --name busybox2 --network my-net busybox sh
# 在容器内执行 ping busybox1 可直接通过容器名通信

3. Host 模式

Host 模式让容器直接使用宿主机的网络栈,适用于对网络性能要求极高的场景:

# 以 host 模式运行容器
docker run -tid --net=host --name docker_host1 busybox
# 解释:--net=host 指定使用宿主机网络,容器将共享宿主机的 IP 和端口# 进入容器查看网络配置
docker exec -it docker_host1 sh
ifconfig
# 输出显示容器使用宿主机的网络接口(如 ens33),IP 与宿主机一致

4. Container 模式

Container 模式允许容器共享另一个容器的网络命名空间,适用于紧密耦合的服务组合:

# 创建基础容器 host1
docker run -tid --name host1 busybox# 创建新容器 host2,共享 host1 的网络
docker run -itd --net=container:host1 --name host2 busybox# 验证网络配置一致性
docker exec -it host1 ifconfig
docker exec -it host2 ifconfig
# 两个容器的 IP、MAC 地址完全一致

5. Overlay 模式

Overlay 模式基于 VXLAN 技术,是 Docker Swarm 集群的核心网络方案:

# 在 Swarm 集群中创建 Overlay 网络
docker network create -d overlay my_overlay_network
# 解释:-d overlay 指定使用 Overlay 驱动,支持跨主机通信# 在集群中部署服务并连接到 Overlay 网络
docker service create --name my_service --network my_overlay_network nginx
# 解释:--service 创建集群服务,--network 指定使用 Overlay 网络

6. 端口映射:容器与外部的桥梁

Docker 通过端口映射实现容器服务对外暴露:

  • ​-P​​(大写):自动随机映射容器所有暴露端口
  • ​-p​​(小写):指定宿主机端口到容器端口的映射

随机端口映射示例

# 随机映射 Nginx 容器的 80 端口
docker run --rm -d -P nginx
# 解释:--rm 容器停止后自动删除,-P 随机映射所有暴露端口# 查看映射结果
docker ps
# 输出显示宿主机随机端口(如 32768)映射到容器 80 端口

指定端口映射示例

# 将容器 80 端口映射到宿主机 8080 端口
docker run --rm -d -p 8080:80 nginx
# 解释:-p 格式为 [宿主机端口]:[容器端口],可通过 http://宿主机 IP:8080 访问容器服务# 宿主机随机端口映射(仅指定容器端口)
docker run --rm -d -p 80 nginx
# 解释:宿主机端口由 Docker 自动分配,适用于快速测试

7. 容器互联:从 --link 到自定义网络

早期 Docker 使用 ​​--link​​ 实现容器互联,但该方式已被弃用,推荐使用自定义网络:

传统 --link 方式(不推荐)

# 创建源容器 web01
docker run -dit --name web01 centos:7# 创建接收容器 web02,通过 --link 互联
docker run -dit --name web02 --link web01:myweb01 centos:7
# 解释:--link web01:myweb01 允许 web02 通过 myweb01 别名访问 web01# 测试互联
docker exec -it web02 bash
cat /etc/hosts  # 查看域名解析
ping myweb01    # 可通过别名通信

推荐方案:自定义网络实现容器互联

# 创建自定义网络 my_net
docker network create my_net# 创建不在该网络的容器 web03
docker run -dit --name web03 centos:7# 创建两个容器并加入 my_net 网络
docker run -dit --name pc01 --net=my_net centos:7
docker run -dit --name pc02 --net=my_net centos:7# 测试通信(pc01 中执行)
ping pc02  # 通,同一网络内可直接通过容器名通信
ping web03 # 不通,不在同一网络

二、Docker 数据持久化

1. 数据卷:Docker 持久化的机制

数据卷是 Docker 实现数据持久化的关键,具有以下特性:

  • 绕过容器文件系统,直接挂载宿主机目录
  • 容器删除后数据不丢失
  • 支持多容器共享数据

2. 匿名数据卷

# 创建容器并挂载匿名数据卷
docker run -dit -v /data1 -v /data2 --name web04 centos:7
# 解释:
# -v /data1:在容器内创建 /data1 目录作为数据卷
# Docker 自动在宿主机 /var/lib/docker/volumes 下生成对应目录# 验证数据持久化
docker exec -it web04 bash
touch /data1/test.txt  # 在容器内创建文件
exitdocker rm -f web04  # 删除容器# 查看宿主机数据卷(需进入 Docker 数据目录)
# 数据仍保留在宿主机,新容器挂载后可访问

3. 具名数据卷

# 创建具名数据卷
docker volume create my_volume
# 解释:创建名为 my_volume 的数据卷,存储在宿主机指定位置# 挂载具名数据卷到容器
docker run -d -v my_volume:/data --name my_container nginx
# 解释:-v my_volume:/data 将具名卷挂载到容器 /data 目录# 查看数据卷详情
docker volume inspect my_volume
# 输出包含数据卷驱动、挂载路径等信息

4. 容器间数据共享:--volumes-from 实现数据传递

# 从已有容器 web04 挂载数据卷
docker run -dit --volumes-from web04 --name web05 centos:7
# 解释:--volumes-from web04 使 web05 共享 web04 的所有数据卷# 验证共享:在 web05 中修改数据卷文件,web04 可同步看到变化

5. 挂载主机目录

# 案例 1:挂载宿主机目录到 Web 容器
docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web06 httpd
# 解释:
# -p 8080:80:映射端口
# -v /data1:/usr/local/apache2/htdocs:将宿主机 /data1 目录挂载到容器 Web 根目录# 在宿主机创建测试文件
echo "ni hao" > /data1/index.html# 访问服务:http://宿主机 IP:8080 可看到文件内容
# 案例 2:多目录挂载(以 Nginx 为例)
# 先在宿主机准备目录
mkdir -p /www/{conf,html,nginx/log}# 创建容器并挂载多个目录
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"
# 解释:
# 分别挂载配置文件、网站内容、日志目录
# 实现容器配置与数据的持久化管理

三、注意事项

1. 网络配置

  • 生产环境避免使用 host 模式,优先使用自定义 bridge 网络或 overlay 网络
  • 容器间通信通过自定义网络实现,避免使用已弃用的 --link
  • 端口映射时明确指定宿主机端口,避免随机映射导致的管理混乱

2. 数据持久化

  • 关键数据(如数据库)必须使用具名数据卷或挂载主机目录
  • 定期清理无用数据卷:​​docker volume prune​
  • 多容器共享数据卷时,需考虑并发访问的数据一致性
  • 重要数据卷建议配置备份策略,如定时拷贝宿主机数据目录

四、总结

通过掌握多种网络模式(bridge/host/overlay 等)和端口映射机制,可构建灵活高效的容器通信架构;而数据卷技术(匿名卷 / 具名卷 / 主机挂载)则确保了数据的持久化与可管理性。

在实际应用中,建议根据业务场景选择合适的技术方案:单主机应用优先使用 bridge 网络与具名数据卷,集群应用采用 overlay 网络配合分布式存储。通过持续实践这些技术,可大幅提升 Docker 容器化应用的可靠性与可维护性,为微服务架构和云原生应用奠定基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911650.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教学类-89-08】20250624新年篇05——元宵节灯笼2CM黏贴边(倒置和正立数字 )

背景需求: 【教学类-89-06】20250220新年篇05——元宵节灯笼2CM黏贴边(3边形到50边形,一页1图、2图、4图,适合不同水平,适合不同阶段)-CSDN博客文章浏览阅读1.6k次,点赞35次,收藏27…

【DB2】SQL0104N An unexpected token “OCTETS“ was found following “……

db2创建表时报标题的错误,建表语句如下 db2 "CREATE TABLE YS.TEST_1(ID VARCHAR(64 OCTETS))"去掉octets就好了 经过测试,在9.7版本报错,在10.5.11没问题,怀疑版本差异导致 在官网查找资料,应该是10.5才…

暴雨以信创委员会成员单位身份参与南京专题活动

6月19日,中国电子工业标准化技术协会信息技术应用创新工作委员会(简称信创工委会)联合南京市工业和信息化局共同举办的“智启未来:AI赋能信息技术应用创新办公新势力”专题活动在南京成功举办。南京市工业和信息化局副局长代吉上、…

基于keepalived、vip实现高可用nginx (centos)

基于keepalived、vip实现高可用nginx (centos) 1、安装keepalived yum install keepalived2、选同一局域网空置ip作vip 我这里测试是: 主:192.168.163.134 副:192.168.163.135 vip:192.168.163.1403、ke…

使用 launch 启动 rviz2 并加载机器人模型

视频资料:《ROS 2机器人开发从入门到实践》6.2.2 在RViz中显示机器人_哔哩哔哩_bilibili 1、创建工作空间 chapt6_ws/src,创建包 fishrobot_description ros2 create fishrobot_description --build-type ament_cmake --license Apache-2.0 2、创建机器…

华为云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践

华为云FlexusDeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 …

Python学习Day41

学习来源:浙大疏锦行 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: …

数组题解——最长回文子串【LeetCode】

5. 最长回文子串 一、向右拓展 算法思路 你用res记录当前找到的最长回文子串。每次遍历到s[i]时,尝试找到以s[i]结尾的、比当前res更长的回文子串。 先尝试长度为len(res)2(即起点i-len(res)-1)的子串,看是不是回文。如果不是&…

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

🚀 从零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub 在 AI 项目开发中,构建统一的运行环境是一件非常重要的事情。使用 Docker 可以极大地提升部署效率、保证环境一致性。本文将手把手带你: ✅ 构建一个…

纪念抗战胜利知识答题pk小程序

纪念抗战胜利知识答题PK小程序通常有以下功能: 一、基础答题功能 题目展示:清晰呈现题目内容,支持文字、图片、音频或视频等多种形式的题目素材,且能按选择题、填空题、判断题等不同题型分类展示。答案提交与判断:用…

AI模型本质与学习范式解析

从统计学习(也就是数学)的角度来分析深度学习模型的本质。 频率派与贝叶斯派对模型本质理解的差异:前者认为学习参数估计,后者认为学习后验分布。不过这个问题下概率分布的视角更本质。 三个核心部分:任务类型分类&a…

【AI落地应用实战】Chaterm:重新定义终端操作的AI智能工具

目录 一、AI Agent 终端新范式二、Chaterm安装与基础功能体验2.1、源码安装与配置2.2、基础功能体验 三、Chaterm运维案例实践四、从 Chaterm 看智能终端工具的演进方向4.1 更低门槛:面向“非专业人员”的运维民主化4.2 更强扩展性:从工具到平台的演化 五…

IO多路复用——Select底层原理深度分析(流程图)

文章目录 1.kern_select 参数验证和初始化流程2. do_select() 详细实现流程3. 位图数据结构详解4. 文件描述符处理详细流程5. Poll方法调用链6. 等待机制实现7. 用户态处理就绪事件8. 性能瓶颈分析9. 与其他I/O多路复用对比 Select 整体调用流程: #mermaid-svg-766A…

多光谱扫描技术在实物建模中的应用:如何实现1:1真实材质还原

在实物建模领域,传统方式常常陷入尴尬境地:耗费大量时间精力构建的模型,材质看起来却与真实物体相差甚远,塑料质感的 “金属”、模糊不清的纹理,让模型失去了应有的真实感。而在文物保护、产品设计等对真实材质还原要求…

Python复杂网络分析和建模库之networkx使用详解

概要 在当今信息爆炸的时代,复杂网络无处不在。NetworkX是一个用于创建、操作和研究复杂网络结构、动态和功能的Python库。它提供了丰富的数据结构来表示各种类型的网络,如无向图、有向图、加权图等,并支持大量的图算法,包括最短路径计算、中心性分析、社区发现等。 安装 …

前端依赖升级完全指南:npm、pnpm、yarn 实践总结

在前端项目开发过程中,定期升级依赖不仅能享受新特性、修复安全问题,还能保证工具链长期稳定运行。本文全面总结 npm、pnpm、yarn 三大主流包管理器在 依赖包升级 方面的实践方法,并补充版本符、依赖安装的基础知识,适合新手与有经…

[持续集成]

学习目标 能够使用 Git 代码托管平台管理代码能够实现 jenkinspostman 的持续集成能够实现 jenkins代码 的持续集成 持续集成 概念 : 将自己工作成果持续不断地把代码聚集在一起,成员可以每天集成一次或多次相关工具 : git : 代码管理工具,自带本地仓库gitee : 远程代码管理…

FSMC控制LCD(TFTLCD:Z350IT002)显示案例

显存不一定要擦除,只要来一个地址就可以对其进行读写,而且一般的需求是不停的写入(不同的像素点给不同的值),所以是RAM(flash和E2PROM要擦除才能写入),由于FSMC没有DRAM所以我们只能…

云原生周刊:Argo CD v3.1 正式发布

开源项目推荐 Kubewall Kubewall 是一个轻量级的开源 Kubernetes 仪表盘,支持多集群管理,主打单二进制部署和浏览器访问,提供实时资源监控、YAML 编辑、拓扑视图、日志查看等功能。它使用 Go 与 React 构建,支持通过 Docker、He…

Aerotech系列(3)开发库介绍

库对象模型 名空间列表 NamespaceDescriptionAerotech.A3200 The main namespace of the Aerotech A3200 .NET library Aerotech.A3200.Callbacks Contains the classes that allow interacting with callbacks Aerotech.A3200.Commands Contains the classes that allows …