欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

程序员文章站 2022-04-18 20:57:59
...

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

(一) 个人分层理解

在前文中 有过 拉取Mysql 最新版后 再拉取mysql 5.7.30在下载镜像的时候 提示有些文件已存在!

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

其实 通过第二章 学习 拉取了许许多多镜像后 终于发现 无论什么镜像 在下载的时候 都不是一个下载进度条 都是多层 多个进度条下载 有的会提示 Already exists 好像 一个镜像被拆分成了 多层宝塔一般 同时分层下载。

个人理解 : 这种分层技术 是 docker 强大的功能点之一 会减少很多的冗余文件 每一个镜像 都设置为宝塔形,进行分层 。当某一个镜像 依赖于另一个镜像的分层 时会先判断 该层是否已存在 如果存在 则不下载 ,仅仅下载镜像所需的额外部分。 类似于盖楼房 一层一层的堆积 上层依赖于下层。 那么当删除镜像的时候呢 ,也会查看自己构成镜像的所有层 如果 自己的某层级在被另一个镜像所依赖(使用)则会忽略删除该层。

​ 正如咱上放的mysql 可能依赖于什么 (举个例子: centos 啊 xxxx等) 那么在第一次pull mysql 时 会判断当前docker 是否含有 这个centos 镜像分层 有的话 则不下载 ,继续下载mysql 镜像所必须要使用的其余分层。 然后一层一层的 下载完后 组成了一个完整的 mysql镜像。

​ 当我们再次下载 mysql5.7.30的时候 可能 mysql:5.7.30 镜像与mysql 镜像 有使用到相同的层级 那么在pull mysql:5.7.30的时候 会先查询docker 是否含有mysql:5.7.30所要使用的 镜像 ,经查询 发现果然 有的层已经是被在拉取 mysql的时候下载了 ,所以拉取5.7.30的时候回提示 Already exists,由于构建mysql5.7.30其余层没有 则继续下载新的其余的层级。

(二)数据卷的简单使用

数据卷概念

docker 容器虽然好用 ,但是咱发现了一些问题

场景1: 比如,我在安装了mysql 并把mysql 作为数据源 在项目中使用 ,那么不想使用这个容器 或者这个容器出现问题 需要删除时 不是吧mysql 容器中的数据也删除了吗?? 这不就是我们产后说的,删库跑路吗。 需求:需要 容器数据持久化 或绑定到外部宿主机

场景2: 通过前文 发现了 容器中 无法使用一个Linux命令 ,例如 ll,vim,vi等 那么我们在修改一些配置文件时就很不方便 例如 修改redis ,mongo 等配置文件 ,还需要额外下载vim 等命令 ,每个容器都需要下载,且下载速非常缓慢,这样,肯定是不行的。 需求:外部修改 同步到容器 或类似于宿主机与容器间的端口映射

将宿主机中的某个目录,映射到容器中,这样,在容器中此目录下的修改,即便容器关闭,数据也会保留下来,供宿主机和其他容器访问。

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:

- 数据卷可以在容器之间共享和重用

- 对数据卷的修改会立马生效

- 对数据卷的更新,不会影响镜像

- 卷会一直存在,直到没有容器使用

数据卷的使用

在run 镜像的时候 使用-v 参数 来实现 宿主目录与虚拟机目录进行挂载映射

例如 启动一个redis 镜像 设置端口映射 设置别名为aa

docker run -d  -p 6888:6379 --name aaa -v /test:/data redis

发现咱们的宿主机 /test 目录已经与 aaa 容器 /data 目录挂载起来了

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

使用xshell再打开一个窗口 进行同步测试

​ 咱们在 容器中新建一个 qqqq.file 文件 ,查看 宿主机中 /test 目录下是否会自动添加

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

我们再在容器中 输出语句到 qqqq.file中

在容器输出语句到 qqqq.file 也同步到了 外部的 /test目录下的 qqqq.file 文件

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

那么容器内部 同步到外部 没什么问题了 咱再测测 外部文件同步内部容器

发现外部添加的 leilei.java 文件也同步到了容器内

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

那么 咱们 关闭容器 是否还能进行同步呢?

首先ctrl+p+q退出容器后 在宿主机上编写 语句 然后从起容器进入内部查看-----发现也同步了

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

特别需要注意的是:删除文件 也是同步的,无论是删除宿主机上文件 还是容器内部文件都会进行同步删除

咱将整合容器进行删除 ----整个容器删除 数据不会同步 意思是 不会因为容器的删除 而删除其挂载在外部宿主机的目录

Docker学习之路(三) docker 文件 分层理解 数据卷 数据同步

那么做一个小的总结

容器内新建 删除 修改文件 <---------------> 宿主机外部挂载的目录 同步

容器删除<-----|||||-----> 宿主机外部挂载的目录不会同步

…未完待续

相关标签: docker linux