『现学现忘』Docker基础 — 29、Docker容器数据卷的应用
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
说明ro:read 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容器数据卷的应用的更多相关文章
- Docker(六)容器数据卷
容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...
- 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...
- 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...
- 『现学现忘』Docker基础 — 34、DockerFile文件详解
目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...
- 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...
- 『现学现忘』Docker基础 — 31、实现MySQL同步数据
目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...
- 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理
目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...
- docker 12 docker容器数据卷
数据卷概念 ♣我们知道,当我们把一个运行中的容器关闭后,容器里的数据就没有了(如果你做了docker commit操作,数据会保留到新的镜像里面).所以我们就需要用容器数据卷把容器数据进行持久化储存. ...
- Docker容器数据卷
⒈Docker容器中数据如何持久化? ①通过commit命令使容器反向为镜像 ②以容器数据卷的方式将数据抽离 ⒉容器数据卷的作用? ①容器数据的持久化 ②容器间继承.共享数据 ⒊能干嘛? 卷就是目录或 ...
- Docker容器数据卷(七)
Docker致力于: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker co ...
随机推荐
- Linux防火墙(iptables/firewalld)
Linux防火墙(iptables/firewalld) 目录 Linux防火墙(iptables/firewalld) 一.iptables 1. iptables概述 2. netfilter和i ...
- 微服务技术栈简单介绍,Eureka和Ribbon的引入和使用
一.了解微服务架构 1.微服务技术栈 整体框架 整体学习规划路线2.微服务与单体架构的区别 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优势 结构简单 部署成本低 缺点 耦合度高, ...
- MySQL高性能学习笔记
索引 何为索引?有什么作用? 索引是一种用于快速查询和检索数据的数据结构.常见的索引结构有: B 树, B+树和 Hash. 索引的作用就相当于目录的作用.打个比方: 我们在查字典的时候,如果没有目录 ...
- 使用VMware安装win10虚拟机
(1)打开VMware: (2)打开左上角的文件,点击新建虚拟机: (3)选择典型,下一步: (4)选择稍后安装操作系统,下一步: (5)选择win10×64,下一步: (6)可随意修改虚拟机名称,位 ...
- 文本处理命令(sort+uniq+cut+tr+wc)+三剑客之sed
目录 文本处理命令+三剑客之sed 一.文本处理命令 1.排序命令 sort 2.检查/删除命令 uniq 3. cut 显示特定部分命令 4. 替换或删除命令 tr 5.统计 计算数字命令 wc 二 ...
- Memory Management in Rust
程序在运行时需要请求操作系统分配内存以及释放内存,因此,程序员在编写程序时,需要显式(手动)地编写分配和释放内存的代码,或者隐式(自动,由语言保证)地进行内存管理.对于前者,C/C++ 是代表语言,程 ...
- 搭建 NFS 服务 & 实时同步
今日内容 NFS简介 实现 NFS 文件同步功能 NFS 配置详解 统一用户 搭建 web 服务 NFS 实现文件共享 内容详细 1.NFS 简介 1.1 介绍 实现多台 web 服务器可以共享数据资 ...
- 公式编辑器CVE-2018-0798样本分析
当前样本是一个RTF文档,内嵌一个公式编辑器对象,该对象利用Office编辑器漏洞CVE-2018-0798执行shellcode,对EQNEDT32.exe进行代码注入,执行恶意代码. 使用 ...
- 016 Linux 卧槽,看懂进程信息也不难嘛?top、ps
目录 1 扒开看看 top 命令参数详情 第一行,[top - ]任务队列信息 第二行,[Tasks] 任务(进程) 第三行,[Cpu(s)]状态信息 第四行,[Mem]内存状态 第五行,[Swap] ...
- WebKit Inside: DOM树的构建
当客户端App主进程创建WKWebView对象时,会创建另外两个子进程:渲染进程与网络进程.主进程WKWebView发起请求时,先将请求转发给渲染进程,渲染进程再转发给网络进程,网络进程请求服务器.如 ...