当前位置: 首页 > article >正文

学习docker第五弹------Docker容器数据卷

目录

  • 1 引入
  • 2 Docker容器数据卷是什么
  • 3 能干嘛
  • 4 案例
    • 4.1 宿主 vs 容器 之间映射添加容器卷
      • 查看思路
    • 4.2 读写规则映射添加说明
      • 4.2.1 读写(默认)
      • 4.2.2 只读
    • 4.3 卷的继承和共享
      • 4.3.1 容器1 完成和宿主机的映射
      • 4.3.2 容器2 继承容器1 的卷规则
  • 5 后记

1 引入

我们之前挂载数据卷的时候可能会遇到cannot open directory .: Permission denied的错误,解决方案:在挂载目录后多加一个--privileged=true参数,这个参数扩大容器的权限,解决挂载目录没有权限的问题。

回顾一下之前我们所使用过的命令,参数v

docker run -d -p 5000:5000 -v /sunshine/myregistry/:/tmp/registry --privileged=true registry

2 Docker容器数据卷是什么

类似 Redis 里面的 RDBAOF 文件。

持久化是Redis的一个重要的特性,Redis 提供了两种主要的持久化方式:

  1. AOF(Append Only File): Redis 的默认方式,通过将 Redis 服务器执行的写命令追加到文件末尾来记录数据的变化情况。Redis 重新启动时,它会读取AOF文件中的命令,并通过执行这些命令来恢复数据。
  2. RDB(Redis DataBase):它通过将 Redis 数据库的内存快照保存到硬盘上的一个二进制文件中,实现数据的持久化。

数据卷就是将 docker 容器内的数据保存进宿主机的磁盘中。

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

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

3 能干嘛

将运用与运行的环境打包镜像,run 后形成容器实例运行,但是我们希望数据是持久化的。

Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能够保存数据在docker中,我们使用卷。

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

4 案例

4.1 宿主 vs 容器 之间映射添加容器卷

docker run -it --name u2 --privileged=true -v /tmp/myHostData:/tmp/myDockerData vim_ifubuntu:1.4 /bin/bash

查看容器卷是否挂载成功

宿主机上:

cd /tmp/myHostData/
docker ps
docker inspect 821c4ba21903

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看思路

(1)docker修改,主机同步获得
在Docker容器上:

cd /tmp/myDockerData/
ll
echo 'docker update 123' > a.log
ll
cat a.log

在这里插入图片描述

在宿主机上:

ll

在这里插入图片描述
(2)主机修改,docker同步获得
在宿主机上:

echo 'host write 456' >> a.log
cat a.log

在这里插入图片描述

在Docker容器上:

cat a.log

在这里插入图片描述

(3)docker容器stop,主机修改,docker容器重启查看数据是否同步
在Docker容器上:

exit

在宿主机上:

echo 'docker already exit' > b.log
cat b.log

在这里插入图片描述

在Docker容器上:

docker start 821c4ba21903
docker exec -it u2 /bin/bash
cd /tmp/myDockerData/
cat b.log

在这里插入图片描述

4.2 读写规则映射添加说明

4.2.1 读写(默认)

rw = read + write

docker run -it --privileged=true -v /mydocker/u:/tmp:rw vim_ifubuntu:1.4
cd /tmp
ll

在这里插入图片描述

在宿主机上:

cd /mydocker/u
ll

在这里插入图片描述

4.2.2 只读

容器实例内部被限制,只能读取不能写

ro = read only

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it --privileged=true -v /mydocker/u:/tmp:ro vim_ifubuntu:1.4
cd /tmp
ls
touch c.txt

在这里插入图片描述

4.3 卷的继承和共享

4.3.1 容器1 完成和宿主机的映射

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

在这里插入图片描述

在宿主机上:

cd /mydocker/u
ll

在这里插入图片描述

4.3.2 容器2 继承容器1 的卷规则

docker run -it --privileged=true --volumes-from u1 --name u3 ubuntu

在这里插入图片描述

5 后记

丫的,谁捡了我的快递,吃方便面没有调料包!

BB,专家说要保持开心的心态,不管好不好,都要说好,我现在想个办法说它好,捡走了好,这样我就少拆一个快递。

注意这篇文章非常需要考虑运行的命令在宿主机上,还是容器上,大家可以看图片区分一下,记得给我点赞赞~ 如果有用的话!


http://www.kler.cn/news/358616.html

相关文章:

  • Python知识点:基于Python技术和工具,如何使用IPFS进行去中心化存储
  • 基于MATLAB HU不变矩的树叶识别系统
  • 基于python+dj+mysql的音乐推荐系统网页设计
  • 本地部署 mini-omni
  • 【火山引擎】语音识别 |流式语音识别 | python
  • 根据json转HttpClient脚本
  • 数据为何成为资产?
  • 92. Color颜色渐变插值
  • 【JDK、Maven、Git、PostgreSQL】VSCode后端开发环境配置样例
  • 数值优化 | 图解梯度下降法与共轭梯度下降法(附案例分析与Python实现)
  • 北斗导航系统在智能交通领域的应用
  • 利用TDM在vscode中运行c语言
  • PAI 大语言模型评测平台现已支持裁判员模型评测
  • django连接mysql数据库
  • 堆结构和堆排序
  • 【iOS】YYModel
  • Element UI
  • Web安全实践
  • SQL入门
  • jupyter界面修改成中文教程