【云原生】Docker的数据管理(数据卷、容器互联)
目录
一、数据卷(容器与宿主机之间数据共享)
二、数据卷容器(容器与容器之间数据共享)
三、 容器互联(使用centos镜像)
总结
用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。
容器中管理数据主要有两种方式:
- 数据卷(Data Volumes)
- 数据卷容器(Data Volume Dontainers)
一、数据卷(容器与宿主机之间数据共享)
数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。
想要将容器中的数据持久化,可以将宿主机目录挂载到容器中。
一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。
docker run -v 数据卷 #在容器内创建数据卷docker run -v 宿主机目录:数据卷 #将宿主机目录挂载到容器中#注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。#挂载后的目录默认可读可写#如果希望挂载后的目录为只读目录,可以在挂载时加:ro参数docker run -v 宿主机目录:数据卷:ro #将宿主机目录挂载到容器中,只可读
示例:
[root@yuji ~]# ls /var/share #创建数据卷前,该目录不存在ls: 无法访问/var/share: 没有那个文件或目录#将宿主机目录/var/share挂载到容器中的/data1。#注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。#-v选项可以在容器内创建数据卷[root@yuji ~]# docker run -v /var/share:/data1 --name web1 -itd centos:7 /bin/bash670bf71814364638c4b21a1fb13bcf95c6a2125cd379a5717061d41f9673b0fe[root@yuji ~]# ls /var/share -d #自动创建了该目录/var/share#进入容器[root@yuji ~]# docker exec -it web1 bash [root@670bf7181436 /]# ls #容器中自动创建了/data1目录anaconda-post.log data1 etc lib media opt root sbin sys usrbin dev home lib64 mnt proc run srv tmp var[root@670bf7181436 /]# echo "this is web1"> /data1/abc.txt #向数据卷中写入数据[root@670bf7181436 /]# exit #退出容器exit#返回宿主机进行查看[root@yuji ~]# cd /var/share[root@yuji share]# lsabc.txt[root@yuji share]# cat abc.txt #可以看到容器中写入的数据,数据同步成功this is web1#在宿主机目录中写入数据,之后进容器中查看[root@yuji share]# cp /etc/passwd ./[root@yuji share]# lsabc.txt passwd[root@yuji share]# docker exec -it web1 bash #进入容器[root@670bf7181436 /]# ls /data1 abc.txt passwd #完成了数据同步


二、数据卷容器(容器与容器之间数据共享)
如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。
#创建数据卷容器web2。创建/data1和/data2两个数据卷。docker run --name web2 -v /data1 -v /data2 -itd centos:7docker exec -it web2 bash #进入web2容器echo "this is web2" > /data1/aaa.txt #向数据卷/data1中写入数据echo "this is yuji" > /data2/bbb.txt #向数据卷/data2中写入数据#使用--volumes-from 来挂载web2容器中的数据卷到新的容器web3docker run -itd --volumes-from web2 --name web3 centos:7docker exec -it web3 bash #进入web3容器cat /data1/aaa.txt #查看/data1中的数据是否和web2一致cat /data2/bbb.txt #查看/data2中的数据是否和web2一致


#在容器web3的挂载目录中写入数据,观察web2中能否同步成功[root@e99ee4f80519 /]# echo "this is web3" > /data1/web3.txt[root@e99ee4f80519 /]# exitexit[root@yuji ~]# docker exec -it web2 bash #进入容器web2[root@146f1012bc08 /]# cat /data1/web3.txt #数据共享成功this is web3

三、 容器互联(使用centos镜像)
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息。
示例1:做容器互联
#创建并运行源容器取名c1docker run -itd -P --name c1 centos:7 /bin/bash#创建并运行接收容器取名c2,使用--1ink选项指定连接容器c1以实现容器互联。docker run -itd -P --name c2 --link c1:C1 centos:7 /bin/bash##--link 容器名:连接的别名#进c2容器,ping c1,通过容器名称或者别名都可以通信docker exec -it c2 bashping c1 #ping c1容器名称ping C1 #ping c1容器的别名PING C1 (172.17.0.5) 56(84) bytes of data.64 bytes from C1 (172.17.0.5): icmp_seq=1 ttl=64 time=0.105 ms64 bytes from C1 (172.17.0.5): icmp_seq=2 ttl=64 time=0.066 ms#可以看到c1容器的IP地址为172.17.0.5#进入c1容器,查看c1的IP地址docker exec -it c1 bashyum install -y net-tools #下载网络工具ifconfig #查看IP为172.17.0.5,和c2中显示的一致eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.5 netmask 255.255.0.0 broadcast 172.17.255.255



示例2:如果不做互联的话只能通过IP进行通信
#创建容器c5,没有与c1做互联docker run -itd -P --name c5 centos:7 /bin/bashdocker exec -it c5 bash #进入容器c5#通过c1的容器名称和别名,都无法和c1通信ping c1 #提示:ping: c1: Name or service not knownping C1 #提示:ping: C1: Name or service not known#只能通过IP进行通信ping 172.17.0.5

总结
本文介绍了通过数据卷和数据卷容器对容器内数据进行共享、备份和恢复等操作,通过这些机制,即使容器在运行中出现故障,用户也不必担心数据发生丢失,只需要快速地重新创建容器即可。
| 命令 | 说明 |
|---|---|
| docker run -v 宿主机目录:数据卷 | 将宿主机目录挂载到容器中 |
| docker run -v 数据卷 | 创建数据卷容器 |
| docker run --volumes-from 数据卷容器 | 挂载数据卷容器(挂载点路径不变) |
| docker run --link 源容器名称:别名 | 容器互联 |
注意:一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。
因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。
相关文章:
【云原生】Docker的数据管理(数据卷、容器互联)
目录 一、数据卷(容器与宿主机之间数据共享) 二、数据卷容器(容器与容器之间数据共享) 三、 容器互联(使用centos镜像) 总结 用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据…...
使用vlc在线播放rtsp视频url
1. 2. 3. 工具链接: https://download.csdn.net/download/qq_43560721/88249440...
copy is all you need前向绘图 和疑惑标记
疑惑的起因 简化前向图 GPT4解释 这段代码实现了一个神经网络模型,包含了BERT、GPT-2和MLP等模块。主要功能是给定一个文本序列和一个查询序列,预测查询序列中的起始和结束位置,使其对应文本序列中的一个短语。具体实现细节如下:…...
【附安装包】Vred2023安装教程
软件下载 软件:Vred版本:2023语言:简体中文大小:2.39G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com…...
ASP.NET Core 中的 Dependency injection
依赖注入(Dependency Injection,简称DI)是为了实现各个类之间的依赖的控制反转(Inversion of Control,简称IoC )。 ASP.NET Core 中的Controller 和 Service 或者其他类都支持依赖注入。 依赖注入术语中&a…...
优化物料编码规则,提升物料管理效率
导 读 ( 文/ 2358 ) 物料是生产过程的必需品。对物料进行身份的唯一标识,可以更好的管理物料库存、库位,更方便的对物料进行追溯。通过编码规则的设计,可以对物料按照不同的属性、类别或特征进行分类,从而更好地进行库存分析、计划…...
Jetbrains IDE新UI设置前进/后退导航键
背景 2023年6月,Jetbrains在新发布的IDE(Idea、PyCharm等)中开放了新UI选项,我们勾选后重启IDE,便可以使用这一魔性的UI界面了。 但是前进/后退这对常用的导航键却找不到了,以前的设置方式(Vi…...
借助frp的xtcp+danted代理打通两边局域网p2p方式访问
最终效果 实现C内网所有设备借助c1内网代理访问B内网所有服务器 配置公网服务端A frps 配置frps.ini [common] # 绑定frp穿透使用的端口 bind_port 7000 # 使用token认证 authentication_method token token xxxx./frps -c frps.ini启动 配置service自启(可选) /etc/…...
2023年高教社杯数学建模思路 - 案例:FPTree-频繁模式树算法
文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法,…...
批量根据excel数据绘制饼状图
要使用Python批量根据Excel数据绘制饼状图,可以使用pandas和matplotlib库来实现。以下是一个基本的代码示例: import pandas as pd import matplotlib.pyplot as plt # 读取Excel文件 data pd.read_excel(data.xlsx) # 提取需要用于绘制饼状图的数据列…...
C++头文件和std命名空间
C 是在C语言的基础上开发的,早期的 C 还不完善,不支持命名空间,没有自己的编译器,而是将 C 代码翻译成C代码,再通过C编译器完成编译。 这个时候的 C 仍然在使用C语言的库,stdio.h、stdlib.h、string.h 等头…...
浏览器有哪几种缓存?各种缓存之间的优先级
在浏览器中,有以下几种常见的缓存: 1、强制缓存:通过设置 Cache-Control 和 Expires 等响应头实现,可以让浏览器直接从本地缓存中读取资源而不发起请求。2、协商缓存:通过设置 Last-Modified 和 ETag 等响应头实现&am…...
【C++】list
list 1. 简单了解list2. list的常见接口3. 简单实现list4. vector和list比较 1. 简单了解list list的底层是带头双向循环列表。因此list支持任意位置的插入和删除,且效率较高。但其缺陷也很明显,由于各节点在物理空间是不连续的,所以不支持对…...
剪枝基础与实战(2): L1和L2正则化及BatchNormalization讲解
1. CIFAR10 数据集 CIFAR10 是深度学习入门最先接触到的数据集之一,主要用于图像分类任务中,该数据集总共有10个类别。 图片数量:6w 张图片宽高:32x32图片类别:10Trainset: 5w 张,5 个训练块Testset: 1w 张,1 个测试块Pytorch 集成了很多常见数据集的API, 可以通过py…...
C语言学习笔记---指针进阶01
C语言程序设计笔记---016 C语言指针进阶前篇1、字符指针2、指针数组2.1、指针数组例程1 -- 模拟一个二维数组2.2、指针数组例程2 3、数组指针3.1、回顾数组名?3.2、数组指针定义与初始化(格式)3.3、数组指针的作用 --- 常用于二维数组3.4、数…...
【Go 基础篇】Go 语言字符串函数详解:处理字符串进阶
大家好!继续我们关于Go语言中字符串函数的探索。字符串是编程中常用的数据类型,而Go语言为我们提供了一系列实用的字符串函数,方便我们进行各种操作,如查找、截取、替换等。在上一篇博客的基础上,我们将继续介绍更多字…...
GAN原理 代码解读
模型架构 代码 数据准备 import os import time import matplotlib.pyplot as plt import numpy as np import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision import datasets import torch.nn as nn import torch# 创建文…...
HTML的label标签有什么用?
当你想要将表单元素(如输入框、复选框、单选按钮等)与其描述文本关联起来,以便提供更好的用户界面和可访问性时,就可以使用HTML中的<label>标签。<label>标签用于为表单元素提供标签或标识,使用户能够更清…...
docker在阿里云上的镜像仓库管理
目录 一.登录进入阿里云网站,点击个人实例进行创建 二.创建仓库,填写相关信息 三.在访问凭证中设置固定密码用于登录,登录时用户名是使用你注册阿里云的账号名称,密码使用设置的固定密码 四.为镜像打标签并推送到仓库 五.拉取…...
html-dom核心内容--四要素
1、结构 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 2、核心关注的内容:“元素”,“属性”,“修改样式”,“事件反应”。>四要素…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
