什么是镜像?

简单说, Docker 镜像是一个不包含 Linux 内核而又精简的 Linux 操作系统。

镜像工作原理?

当我们启动一个新的容器时, Docker 会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到 /var/lib/docker/aufs/mnt/ 容器 ID 为目录下,我们可以使用 chroot 进入此目录。如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面的只读层复制到读写层,只读层的这个文件就会覆盖,但还存在,这就实现了文件系统隔离,当删除容器后,读写层的数据将会删除,只读镜像不变。

镜像文件存储结构?

docker 相关文件存放在: /var/lib/docker 目录下

/var/lib/docker/aufs/diff # 每层与其父层之间的文件差异 /var/lib/docker/aufs/layers/ # 每层一个文件,记录其父层一直到根层之间的 ID,大部分文件的最后一行都已,表示继承来自同一层 /var/lib/docker/aufs/mnt # 联合挂载点,从只读层复制到最上层可读写层的文件系统数据

在建立镜像时,每次写操作,都被视作一种增量操作,即在原有的数据层上添加一个新层;所以一个镜像会有若干个层组成。

每次 commit 提交就会对产生一个 ID,就相当于在上一层有加了一层,可以通过这个 ID 对镜像回滚

容器

镜像运行起来的存在 多了一个读写层 隔离运行 TODO 有空再完善

比较

完美的解答:10 张图带你深入理解 Docker 容器和镜像

常用命令

1、关闭所有容器
docker stop `docker ps -a -q`
docker stop $(docker ps -aq)
2、删除所有容器
docker rm `docker ps -a -q`
docker rm $(docker ps -aq)
2、删除所有镜像
docker rmi `docker images -q`
3、按条件删除镜像
  没有打标签
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`
docker rmi $(docker images | grep none|awk '{print $3}')
  镜像名包含关键字
docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    //其中doss-api为关键字
4. 查看镜像历史
docker history 【image】
5.编译
docker build -t [image_name] .
7. 探索内部
docker inspect 【container】
8. 导出
save
9 导入
load
10.运行
run -it -p --name

参考

10 张图带你深入理解 Docker 容器和镜像