Docker 容器与数据卷

news/2024/9/17 15:42:47/文章来源:https://www.cnblogs.com/PeterJXL/p/18406198

上一篇启动 registry 的时候,用了 -v 和--privileged 参数,本文就讲解这两个参数的含义

privileged 参数

在 CentOS7 中,安全模块会比之前系统版本加强,不安全的行为会先禁止,而目录挂载的情况被默认为不安全的行为,因此我们在启动私服的时候,可能会被禁止,报错 cannot open directory .: Permission denied

在 SELinux 里挂载目录是的被禁止的,如果要开启,一般使用 --privileged=true 命令,扩大容器的权限解决挂载目录没有权限的问题。使用该参数,container 内的 root 拥有真正的 root 权限。否则,container 内的 root 只是外部的一个普通用户权限。

容器卷

Docker 容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。

之前用的 -v 参数,就是配置容器卷的(volume,简写为 v)。

卷就是目录或文件,存在于一个或多个容器中,由 Docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因为 Docker 不会在容器删除时删除其挂载的数据卷

有点类似 Redis 里面的 rdb 和 aof 文件,将容器内的数据保存进宿主机的磁盘中。

卷的特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

实践

运行一个带有容器卷存储功能的容器实例:

$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

默认情况,仓库被创建在容器的 /var/lib/registry​,建议自行用容器卷映射。

例如启动一个 Ubuntu,并创建一个 txt 文件:

$ docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
$ cd /tmp/docker_data/
$ touch dockerin.txt

如果目录不存在,Docker 会自动创建

然后回到宿主机,可以看到也有文件:

$ ls /tmp/host_data/
dockerin.txt

即使容器 stop 了,宿主机修改文件,容器重启后也会同步数据。

除此之外,也可以用 inspect 命令,查看挂载是否成功:

$ docker ps
CONTAINER ID   IMAGE      COMMAND   CREATED       STATUS          PORTS     NAMES
9bd7aa9d30cd   ubuntu     "bash"    3 minutes ago  Up 3 minutes              u1$ docker inspect 9bd7aa9d30cd
.............
"Mounts": [{"Type": "bind","Source": "/tmp/host_data","Destination": "/tmp/docker_data","Mode": "","RW": true,"Propagation": "rprivate"}],
.................

随着后续深入的学习,-v 可以配置多个目录共享,例如一个是数据目录,一个是日志目录,一个是配置文件目录等。

读写规则映射

使用了-v 参数后,默认数据是共享的,也就是支持读写(read 和 write,简写为 rw),完整的命令是这样,在容器内目录后面有个 rw:

$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw    镜像名

而有时候需要配置只读或者只写,也是可以的。例如设置容器只能读取:

$ docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro   镜像名

这里设置了 ro,也就是 read only,只能读不能写

容器卷之间的继承和共享

有时候可能会有多个容器都使用一个宿主机的目录,此时就可以用继承的方式来完成共享。

在实践之前,可以先删掉所有的容器,方便观察。新建一个 Ubuntu:

$ docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
$ cd /tmp
$ touch u1_data.txt

此时我们想要建立一个和 u1,同样读写规则的 ubuntu,就可以用继承了。命令格式:

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu

该容器和 u1 是共享目录的:

$ docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
$ cd /tmp
$ ls
u1_data.txt

两个容器可以通过该目录来共享数据

(完)

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

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

相关文章

FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML24

在许多实际应用中,相对于反映类别之间微妙差异的细粒度标签,我们更容易获取粗粒度标签。然而,现有方法无法利用粗标签以无监督的方式推断细粒度标签。为了填补这个空白,论文提出了FALCON,一种从粗粒度标记数据中无需细粒度级别的监督就能发现细粒度类别的方法。FALCON同时…

大模型应用开发实战

https://www.cnblogs.com/yubaolee/p/18390767 在接触AI应用开发的这段时间,我以为会像以前学.net,学java,学vue一样。先整个hello world,再一步一步学搭功能,学搭框架直到搭一个系统出来。然而,理想总是很丰满,现实很骨感。在实践的过程中各种千奇百怪的问题:概念太多…

服务器系统安装

环境:1.Windows环境:Windows11    2.Linux环境:Ubuntu-22.04    3.U盘厂商:Kingston    4.rufus版本:rufus-4.5    5.ventoy版本:ventoy-1.0.99 一、使用rufus制作引导盘1.下载rufus因为我的操作系统是win11,所以我需要到rufus官网下载rufus-4.5.exe,你…

在 Web 中判断页面是不是刷新

在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面。这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载。判断页面是否刷新有助于开发者优化用户体验,例如在使用 vue 的时候需要进行权限控制,就需要判断在刷新后…

【整理】【java开发】JavaWeb之JSP、Cookie、Session(一)

一、JSP介绍及原理1.1 JSP简介1.2 JSP简单入门1.3 JSP原理介绍二、JSP脚本2.1 JSP 脚本形式2.2 JSP EL表达式2.3 JSP JSTL标签三、会话跟踪技术3.1 Cookie3.2 Session原创 0xNvyao 安全随笔声明 请勿利用本公众号文章内的相关技术、工具从事非法测试,如因此造成一切不良后果与…

功率电感的额定电流

功率电感的额定电流 功率电感的各参数:两个额定电流Isat , Irms 如何理解? 功率电感一般分为以下四种外形(如图)。而在DC/DC升压降压电路中,电感是仅次于IC的最核心元器件。 选择好的功率电感,可获得较高的转换效率。功率电感的选型,一般需要参考以下几个参数:L(电感值),…

架构师备考的一些思考(二)

前言 以我的视野来看,部长或技术总监这种岗位还是比较难竞争的,换言之,程序员的上升空间比较窄,如果想要拿到高级岗位,最好的是工作三五年后就转项目经理,然后再往上爬。 架构师倒是也能晋升高级岗位,但就效率而言,是非常低的。就我的经验而言,架构师系的高级职位通常…

代码随想录day 56 || 图论6

Prim算法 应用场景是主要是找到一个无向连通图的最小生成树,即连接所有节点且权重总和最小的树// prim三部曲 // 1, 找到距离当前最小树最近节点 // 2,节点入树 // 3,更新mindist// 更新树 func updateMinDist(edges [][]int, node int) {for _, edge := range edges {if e…

Linguistics-English-that从句系列: 主语 + 宾语 + 表语 + 同位语 + 定语

Linguistics-English-that从句系列: 主语 + 宾语 + 表语 + 同位语 + 定语

代码随想录算法 - 二叉树

题目1 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1:输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3] 输出:[2,3,1]示例 3: 输入:root = [] 输出:[]提示:树中节点数目范围在 [0, 100] 内 -…

PTE-MG诊所靶场 wirteup

一.信息收集 1.端口扫描 使用nmap进行扫描,结果如下 ┌──(kali㉿kali)-[~] └─$ nmap -sV 10.0.0.91 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-09 21:37 EDT Nmap scan report for 10.0.0.91 Host is up (0.027s latency). Not shown: 993 filtered tcp por…