持久化容器数据

持久化容器数据

目录

  • 容器卷
  • 管理卷
  • 试一试
    • 使用卷
    • 查看卷内容
    • 删除卷

当一个容器启动时,它会使用镜像提供的文件和配置。每个容器可以创建、修改和删除文件,并且不会影响其他容器。当容器被删除时,这些文件更改也会被删除。
虽然容器的这种短暂性质很好,但当你想要持久化数据时,这就有问题了。例如,如果你重启一个数据库容器,你可能不希望从空数据库开始。那么,如何持久化文件呢?

容器卷

卷是一种存储机制,能够在单个容器的生命周期之外持久化数据。可以将其视为从容器内部到容器外部的快捷方式或符号链接。

例如,假设你创建了一个名为 log-data 的卷。

docker volume create log-data

当使用以下命令启动容器时,该卷将挂载(或附加)到容器中的 /logs 目录:

docker run -d -p 80:80 -v log-data:/logs docker/welcome-to-docker

如果 log-data 卷不存在,Docker 会自动为你创建它。

当容器运行时,它写入 /logs 文件夹的所有文件都将保存到这个卷中,超出容器的范围。如果你删除容器并使用相同的卷启动一个新容器,这些文件仍然存在。

使用卷共享文件

你可以将同一个卷附加到多个容器上,以便在容器之间共享文件。在日志聚合、数据管道或其他事件驱动的应用程序中,这可能非常有用。

管理卷

卷的生命周期独立于容器,并且根据你使用的数据类型和应用程序,它们可能会变得相当大。以下命令有助于管理卷:

  • docker volume ls - 列出所有卷
  • docker volume rm <volume-name-or-id> - 删除卷(仅在卷未附加到任何容器时有效)
  • docker volume prune - 删除所有未使用(未附加)的卷

试一试

在本指南中,你将练习创建和使用卷来持久化由 Postgres 容器创建的数据。当数据库运行时,它将文件存储到 /var/lib/postgresql/data 目录。通过在这里附加卷,你可以多次重启容器,同时保持数据。

使用卷

下载并安装 Docker Desktop

使用以下命令启动一个 Postgres 镜像的容器:

docker run --name=db -e POSTGRES_PASSWORD=secret -d -v postgres_data:/var/lib/postgresql/data postgres

这将在后台启动数据库,配置一个密码,并将卷附加到 PostgreSQL 持久化数据库文件的目录。

使用以下命令连接到数据库:

docker exec -ti db psql -U postgres

PostgreSQL 命令行中,运行以下命令创建一个数据库表并插入两条记录:

CREATE TABLE tasks (id SERIAL PRIMARY KEY,description VARCHAR(100)
);
INSERT INTO tasks (description) VALUES ('Finish work'), ('Have fun');

PostgreSQL 命令行中运行以下命令验证数据是否在数据库中:

SELECT * FROM tasks;

你应该得到如下输出:

 id | description
----+-------------1 | Finish work2 | Have fun
(2 rows)

运行以下命令退出 PostgreSQL shell:

\q

停止并删除数据库容器。记住,即使容器已被删除,数据仍然持久化在 postgres_data 卷中。

docker stop db
docker rm db

运行以下命令启动一个新容器,附加具有持久化数据的相同卷:

docker run --name=new-db -d -v postgres_data:/var/lib/postgresql/data postgres 

你可能已经注意到,POSTGRES_PASSWORD 环境变量被省略了。那是因为这个变量仅在引导一个新数据库时使用。

运行以下命令验证数据库仍然包含记录:

docker exec -ti new-db psql -U postgres -c "SELECT * FROM tasks"

查看卷内容

Docker Dashboard 提供了查看任何卷内容的功能,以及导出、导入和克隆卷的功能。

打开 Docker Dashboard 并导航到卷视图。在这个视图中,你应该能看到 postgres_data 卷。

选择 postgres_data 卷的名称。

数据选项卡显示了卷的内容,并提供了浏览文件的功能。双击文件可以查看其内容并进行更改。

右键点击任何文件可以保存或删除它。

删除卷

在删除卷之前,必须确保它未附加到任何容器。如果你还没有删除之前的容器,请使用以下命令删除(-f 选项将首先停止容器,然后再删除它):

docker rm -f new-db

有几种方法可以删除卷,包括以下几种:

Docker Dashboard 中选择卷上的 Delete Volume 选项。

使用 docker volume rm 命令:

docker volume rm postgres_data

使用 docker volume prune 命令删除所有未使用的卷:

docker volume prune

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

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

相关文章

【因果推断python】53_效应异质性和非线性带来的挑战1

目录 Treatment Effects on Binary Outcomes 合成一些数据 由于缺乏基本事实&#xff0c;在单位层面预测治疗效果极为困难。因为我们只能观察到一个潜在结果 T(t) &#xff0c;我们无法直接估计它。相反&#xff0c;我们必须依靠目标变换&#xff08;也可以看作是设计巧妙的损…

【专利】一种光伏产品缺陷检测AI深度学习算法

申请号CN202410053849.9公开号&#xff08;公开&#xff09;CN118037635A申请日2024.01.12申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 叶长春(总); 廖绍伟 摘要 本发明公开一种光伏产品缺陷检测AI深度…

全国计算机二级C++题库笔记

全国计算机二级C题库笔记 Ⅰ. 选择题专项训练1 公共基础部分2 二级C程序设计第1~4章》每章标题1. C标识符命名规则2. 面向对象的三个主要特征3. C的四个开发步骤4. 关于类和对象的叙述5. !和&&的作用6. C枚举类型初值问题7. ASCII码对照表8. 运算符两边的数据类型&…

linux高级编程(I/O)

fputc int fputc(int c, FILE *stream); 功能: 向流中写入一个字符 参数: c:要写入的字符 stream:文件流指针 返回值: 成功返回写入的字符ASCII码值 失败返回EOF fgetc int fgetc(FILE *stream); 功能: 从流中读取一个字符 参数: stream:文件流…

SAPUI5基础知识8 - 模块(Module)的使用

1. 背景 在SAPUI5中&#xff0c;几乎所有东西都是一个模块&#xff08;例如&#xff1a;控件&#xff0c;控制器&#xff0c;组件等等&#xff09;&#xff0c;通过依赖管理&#xff0c;模块间可以相互调用。这样做的好处是&#xff0c;可以仅在需要时才去加载必需的模块&…

基于单片机的智能台灯控制系统

摘要&#xff1a; 文章设计一款单片机智能台灯控制系统&#xff0c;实现对台灯的手动和自动控制功能&#xff0c;以 STC89C52 单片机作为多功能智能台灯的主控制器&#xff0c;光电检测模块检测坐姿&#xff0c;红外传感器检测人体&#xff0c;光敏电阻检测光强&#xff0c;同…

怀庄酒厂在茅台镇排第几,怀庄酒都什么档次?

怀庄酒厂在茅台镇的排名如何&#xff1f;怀庄酒又属于什么档次&#xff1f;贵州怀庄酒业(集团)有限责任公司旗下的怀庄之醉&#xff0c;作为公司的重点直营品牌&#xff0c;定位于中高端酱酒市场&#xff0c;以其出色的品质和独特的风味受到消费者的青睐。 在众多贵州酒厂中&am…

搭建淘宝扭蛋机小程序需要满足哪些条件

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;以其便捷、高效的特点&#xff0c;逐渐成为了用户日常生活中不可或缺的一部分。特别是在电商平台中&#xff0c;小程序为商家和用户之间提供了更为直接的沟通桥梁。在这样一个背景下&#xff0c;搭建…

LeetCode题练习与总结:只出现一次的数字--136

一、题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; …

C++ 检查内存泄漏

在Visual Studio中&#xff0c;通过定义自定义的new和delete操作符来检查内存泄漏并输出到输出窗口&#xff08;通常是“输出”面板&#xff09;并不是直接支持的&#xff0c;因为new操作符的调试版本&#xff08;如使用_NORMAL_BLOCK, __FILE__, __LINE__&#xff09;是由Micr…

深入理解Pandas

文章目录 引言Pandas的原理SeriesDataFrame Pandas的使用安装Pandas读取数据数据处理数据可视化 结论 引言 在数据分析和数据科学领域&#xff0c;Pandas无疑是一个不可或缺的工具。Pandas是一个强大的Python库&#xff0c;提供了快速、灵活和易于使用的数据结构和数据分析工具…

VoxEdit 竞赛|为 The Sandbox 土地持有者设计专属奖励资产

邀请大家参与这场精彩的 VoxEdit 竞赛&#xff0c;在元宇宙中发挥你的创造力&#xff0c;并将你的体素技能提升到新的水平&#xff01; 按此下载 VoxEdit &#xff01; https://www.sandbox.game/en/create/vox-edit/ 比赛主题&#xff1a;建筑与古迹 一起潜入建筑和古迹的世…

【面试题】马上金九银十了,简历该准备起来了,面试题你准备好了吗 ?浅谈 JS 浅拷贝和深拷贝

代码展示 let obj_old {name: Tom,age: 15,favorite: {food: bread,drink: milk} } let obj_new {...obj_old} console.log(obj_old obj_new) // false console.log(obj_old.name obj_new.name) // true console.log(obj_old.favorite obj_new.favorite) // true3. Ar…

(79)SPI接口--->(004)FPGA实现SPI接口

(004)FPGA实现SPI接口 1 目录 (a)FPGA简介 (b)IC简介 (c)Verilog简介 (d)FPGA实现SPI接口 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为…

Redis源码学习:SDS设计与内存管理

为什么Redis选择SDS 1、缓解C语言字符串的缺陷 在 C 语言中可以使用 char* 字符数组来实现字符串。每个字符串分配一段连续的内存空间&#xff0c;依次存放字符串中的每一个字符&#xff0c;最后以null字符结尾。这种设计存在以下问题&#xff1a; 1、低效的操作 每次获取字…

Linux根目录挂载点(/dev/mapper/centos-root)扩容

如果我们在安装系统是采用自定义分区的话&#xff0c;就可以提前规划好这个事情。但是如果平常没注意就直接采用默认安装的方式的话。一旦 根目录的容量耗尽&#xff0c;将会影响业务的运行。今天我们来扩容逻辑卷。 默认安装的话会给home目录分比较多的空间&#xff0c;我们可…

说一说强、软、弱、虚引用

Java根据其生命周期的长短将引用类型又分为强引用、软引用、弱引用、虚引用。 强引用&#xff1a;就是我们平时 new一个对象的引用。当JVM的内存空间不足时&#xff0c;宁愿抛出OutOfMemoryError使得程序异常终止&#xff0c;也不愿意回收具有强引用的存活着的对象。 软引用&a…

【Leetcode每日一题】 01背包 - DP41 【模板】01背包(难度⭐⭐)(80)

1. 题目解析 题目链接&#xff1a;DP41 【模板】01背包 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 第一问&#xff1a;不超过总体积的背包问题 1. 状态表示 dp[i][j] 表示&#xff1a;从前 i 个物品中挑选&…

汇编语言实验八

目录 一、实验目的 二、实验内容 三&#xff0e;实验步骤以及结果 1、阅读monthtab.asm 程序&#xff0c;要求写出该程序功能&#xff0c;并在实验报告中画出其程序流程图 2.编写一段程序&#xff0c;要求在长度为20的数组&#xff08;无符号数&#xff09;中&#xff0c;…

LabVIEW与C#相互调用dll

C#调用LabVIEW创建的dll 我先讲LabVIEW创建自己的.net类库的方法吧&#xff0c;重点是创建&#xff0c;C#调用的步骤&#xff0c;大家可能都很熟悉了。 1、创建LabVIEW项目&#xff0c;并创建一个简单的add.vi&#xff0c;内容就是abc&#xff0c;各个接线端都正确连接就好。 …