镜像的基础是联合文件系统 (UnionFS) ;
这个联合文件系统我们可以简单的理解为把多个目录挂载到一个目录下;
举个栗子;
这里创建 A 和 B 以及 C 三个目录;
A 目录下有 a.txt 文件和 z.txt 文件;
B 目录下有 b.txt 文件和 z.txt 文件;
C 目录下是空的;
|-- A
| |-- a.txt
| `-- z.txt
|-- B
| |-- b.txt
| `-- z.txt
`-- C
那联合文件系统就可以实现把 a.txt 、 b.txt 、 z.txt 挂载到 C 目录下;
这里是使用的 Linux 的 mount
命令;
sudo mount -t aufs -o dirs=./A:./B none ./C
-t aufs
: 使用 AUFS
文件系统;
-o dirs=./A:./B
: 把 目录 A 和目录 B 联合在一起 :
后面可以跟读写权限;比如 ./A:rw:
none
: 不需要设备;
./C
: 将前面的目录联合到 C 目录下;
执行命令后的效果是这样的;
|-- A
| |-- a.txt
| `-- z.txt
|-- B
| |-- b.txt
| `-- z.txt
`-- C
|-- a.txt
|-- b.txt
`-- z.txt
当我们修改 C 目录下的 a.txt 的时候就相当于修改 A 目录下的 a.txt 文件;
a.txt 和 b.txt 还好理解点;
那这个A 和 B 目录下都有的 z.txt 怎么样呢?
实际上如果我们修改了 C 目录下的 z.txt 文件;
只有 A 目录下的 z.txt 文件会被改变;
B 目录下的 z.txt 文件并没有变动;
原因是 mount
如果没有指定权限的时候默认最左边的目录可读写;
后面的目录都是只读的;
这样我们可以引申出层的概念;
就是把文件分为只读、以及读写的层;
我们可以一层一层的加东西了;
这就有点 Git 的 commit 的感觉了;
好了;上面这些作为了解即可;
下面进入主题 Docker ;
列几个常用的跟镜像有关的命令;
docker pull ubuntu
也可以指定版本
docker pull ubuntu:19.04
docker images
docker rmi cfcdd3336ca3
或者也可以使用 REPOSITORY + TAG ;
docker rmi ubuntu:latest
还有重要的 commit 命令留在后面讲容器后来写;
早期的 Docker 使用的 AUFS
;
16.04 以后的版本已经换成 overlay2
;
前面讲的 docker pull
成功拉取的镜像存储在 /var/lib/docker/overlay2
目录;
这里面的目录最终会通过联合文件系统合并成一个 Ubuntu ;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
陌路,随心 ✅已认证 :51564545
2020-07-07 21:28:03 回复
zwsnail :请问我看docker info里面Docker Root Dir: /var/lib/docker可是我找不到这个文件也没有这个路径:/var/lib/docker/overlay2我用的是desk for Mac
2020-02-12 18:24:10 回复
CAIException :我的mac 也找不到这个目录
2020-08-08 10:11:04 回复
TaZ、Rainbow、的Yang :白哥,杨攀遥的博客链接已更换为www.yangpanyao.com 麻烦帮忙改下链接
2019-10-17 20:38:30 回复
云淡风晴 :好的; 改了;
2019-10-17 20:44:48 回复
你好鸭 :666
2021-03-09 04:54:19 回复
最新评论