Docker学习之数据管理(超详解析)

news2024/10/7 20:34:03

Docker存储资源类型:

用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理:
(1)Data Volume (数据卷)
(2)Data Volume Dontainers --- 数据卷容器
Docker 容器有两种方式卷和绑定挂载可将容器中的文件存储在宿主机的文件系统上,这样即使在容器停止之后这些文件也会被保留。

volume,bind和tmpfs三者的相同点和不同点:

a. 相同之处

无论您选择使用哪种类型去使用,数据在容器内看起来都是相同的。它被视为容器文件系统中的目录或单个文件。

b. 不同之处

卷(volume)存储在于 由Docker管理 的主机文件系统的一部分中(在Linux上是:/var/lib/docker/volumes/)。非Docker进程不应该修改这部分文件系统。卷是在Docker中保留数据的最佳方式。

绑定挂载(bind mount) 也就是把主机的本地目录挂载到容器中某个挂载点。可以存储在主机系统的任何位置。他们甚至可能是重要的系统文件或目录。Docker主机或Docker容器上的非Docker进程可以随时修改它们。

tmpfs挂载(tmpfs mount)仅存储在主机系统的内存中,而不会写入主机系统的文件系统

数据卷:

1> Data Volume 有以下特点:
    a)Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。
   b)容器可以读写 volume 中的数据。
    c)volume 数据可以被永久的保存,即使使用它的容器已经销毁。
2> DataVolume的使用
[root@localhost ~]# docker volume ls  //查看是否又数据卷
DRIVER              VOLUME NAME
[root@localhost ~]# docker volume create -d local test  //创建数据卷test
test
[root@localhost ~]# docker volume ls  //再次查看
DRIVER              VOLUME NAME
local               test
[root@localhost ~]# docker volume inspect test   //查看数据卷test详细信息
[
    {
        "CreatedAt": "2024-03-17T16:59:13+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": {},
        "Scope": "local"
    }
]
3>数据卷的使用
通过--mount选项来使用数据卷:
    volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下
    bind:绑定数据卷,映射到主机指定路径下
    tmpfs:临时数据卷,只存在于内存中
通过-v 参数格式为 <host path>:<container path>(推荐方式)
[root@localhost ~]# mkdir /webapp
[root@localhost ~]# docker run -d -P --name web --mount  type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py //使用training/webapp镜像创建一个web容器,并创建一个数据卷挂载到容器的/opt/webapp目录(不推荐使用--mount方式)
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
e190868d63f8: Pull complete 
909cd34c6fd7: Pull complete 
0b9bfabab7c1: Pull complete 
a3ed95caeb02: Pull complete 
10bbbc0fc0ff: Pull complete 
fca59b508e9f: Pull complete 
e7ae2541b15b: Pull complete 
9dd97ef58ce9: Pull complete 
a4c1b0cb7af7: Pull complete 
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
7dc7e6688772c55bd65eab865d26b603771ae503e2ef8fd6e8a5f13b1aec18d4
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
7dc7e6688772        training/webapp     "python app.py"     57 seconds ago      Exited (2) 55 seconds ago                       web
[root@localhost ~]# docker rm web 
web
[root@localhost ~]# docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py(推荐使用方式,与上述--mount命令具有一致性)
0d6533d2f457cd89b2a919d8dab5b7cce93a142de83093c87a5feb54491d6ee9

数据卷容器:

数据卷容器Data Volume Dontainers
如果用户需要在容器之间共享一些持续更新的数据,最简单的方法就是使用数据卷容器,其实数据卷容器就是一个普通的容器,只不过是专门用它提供数据卷供其他容器挂载使用。
Data Volume Dontainers使用:
1.创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
[root@localhost ~]# docker run -it -v /dbdata --name dbdata busybox
2.查看/dbdata目录:
/ # ls
bin     dev     home    root    tmp     var
dbdata  etc     proc    sys     usr
3.在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷(复制终端制作)
[root@localhost ~]# docker run -it --volumes-from dbdata --name db1 busybox
[root@localhost ~]# docker run -it --volumes-from dbdata --name db2 busybox
[root@localhost ~]# docker run -it --volumes-from db1 --name db3 busybox
4.此时,容器db1,db2和db3都挂载同一个数据卷到相同的/dbdata目录,四个容器任何一方在该目录下的写入,其他容器都可以看到:
[root@localhost ~]# docker run -it --volumes-from dbdata --name db2 busybox
/ # ls
bin     dev     home    root    tmp     var
dbdata  etc     proc    sys     usr
/ # cd /dbdata/
/dbdata # echo 123 > test1.txt
[root@localhost ~]# docker run -it -v /dbdata --name dbdata busybox
/ # ls
bin     dev     home    root    tmp     var
dbdata  etc     proc    sys     usr
/ # cat dbdata/test1.txt 
123
[root@localhost ~]# docker run -it --volumes-from dbdata --name db1 busybox
/ # ls
bin     dev     home    root    tmp     var
dbdata  etc     proc    sys     usr
/ # cat dbdata/test1.txt 
123
[root@localhost ~]# docker run -it --volumes-from db1 --name db3 busybox
/ # cat dbdata/test1.txt 
123
5.使用--volumes-from参数所挂载数据卷的容器本身并不需要保持在运行状态,如果删除了挂载的容器(包括dbdata,db1,db2和db3),数据卷并不会自动删除。如果需要删除一个数据卷,必须删除最后一个还挂载着它的容器。(使用docker rm -f -v命令来指定同时删除关联的容器)

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

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

相关文章

网络安全之DDos攻击原理与防御

DDos简介 对于DDos(分布式拒绝服务)攻击&#xff0c;人们往往谈虎色变。它被认为是安全领域中最难解决的问题之一&#xff0c;迄今为止也没有完美的解决方案。DDos攻击是一种网络攻击方式&#xff0c;其目的是通过利用大量的互联网连接设备同时向目标网站或服务发送大量请求&a…

字母异位词分组【每日一题】

可以通过案例找到规律&#xff0c;每个词排序完后是同一个&#xff0c;所以通过hasmap存储排序过的值做key&#xff0c;值是存储单词集合。 package HasTable;import java.util.*;class Solution {static List<List<String>> groupAnagrams(String[] strs) {Map&l…

UnityShader(十六)凹凸映射

前言&#xff1a; 纹理的一种常见应用就是凹凸映射&#xff08;bump mapping&#xff09;。凹凸映射目的就是用一张纹理图来修改模型表面的法线&#xff0c;让模型看起来更加细节&#xff0c;这种方法不会改变模型原本的顶点位置&#xff08;也就是不会修改模型的形状&#xf…

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023 前言摘要模型架构图构建边的构建和初始化节点的初始化图更新情感相关性加强解码损失函数总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来…

Django验证码(一)

一、介绍 1.1、概述 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序 可以防止:恶意破解密码、刷票、论坛灌水,有效防止某…

@Valid 和 @Validated 区别和使用方法

1、相关依赖 Valid 依赖包 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency>Validated的依赖包 <dependency> <groupId>org.springframework</groupId> <…

学习JavaEE的日子 Day27 手撕HashMap底层原理

Day27 1.手撕HashMap底层原理(重点) public class Test01 {public static void main(String[] args) {// Float float1 new Float("0.0f"); // Float float2 new Float("0.0f"); // Float result float1/float2; // System.out.println(result);/…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

【SQL】1174. 即时食物配送 II (窗口函数row_number; group by写法;对比;定位错因)

前述 推荐学习&#xff1a; 通俗易懂的学会&#xff1a;SQL窗口函数 题目描述 leetcode题目&#xff1a;1174. 即时食物配送 II 写法一&#xff1a;窗口函数 分组排序&#xff08;以customer_id 分组&#xff0c;按照order_date 排序&#xff09;&#xff0c;窗口函数应用。…

从零自制docker-4-【PID Namespace MOUNT Namespace】

文章目录 PID namespace代码mountnamespace通俗理解代码 PID namespace 每个命名空间都有独立的PID空间&#xff0c;即每个命名空间的进程都由一开始分配。 新建立的进程内部进程ID为1 代码 package main import ("log""os/exec""os""sy…

pyspark基础 -- DataFrame的理解与案例

DataFrame(df)介绍 datafram就是一个内存中的二维表结构&#xff0c;具备表结构的三个基本属性&#xff1a; 行列表结构描述 在结构层面&#xff0c;pyspark中的StructType对象描述了表结构&#xff0c;StructField对象描述了表的一个列信息&#xff1b;在数据层面&#xff…

银行信息系统应用架构导论-引用

一级目录二级目录金融标准和参考文档一、银行企业级应用系统架构规划企业级应用系统架构规划《金融科技发展规划&#xff08;2022-2025年&#xff09;&#xff08;2022年1月中国人民银行印发&#xff09;》 《关于银行业保险业数字化转型的指导意见&#xff08;2022年1月中国银…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中&#xff0c;可以通过多种方法来查看版本号。以下是几种常用的方法&#xff1a; 使用cat命令查看/etc/centos-release文件&#xff1a; CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容&#xff0c;从而获得C…

ThingsBoard初始化数据库Postgres

视频教程&#xff1a; ThingsBoard初始化数据库postgres_哔哩哔哩_bilibilihingsBoard是一个基于Java的开源物联网平台&#xff0c;旨在实现物联网项目的快速开发、管理和扩展。本课程主要从0到1带你熟悉ThingsBoard&#xff0c;学习优秀的物联网变成思维与思想&#xff0c;主…

Nginx离线安装(保姆级教程)

1、下载与安装gcc-c环境 获取rpm包的方式很多&#xff0c;在这里推荐使用yum工具获取&#xff0c;因为手动从官网下载&#xff0c;手动执行rpm -Uvh *.rpm --nodeps --force命令进行安装&#xff0c;可能会缺少某个依赖&#xff0c;我们也不确定到底需要哪些依赖。 因此需要准…

游戏引擎中网络游戏的基础

一、前言 网络游戏所面临的挑战&#xff1a; 一致性&#xff1a;如何在所有的主机内都保持一样的表现可靠性&#xff1a;网络传输有可能出现丢包安全性&#xff1a;反作弊&#xff0c;反信息泄漏。多样性&#xff1a;不同设备之间链接&#xff0c;比如手机&#xff0c;ipad&a…

第九节:Vben Admin实战-系统管理之角色管理实现-上

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 第六节:Vben Admin权限-后端控制方式 第七节…

RUST egui体验

egui官方提供了web版的demo&#xff0c;效果还是很不错的&#xff0c;就是用的时候有点一头雾水&#xff0c;没有找到明确的指导怎么把这些组件插入到自己的application或者web。花了一天时间撸了一遍流程&#xff0c;记录一下&#xff0c;说不定以后能用到呢 >_< efram…

蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C++)

并查集 并查集是大量的树&#xff08;单个节点也算是树&#xff09;经过合并生成一系列家族森林的过程。 可以合并可以查询的集合的一种算法 可以查询哪个元素属于哪个集合 每个集合也就是每棵树都是由根节点确定&#xff0c;也可以理解为每个家族的族长就是根节点。 元素集合…

【Java基础知识总结 | 第三篇】深入理解分析ArrayList源码

文章目录 3.深入理解分析ArrayList源码3.1ArrayList简介3.2ArrayLisy和Vector的区别&#xff1f;3.3ArrayList核心源码解读3.3.1ArrayList存储机制&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;add()方法&#xff08;3&#xff09;新增元素大体流程 3.3.2ArrayL…