Docker 入门教程(二)镜像 Image

联合文件系统

镜像的基础是联合文件系统 (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 ;

常用命令

列几个常用的跟镜像有关的命令;

  1. 拉取镜像 如果不指定版本则拉取 latest 版的;
docker pull ubuntu

也可以指定版本

docker pull ubuntu:19.04
  1. 列出镜像列表
docker images
  1. 删除镜像
    删除的时候需要指定 IMAGE ID ;
docker rmi cfcdd3336ca3

或者也可以使用 REPOSITORY + TAG ;

docker rmi ubuntu:latest

还有重要的 commit 命令留在后面讲容器后来写;

Docker 与联合文件系统

早期的 Docker 使用的 AUFS ; 16.04 以后的版本已经换成 overlay2
前面讲的 docker pull 成功拉取的镜像存储在 /var/lib/docker/overlay2 目录;
这里面的目录最终会通过联合文件系统合并成一个 Ubuntu ;

    • 彳亍
白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共6条评论
白俊遥博客

陌路,随心 ✅已认证 :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 回复