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.tpcf.cn/news/910601.html

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

相关文章

git操作案例 -设置远程分支,并提交到新远程新分支

文章目录 前言一、分析当前的问题二、修改远程仓库地址&#xff08;一&#xff09;修改远程仓库地址场景 现有保留远程分支场景替换现有远程分支 二、 找回已经提交的文件场景&#xff1a;提交后&#xff0c;代码在本地仓库但未推送 三、同步远程分支四、提交到新远程的新分支 …

mysql一张表,其中一个字段设置了唯一索引,又设置了普通索引,查询的时候很慢,没有走普通索引,是const

问题分析 在 MySQL 中&#xff0c;当一个字段同时存在唯一索引和普通索引时&#xff0c;查询优化器通常会优先选择最严格的索引&#xff08;即能最快缩小结果集的索引&#xff09;。在你的场景中&#xff0c;优化器选择了唯一索引并将查询视为const类型&#xff0c;这通常是高…

ARCGIS国土超级工具集1.6更新说明

ARCGIS国土超级工具集V1.6版本&#xff0c;功能已增加至60 个。本次更新在V1.5版本的基础上&#xff0c;除修复了使用时发现的若干小问题外&#xff0c;还更新及新增了若干工具。其中勘测定界工具栏更新了界址点西北角重排工具&#xff0c;新增了提示图斑起始点、指定图斑起始点…

零基础学习RabbitMQ(2)--Linux安装RabbitMQ

注意&#xff1a;这里使用的是ubuntu系统 1. 安装Erlang RabbitMQ需要Erlang语言的支持&#xff0c;在安装rabbitMQ之前需要安装Erlang #更新软件包 sudo apt-get update #安装erlang sudo apt-get install erlang 安装后输入 rel可查看Erlang版本&#xff1a; 输入halt().…

Centos进单用户模式

一、开机按E 二、修改里面的linux行 把ro 修改成rw init/sysroot/bin/sh 修改前&#xff1a; 修改后&#xff1a; 三、ctrl x退出&#xff0c;进入单用户模式

RabbitMQ 的工作流程

RabbitMQ 是一个消息中间件&#xff0c;实现了生产者消费者模型&#xff0c;可以用来接收、存储、转发消息。 专有名词介绍 要了解 RabbitMQ 的工作流程&#xff0c;我们需要先了解下面几个关键词&#xff1a; 1、Producer 生产者&#xff0c;即向 RabbitMQ 发送消息。 2…

HTTP——不同版本区别

目录 HTTP1.0和HTTP1.1的区别 HTTP1.1相比HTTP1.0性能上的改进&#xff1a; 但是HTTP1.1还是有性能瓶颈&#xff1a; HTTP/2做了什么优化&#xff1f; HTTP/3的优点 HTTP与HTTPS的区别 HTTPS的工作原理 1.ClientHello 2.ServerHello 3.客户端回应 4.服务器的最后回应…

关于M0+芯片的IAP应用导致延时不准确解释

前言&#xff1a;在给项目中使用的M0芯片做IAP功能时一切一切都是那么的自然水到渠成&#xff0c;但是笔者在实现完IAP功能后&#xff0c;却发现APP端挂载的单总线功能崩溃了&#xff0c;最开始没有怀疑是bootload导致的。因为笔者在使用同一篇代码的时候单总线挂载的设备不同&…

安卓登录学习笔记

1. 背景与目标 (Background and Goal) 背景: 我们要创建一个用户登录界面。用户输入用户名和密码&#xff0c;点击“登录”按钮。应用会显示一个加载中的“圈圈”&#xff08;ProgressBar&#xff09;&#xff0c;然后模拟一个耗时2秒的网络请求。根据请求结果&#xff0c;界面…

Git(三):分支管理

文章目录 Git(三)&#xff1a;分支管理理解分支创建分支切换分支合并分支删除分支合并冲突分支管理策略分支策略Bug分支删除临时分支 Git(三)&#xff1a;分支管理 理解分支 本章介绍Git的杀手级功能之一&#xff1a;分支 分支就 是科幻电影里面的平行宇宙&#xff0c;当你正…

电子电气架构 --- 电气架构基础(汽车电子)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

RestClient 功能介绍、完整使用示例演示, 和RestTemplate、WebClient 对比

RestClient功能介绍 RestClient是Spring Framework 6.1版本引入的同步HTTP客户端&#xff0c;旨在替代老旧的RestTemplate&#xff0c;提供更现代、流畅的API设计。其核心特点包括&#xff1a; 流畅API&#xff08;Fluent API&#xff09;&#xff1a; 支持链式调用&#xff0…

VM经常遇见的运行慢几种情况、以及设置方法

大家好,我是东哥说-MES 启动虚拟机是提示如下内容 “无法打开内核设备“\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。” 2.用记事本打开安装目录下TIA Portal STEP7 Prof Safety WinCC …

【C++语法】类和对象(4)——日期类和const成员函数

6.类和对象&#xff08;4&#xff09; 文章目录 6.类和对象&#xff08;4&#xff09;回顾简单日期类的实现代码补充&#xff1a;前置与后置的重载区别补充&#xff1a;关于流插入运算符&#xff08;<<&#xff09;的解释拓展&#xff1a;仿照流插入操作符(<<)的作…

当凌晨的键盘声,遇见黎明的星光​

地铁玻璃映出你困倦的脸&#xff0c;耳机里的音乐循环到第 17 遍&#xff0c;早高峰的人群像沙丁鱼罐头般挤压着你。这是你每天雷打不动的三小时通勤路&#xff0c;从城市边缘到写字楼林立的 CBD&#xff0c;窗外的风景换了四季&#xff0c;而你始终困在摇晃的车厢里&#xff0…

Web Worker技术详解与应用场景

我们来详细探讨一下 Web Worker。它是现代 Web 开发中解决 JavaScript 单线程限制、提升应用性能和响应能力的关键技术。 核心问题&#xff1a;JavaScript 的单线程模型 浏览器 UI 线程&#xff08;主线程&#xff09;&#xff1a;JavaScript 在浏览器中默认运行在单个线程&a…

React Next快速搭建前后端全栈项目并部署至Vercel

很好&#xff0c;你是想搞清楚Next.js 的后端结构和传统 Node Express 的区别对比&#xff0c;我来整理一套结构化、精准、对面试有说服力的解答&#xff0c;并附示意结构图。 01Next vs Express 、## ⚡️1️⃣ Next.js 后端是怎么构建的 Next.js 在默认情况下本身就集成后…

【T宝客户项目解决过程】01-模型训练

1 项目需求描述 博主自己开了一家T宝店&#xff0c;有一个客户有这个需求&#xff1a;有一大堆图像&#xff0c;大概有10多万张图&#xff0c;都是比较小尺寸的图。各种类型都有&#xff0c;我们想要通过将不同类型发图像进行分开&#xff0c;如何实现呢&#xff1f; 2 思路 …

如何在中将网络改为桥接模式并配置固定IP地址

在使用服务器搭建虚拟机的过程中&#xff0c;我们发现有许多场景需要将虚拟机的网络配置为桥接模式&#xff0c;并为其设置固定的IP地址。为了帮助大家更高效地进行网络配置&#xff0c;提升虚拟机的连接稳定性和管理便捷性&#xff0c;我们总结了这篇指南&#xff0c;介绍如何…

强化学习 - 基于策略的Reinforce算法

&#x1f3af; REINFORCE 策略梯度算法推导&#xff08;完整&#xff09; 1. 目标函数定义 我们希望最大化策略的期望回报&#xff1a; J ( θ ) E τ ∼ π θ [ R ( τ ) ] J(\theta) \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)Eτ∼πθ​​[R(τ…