Docker 学习路线 5:在 Docker 中实现数据持久化
Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离。默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据,Docker 提供了各种数据持久化方法。
- Docker 卷
- 绑定挂载
- Docker tmpfs 挂载
Docker 卷
Docker 卷是持久化 Docker 容器生成和使用的数据的首选方法。卷是主机机器上的目录,Docker 用它来存储文件和目录,可以超出容器生命周期。Docker 卷可以在容器之间共享,并提供各种好处,如易于备份和数据迁移。
要创建卷,请使用以下命令:
docker volume create volume_name
要使用卷,请在您的 docker run 命令中添加 --volume (或 -v)标志:
docker run --volume volume_name:/container/path image_name
绑定挂载
绑定挂载允许您将主机机器上的任何目录映射到容器内的目录。这种方法在开发环境中很有用,当您需要修改主机系统上的文件,并且这些更改应立即在容器中生效时。
要创建绑定挂载,请在您的 docker run 命令中使用 --mount 标志,并将 type=bind 添加到其中:
docker run --mount type=bind,src=/host/path,dst=/container/path image_name
Docker tmpfs 挂载
Docker tmpfs 挂载允许您在容器的内存中直接创建临时文件存储。在 tmpfs 挂载中存储的数据快速且安全,但一旦容器终止,数据将丢失。
要使用 tmpfs 挂载,请在您的 docker run 命令中添加 --tmpfs 标志:
docker run --tmpfs /container/path image_name
通过采用这些方法,您可以确保容器生命周期内的数据持久性,增强 Docker 容器的实用性和灵活性。请记住选择最适合您用例的方法,无论是首选 Docker 卷,方便的绑定挂载,还是快速且安全的 tmpfs 挂载。
临时文件系统
默认情况下,Docker 容器内的存储是短暂的,这意味着容器内部进行的任何数据更改或修改只会持续到容器运行的时间。一旦容器停止并移除,所有相关的数据都将丢失。这是因为 Docker 容器的本质是无状态的。
这种临时或短暂的存储称为“临时容器文件系统”。这是 Docker 的一个重要特性,因为它能够在不考虑容器状态的情况下,在不同的环境中快速、一致地部署应用程序。
临时文件系统与数据持久性
任何存储在容器的临时文件系统中的数据在容器停止或移除时都会丢失,这对应用程序的数据持久性构成了挑战。对于像数据库这样需要在多个容器生命周期中保持数据持久性的应用程序,这是特别有问题的。
为了克服这些挑战,Docker 提供了几种数据持久性的方法,例如:
- 卷:Docker 管理的存储选项,存储在容器的文件系统之外,允许数据在容器重新启动和删除时持久化。
- 绑定挂载:将主机机器的目录或文件映射到容器中,有效地将主机的存储与容器共享。
- tmpfs 挂载:内存中的存储,适用于仅需要在容器生命周期内持久化数据的情况。
通过实施这些策略,Docker 确保应用程序数据可以在单个容器的生命周期之外得以保留,使得可以处理有状态的应用程序。
卷挂载(Volume Mounts)
卷挂载是将主机系统上的文件夹或文件映射到容器内部的文件夹或文件的一种方式。这使得即使容器被删除,数据仍然可以在容器外部保持。此外,多个容器可以共享同一个卷,使得容器之间的数据共享变得容易。
创建卷(Creating a Volume)
要在Docker中创建一个卷,您需要运行以下命令:
docker volume create my-volume
此命令将创建名为my-volume的卷。您可以使用以下命令查看创建的卷的详细信息:
docker volume inspect my-volume
将卷挂载到容器(Mounting a Volume in a Container)
要将卷挂载到容器中,您需要在运行容器时使用-v或--mount标志。以下是一个例子:
使用-v标志:
docker run -d -v my-volume:/data your-image
使用**--mount**标志:
docker run -d --mount source=my-volume,destination=/data your-image
在上面的两个示例中,my-volume是我们之前创建的卷的名称,/data是卷将被挂载到容器内的路径。
在多个容器之间共享卷(Sharing Volumes Between Containers)
要在多个容器之间共享卷,只需在多个容器上挂载相同的卷即可。以下是如何在运行不同映像的两个容器之间共享my-volume的示例:
docker run -d -v my-volume:/data1 image1docker run -d -v my-volume:/data2 image2
在此示例中,image1和image2将可以访问存储在my-volume中的相同数据。
删除卷(Removing a Volume)
要删除卷,您可以使用**docker volume rm**命令后跟卷名称:
docker volume rm my-volume
这就是卷挂载在Docker中的基本知识。您可以使用它们高效且安全地在容器之间持久化和共享数据。
- Docker Volumes
最后
为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。
看完如果觉得有帮助,欢迎点赞、收藏和关注

相关文章:
Docker 学习路线 5:在 Docker 中实现数据持久化
Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离。默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据,Docker 提供了各种数…...
linux下使用vscode对C++项目进行编译
项目的目录结构 头文件swap.h 在自定义的头文件中写函数的声明。 // 函数的声明 void swap(int a,int b);swap.cpp 导入函数的声明,写函数的定义 #include "swap.h" // 双引号表示自定义的头文件 #include <iostream> using namespace std;// 函…...
LangChain+LLM实战---ChatGPT的即时插件套件制作
英文原文:Instant Plugins for ChatGPT: Introducing the Wolfram ChatGPT Plugin Kit 在一分钟内构建一个新插件 几周前,我们与OpenAI合作发布了Wolfram插件,使ChatGPT可以使用Wolfram语言和Wolfram|Alpha作为工具,在ChatGPT内部…...
包装印刷行业万界星空科技云MES解决方案
印刷业的机械化程度在国内制造行业内算是比较高的,不算是劳动密集型企业。如书本的装订、包装的模切、烫金、糊盒等都已经有了全自动设备。印刷厂除了部分手工必须采用人工外,大部分都可以采用机器,也就意味着可以由少量工人生产出大量产品。…...
Python教程---计算机语言简介
1.计算机编程语言的发展历程 计算机语言发展经历了三个阶段: 机器语言 - 机器语言通过二进制编码来编写程序,打孔织带机。 - 执行效率好,编写起来太麻烦 符号语言(汇编) - 使用符号来代替机器码 - 编写程序时…...
rhcsa-文件内容显示
浏览普通文件内容 浏览文件的命令 命令常用选项说明cat -n 对输出内容中的所有行标注行号 -b 对输出内容中的非空行标注行号 查看文件的内容head-num 指定需要显示文件num行的内容默认查看文前十行的内容tail -num 指定需要显示文件num行的内容 -f 使tail不停的去读取显示文…...
宠物养成猫狗商城门店问诊档案流量主小程序开发
宠物养成猫狗商城门店问诊档案流量主小程序开发 猫狗宠物养成商城门店问诊档案流量主小程序开发,这是一个充满趣味性和创新性的项目。通过将宠物养成游戏与商城、问诊服务、社交功能等相结合,为用户提供一站式的宠物养育体验。 在宠物养成方面&#x…...
应用安全四十二:SSO安全
一、什么是SSO SSO是单点登录(Single Sign On)的缩写,是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的企业业务整合的解决方案之一。 身份验证过程依赖于双方之间的信任关…...
【行云流水线实践】基于“OneBuild”方法对镜像进行快速装箱 | 京东云技术团队
在云原生领域,无论使用哪种编排调度平台,Kubernetes,DockerSwarm,OpenShift等,业务都需要基于镜像进行交付,我们在内部实践“Source-to-image”和链式构建,总而总结出“OneBuild”模式。 其核心…...
软件开发必备神器!一文读懂10款热门看板工具推荐!
看板(Kanban)是一种流行的框架,用于实施敏捷和DevOps软件开发。它要求实时沟通每个人的能力,并全面透明地展示正在进行的工作。工作项目在看板上以可视化方式表示,使项目经理和所有团队成员可以随时查看每个工作的状态…...
怎样提取视频提取的人声或伴奏?
有些小伙伴们进行音视频创作时,可能会需要提取音频的人声或者是伴奏。这里给大家推荐一个音分轨人声分离软件,支持一键提取音频人声和一键提取伴奏功能,可批量导入文件同步提取,简单高效,是音视频创作者的不二选择&…...
SpringBoot概述
SpringBoot是Spring提供的一个子项目,用于快速构建Spring应用程序。 SpringFramework:核心功能SpringData:数据获取SpringSecurity:认证授权SpringAMQP:消息传递SpringCloud:服务治理 SpringBoot新特性&…...
深度学习框架TensorFlow.NET环境搭建1(C#)
测试环境 visual studio 2017 window10 64位 测试步骤如下: 1 新建.net framework控制台项目,工程名称为TensorFlowNetDemo,.net framework的版本选4.7.2,如下图: 2 分别安装TensorFlow.NET包(先装)和SciSharp.…...
Git客户端软件 Tower mac中文版特点说明
Tower mac是一款Mac OS X系统上的Git客户端软件,它提供了丰富的功能和工具,帮助用户更加方便地管理和使用Git版本控制系统。 Tower mac软件特点 1. 界面友好:Tower的界面友好,使用户能够轻松地掌握软件的使用方法。 2. 多种Git操…...
详解IPD需求分析工具$APPEALS
够让企业生存下去的是客户,所以,众多企业提出要“以客户为中心”,那如何做到以客户为中心?IPD中给出的答案是需求管理。 需求管理流程,是IPD(集成管理开发)体系中的四大支撑流程之一࿰…...
318. 最大单词长度乘积
这道题求没有重复字母的两个字符串的最大长度乘积 重点在于怎么判断两个字符串没有重复字母 题目中只有小写字母,最多26个,于是想到使用26位二进制数来代表每一个字符串 有哪个字母就在对应位置设1 这个转换使用的是num | 1 << (c-a); 对字符串中的…...
.NET Core 中插件式开发实现
在 .NET Framework 中,通过AppDomain实现动态加载和卸载程序集的效果;但是.NET Core 仅支持单个默认应用域,那么在.NET Core中如何实现【插件式】开发呢? 一、.NET Core 中 AssemblyLoadContext的使用 1、AssemblyLoadContext简…...
并查集模版以及两道例题
💯 博客内容:并查集 😀 作 者:陈大大陈 🚀 个人简介:一个正在努力学技术的准C后端工程师,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是C…...
英飞凌TLF35584规格书中文
官网: 英飞凌TLF35584QVVS2 TLF35584_SPI: 1 Overview2 Block Diagram3 Pin Configuration3.1 Pin Assignment - PG-VQFN-48 4 General Product Characteristics4.1 Absolute Maximum Ratings 绝对最大额定值4.2 Functional Range4.3 Thermal Resistance…...
【教3妹学编程-算法题】最大单词长度乘积
3妹:哇,今天好冷啊, 不想上班。 2哥:今天气温比昨天低8度,3妹要空厚一点啊。 3妹 : 嗯, 赶紧把我的羽绒服找出来穿上! 2哥:哈哈,那倒还不至于, 不过气温骤降&…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
