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

学习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.mrgr.cn/news/55158.html

相关文章:

  • Snort浅析
  • GRPC 压缩算法
  • 使用RabbitMQ实现延迟消息的完整指南
  • 中国白酒怎么喝
  • Vim使用与进阶
  • 浏览器实时更新esp32-c3 Supermini http server 数据
  • 【题解】—— LeetCode一周小结42
  • 一般HR面试程序员会问什么问题?
  • 如何在分布式环境中实现高可靠性分布式锁
  • Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
  • 分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用
  • 全面击破工程级复杂缓存难题
  • 温度传感器
  • Java网络编程 - headers
  • YOLOv11模型改进-注意力-引入简单无参数注意力模块SimAM 提升小目标和遮挡检测
  • 华为OD机试 - 贪心歌手 - 动态规划(Python/JS/C/C++ 2024 D卷 200分)
  • 探秘Python读取文件内容的奥秘:从入门到精通
  • 500强企业是如何进行数据安全建设的?看这篇就够了
  • javaspringbootmsyql银行客户管理系统91826-计算机毕业设计项目选题推荐(附源码)
  • 政府采购合同公告明细数据(1996-2024年)
  • AI没必要学
  • 使用上述Python脚本来更新系统环境变量
  • 局域网——Prim Kruskal
  • Python学习100天第14天之网络编程入门和网络应用开发
  • 什么是智能电网?
  • vscode:black formatter配置