欢迎您, 来到 宁时修博客.^_^

Docker的一些问题--02镜像问题

2018/11/23 言则行 Docker 647
Docker容器技术

一、docker pull下载的镜像存放在哪

    具体镜像保存位置取决于系统和版本,一般Linux系统下,在 /var/lib/docker 里。

    因为Docker使用的存储驱动不同,所以存储方式不一样。当前版本的CentOS和RHEL现在都支持overlay2,推荐使用它。overlay2 是所有当前支持的Linux发行版的首选存储驱动程序,无需额外配置。

    官方文档:https://docs.docker.com/storage/storagedriver/select-storage-driver/

    对于使用 aufs、overlay2 存储驱动的系统,可以直接在/var/lib/docker/{aufs,overlay2} 下看到找到各个镜像的层、容器的层,及其中的内容。

    如 devicemapper 这类存储驱动的系统,镜像会存储于块设备里,因此无法看到具体每层信息以及每层里面的内容。



二、docker images -a 后显示了好多 <none> 的镜像?都是什么呀?能删么?

    <none> 就是说该镜像没有打标签。没有打标签镜像一般分为两类,一类是依赖镜像(中间层镜像),一类是丢了标签的镜像(虚悬镜像)。

    依赖镜像:Docker镜像是分层存储结构,任何镜像除了最上面一层打上标签(tag)外,其下面依赖的一层层存储也是存在的。这些镜像没有打标签,所以显示为<none>。注意观察一下 docker pull 的每一层的sha256的校验值,然后对比一下 <none> 中的相同校验值的镜像,它们就是依赖镜像。这些镜像不应当被删除,因为有标签镜像在依赖它们。


    虚悬镜像:这类镜像原本是有标签,但是镜像发布新版,在docker pull或docker build时,标签转移到新镜像上,旧版镜像标签就被删除了。这类镜像可以被删除。

    手动删除用 docker image prune命令清理所有虚悬镜像。

    定期执行固定脚本来清理,Spotify的开源工具:https://github.com/spotify/docker-gc。



三、为什么说不要使用 import, export, save, load, commit 来构建镜像?

    使用 docker commit 制作的镜像被称为黑箱镜像,换句话说,就是里面进行的是黑箱操作,除本人外无人知晓。即使这个制作镜像的人,过一段时间后也不会完整的记起里面的操作。那么当有些东西需要改变时,或者因基础镜像更新而需要重新制作镜像时,会让一切变得异常困难,就如同重新安装调试配置服务器一样,失去了 Docker 的优势了。且无法维护,不应该被使用。


    import 和 export 的做法,实际上是将一个容器来保存为 tar 文件,然后在导入为镜像。这样制作的镜像同样是黑箱镜像,不应该使用。这类导入导出会导致原有分层丢失,合并为一层,而且会丢失很多相关镜像元数据或者配置,比如 CMD 命令就可能丢失,导致镜像无法直接启动。


    save 和 load 确实是镜像保存和加载,但是这是在没有 registry 的情况下,手动把镜像考来考去,这是回到了十多年的 U 盘时代。这同样是不推荐的,镜像的发布、更新维护应该使用 registry。无论是自己架设私有 registry 服务,还是使用公有 registry 服务,如 Docker Hub。



四、Dockerfile怎么写?

    有人会认为书写Dockerfile就是书写shell脚本,一行一行的把需要的东西装进去就行。

    No.No..,Dockerfile 不等于 shell 脚本,Dockerfile 描述的实际上是镜像的每一层要如何构建,每一条指令都是构建一层。

    Docker是分层存储,上一层的东西不被删除,会保留到下一层,下一层中可以指定删除这部分内容,实际上只是这一层做的某个标记,说这个路径的东西删了。但实际上并不会去修改上一层的东西。Docker每一层都是静态的,这也是容器本身的 immutable 特性,要保持自身的静态特性。在写Dockerfile时,每一层都应该主义清理无关的东西。


    查看官方文档书写Dockerfile:

    Dockerfile官方文档:https://docs.docker.com/engine/reference/builder/

    Dockerfile最佳实践:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/





点赞
说说你的看法

所有评论: (0)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群