1、验证容器和宿主机之间数据共享

通过上面的操作,接下来我们演示一下通过数据卷的挂载,实现容器和宿主机之间的数据共享。

步骤1:在宿主机中的HostDataVolume目录中创建host.txt文件。

# 查看宿主机当前位置
[root@192 HostDataVolume]# pwd
/home/HostDataVolume # HostDataVolume目录中创建host.txt文件
[root@192 HostDataVolume]# touch host.txt # 查看创建的文件
[root@192 HostDataVolume]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 3月 18 20:18 host.txt

步骤2:在CentOS容器的ContainerDataVolume目录查看内容。

# 进入ContainerDataVolume目录
[root@5f63a0fc88c5 /]# cd /home/ContainerDataVolume/
[root@5f63a0fc88c5 ContainerDataVolume]# pwd
/home/ContainerDataVolume # 查看ContainerDataVolume目录查看内容
[root@5f63a0fc88c5 ContainerDataVolume]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 18 12:18 host.txt

我们可以看到,宿主机HostDataVolume目录中创建的host.txt文件,同步到了CentOS容器的ContainerDataVolume目录中了。

步骤3:在CentOS容器的ContainerDataVolume目录中创建container.txt文件。

# 查看容器中的当前位置
[root@5f63a0fc88c5 ContainerDataVolume]# pwd
/home/ContainerDataVolume # 创建container.txt文件
[root@5f63a0fc88c5 ContainerDataVolume]# touch container.txt # 在host.txt文件中添加hello docker,说明数据卷中可以读写文件。
[root@0115c0470f8d ContainerDataVolume]# vi host.txt
[root@0115c0470f8d ContainerDataVolume]# cat host.txt
hello docker # 查看ContainerDataVolume目录的内容
[root@5f63a0fc88c5 ContainerDataVolume]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 18 12:23 container.txt
-rw-r--r--. 1 root root 0 Mar 18 12:18 host.txt

步骤4:在宿主机的HostDataVolume目录中查看内容。

# 查看宿主机的位置
[root@192 HostDataVolume]# pwd
/home/HostDataVolume # 查看HostDataVolume目录中的内容
[root@192 HostDataVolume]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 18 20:23 container.txt
-rw-r--r--. 1 root root 0 3月 18 20:18 host.txt # 查看host.txt文件中是否有内容。
[root@192 HostDataVolume]# cat host.txt
hello docker

我们可以看到,在CentOS容器的ContainerDataVolume目录中创建container.txt文件,同步到了宿主机的HostDataVolume目录中。

这就验证了,数据卷挂载实现了容器和宿主机之间数据共享。

2、容器停止退出后,主机修改后数据是否同步

接上面练习,继续验证容器停止退出后,主机修改数据卷中的数据后,重启容器是否同步。

步骤1:停止CentOS容器。

# 退出centos容器
[root@5f63a0fc88c5 ContainerDataVolume]# exit
exit # 当前docker中没有运行的容器
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

步骤2:在宿主机的/hmoe/HostDataVolume目录中创建文件和修改文件。

# 查看宿主机当前位置
[root@192 HostDataVolume]# pwd
/home/HostDataVolume # 创建文件host-02.txt,
[root@192 HostDataVolume]# touch host-02.txt
[root@192 HostDataVolume]# ll
总用量 4
-rw-r--r--. 1 root root 0 3月 18 20:23 container.txt
-rw-r--r--. 1 root root 0 3月 18 21:07 host-02.txt
-rw-r--r--. 1 root root 13 3月 18 21:03 host.txt # 修改container.txt文件,在文件中添加hello world
[root@192 HostDataVolume]# vim container.txt
[root@192 HostDataVolume]# cat container.txt
hello world

步骤3:重新启动CentOS容器,并查看ContainerDataVolume目录中的内容。

# 查看centos容器,是Exited状态
[root@192 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
0115c0470f8d centos "/bin/bash" 10 minutes ago Exited (0) 6 minutes ago # 启动centos容器
[root@192 ~]# docker start 0115c0470f8d
0115c0470f8d # 进入centos容器
[root@192 ~]# docker attach 0115c0470f8d
[root@0115c0470f8d /]# # 进入ContainerDataVolume,查看内容
[root@0115c0470f8d /]# cd /home/ContainerDataVolume/ # 查看是否有host-02.txt
[root@0115c0470f8d ContainerDataVolume]# ls -l
total 8
-rw-r--r--. 1 root root 12 Mar 18 13:08 container.txt
-rw-r--r--. 1 root root 0 Mar 18 13:07 host-02.txt
-rw-r--r--. 1 root root 13 Mar 18 13:03 host.txt # 查看container.txt文件中的内容
[root@0115c0470f8d ContainerDataVolume]# cat container.txt
hello world

我们可以看到,容器停止退出后,主机修改挂载的数据卷中的数据后,重启容器依然同步。

所以我们以后修改一些相关的配置文件,挂载了数据卷之后,只需要在本地修改即可,容器内会自动同步。

3、带只读权限的挂载数据卷

命令:docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名或镜像ID

说明roread only 只读。

还是复用之前的练习之上。

步骤1:启动CentOS容器,加入带ro权限的挂载。

# 启动centos容器
[root@192 ~]# docker run -it -v /home/HostDataVolume:/home/ContainerDataVolume:ro centos /bin/bash # 查看ContainerDataVolume文件夹中的内容
[root@2c8d185e17b1 /]# ls /home/ContainerDataVolume/
container.txt host-02.txt host.txt
# 说明:
# 因为启动容器之前ContainerDataVolume文件夹和里边的文件就存在
# 在使用ContainerDataVolume目录做数据卷挂载,不会删除已经存在的文件。
# 如果需要ContainerDataVolume目录中的文件,
# 可以在上面启动centos容器之前,把宿主机/home/HostDataVolume中的目录文件全部删除。
# 这样在启动容器之后,centos容器的ContainerDataVolume目录会自动同步,也就没有文件了。

步骤2:在宿主机的/home/HostDataVolume目录中,创建host-03.txt文件。

# 查看宿主机的当前位置
[root@192 HostDataVolume]# pwd
/home/HostDataVolume # 创建host-03.txt文件
[root@192 HostDataVolume]# touch host-03.txt # 查看是否创建成功host-03.txt文件
[root@192 HostDataVolume]# ll
总用量 8
-rw-r--r--. 1 root root 12 3月 18 21:08 container.txt
-rw-r--r--. 1 root root 0 3月 18 21:07 host-02.txt
-rw-r--r--. 1 root root 0 3月 18 22:27 host-03.txt
-rw-r--r--. 1 root root 13 3月 18 21:03 host.txt # 在host-03.txt添加内容
[root@192 HostDataVolume]# vim host-03.txt
[root@192 HostDataVolume]# cat host-03.txt
hello world,hello docker.

步骤3:在CentOS容器中查看/home/ContainerDataVolume目录中的内容。

# 查看ContainerDataVolume目录中的内容
[root@2c8d185e17b1 /]# ls -l /home/ContainerDataVolume/
total 8
-rw-r--r--. 1 root root 12 Mar 18 13:08 container.txt
-rw-r--r--. 1 root root 0 Mar 18 13:07 host-02.txt
-rw-r--r--. 1 root root 0 Mar 18 14:27 host-03.txt
-rw-r--r--. 1 root root 13 Mar 18 13:03 host.txt # 查看host-03.txt文件中的内容
[root@2c8d185e17b1 /]# cat /home/ContainerDataVolume/host-03.txt
hello world,hello docker.

我们可以看到,宿主机上的创建的host-03.txt文件,同步到CentOS容器中了。

同时我们也可以查看到host-03.txt文件中的内容。

步骤4:在CentOS容器的/home/ContainerDataVolume目录中,创建文件和编写内容。

# 进入ContainerDataVolume目录
[root@2c8d185e17b1 /]# cd /home/ContainerDataVolume/
[root@2c8d185e17b1 ContainerDataVolume]# pwd
/home/ContainerDataVolume # 创建container-02.txt文件
[root@2c8d185e17b1 ContainerDataVolume]# touch container-02.txt
touch: cannot touch 'container-02.txt': Read-only file system
# 我们可以看到提示,不能创建container-02.txt文件,因为是只读文件系统。 # 修改container.txt文件中的内容
[root@2c8d185e17b1 ContainerDataVolume]# cat container.txt
hello world
[root@2c8d185e17b1 ContainerDataVolume]# vi container.txt
# 在我们编辑完成保存时,,出现如下图的提示:

意思是:设置了“只读”选项。对于写操作不支持。

步骤5:使用docker inspect命令查看当前CentOS容器。

# 查看当前运行的centos容器
[root@192 HostDataVolume]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c8d185e17b1 centos "/bin/bash" 25 minutes ago Up 25 minutes # 查看centos容器的具体数据
[root@192 HostDataVolume]# docker inspect 2c8d185e17b1
[
{
"Id": "2c8d185e17b113326ea298f34896b6469e7717fa7450eeec5138767a5bb6915f",
"Created": "2021-03-18T14:20:33.842841276Z",
... # 省略 "HostConfig": { # 主机配置
"Binds": [
"/home/HostDataVolume:/home/ContainerDataVolume:ro"
], # 可以看到主机绑定的挂载上显示ro ... # 省略
},
"Mounts": [ # 容器挂载配置
{
"Type": "bind",
"Source": "/home/HostDataVolume",
"Destination": "/home/ContainerDataVolume",
"Mode": "ro", # 这里标识的只读模式
"RW": false, # 这里的读写权限,标识为false,
"Propagation": "rprivate"
} # "RW" 之前版本的表示为 "VolumesRW"参数
],
"Config": {
... # 省略 # 新版的Dodker把Volumes信息放到了Mounts的Json字待串里了
"Volumes": null, ... # 省略
}, ... # 省略
}
]

总结:

通过上面的演示:数据卷挂载设置ro(只读)权限,只允许宿主机单向的写操作,来同步到容器中。而容器中是无法在数据卷目录中做任何写操作,如创建文件或者修改文件内容等。

我感觉是:一个容器在启动时,会自动同步宿主机上挂载目录中的内容。(这点要记住)

『现学现忘』Docker基础 — 29、Docker容器数据卷的应用的更多相关文章

  1. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  2. 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍

    目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...

  3. 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷

    目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...

  4. 『现学现忘』Docker基础 — 34、DockerFile文件详解

    目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...

  5. 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令

    目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...

  6. 『现学现忘』Docker基础 — 31、实现MySQL同步数据

    目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...

  7. 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理

    目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...

  8. docker 12 docker容器数据卷

    数据卷概念 ♣我们知道,当我们把一个运行中的容器关闭后,容器里的数据就没有了(如果你做了docker commit操作,数据会保留到新的镜像里面).所以我们就需要用容器数据卷把容器数据进行持久化储存. ...

  9. Docker容器数据卷

    ⒈Docker容器中数据如何持久化? ①通过commit命令使容器反向为镜像 ②以容器数据卷的方式将数据抽离 ⒉容器数据卷的作用? ①容器数据的持久化 ②容器间继承.共享数据 ⒊能干嘛? 卷就是目录或 ...

  10. Docker容器数据卷(七)

    Docker致力于: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker co ...

随机推荐

  1. 各种字体.效果和名字对应图. --- by 王朋

    原帖地址:http://www.oschina.net/question/565065_76244

  2. 彻底搞清楚class常量池、运行时常量池、字符串常量池

    彻底搞清楚class常量池.运行时常量池.字符串常量池 常量池-静态常量池 也叫 class文件常量池,主要存放编译期生成的各种字面量(Literal)和符号引用(Symbolic Reference ...

  3. 3M 高可用架构----拓展

    3M 高可用架构 一.MMM 1. MMM的概述 MMM(Master-Master replication manager for MySQL,MySQL主主复制管理器)是一套支持双主故障切换和双主 ...

  4. Lesson10——NumPy 迭代数组

    NumPy 教程目录 NumPy 迭代数组 NumPy 迭代器对象  numpy.nditer  提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. Exa ...

  5. Maven依赖,去哪儿找

    1. 前言 maven是作为Javer日常开发中必不可少的工具,但是很多人对于它的使用也只是仅限于的几个功能. 前几天在使用一个依赖总是说找不到该依赖,但是在中央仓库中的确存在该构建.这个问题让我很困 ...

  6. 《PHP程序员面试笔试宝典》——如果面试问题曾经遇见过,是否要告知面试官?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 面试中,大多数题目都不是凭空想象出来的,而是有章可循,只要求职者肯花时间,耐得住寂寞,复习得当,基本上在面试前都会见过相 ...

  7. Solution -「Code+#4」「洛谷 P4370」组合数问题 2

    \(\mathcal{Description}\)   Link.   给定 \(n,k\),求 \(0\le b\le a\le n\) 的 \(\binom{a}{b}\) 的前 \(k\) 大. ...

  8. vscode打开多个文件

    vscode短时间内打开多个文件会覆盖原先打开的文件,在右方编辑区只显示一个.若想每次打开,都新创建一个编辑,可以用以下2个简单的方法: 方法一:直接在右侧打开的文件上,Ctrl + S,保存一次,再 ...

  9. 学习OMO游戏管理驾驶舱的设计

    2019年第1季度,Smartbi帮助合作伙伴开发了一个销售管理沙盘游戏(OMO),在第一个版本中主要精力放在游戏的后台过程逻辑上(基于电子表格的报表和回写能力),并没有把Smartbi的最强项--数 ...

  10. HDFS的优缺点

    HDFS是一个分布式文件存储系统,前身来自于Google发布的大数据三驾马车之一GFS (Google File System). HDFS的优点: 1.高容错 hdfs具有很高的容错性,数据自动保存 ...