WHY docker?

Docker/Kubernetes 天天弄,可是又有多少底层技术深刻的记在心里呢。

原理:COW (Copy On Write)

Docker 镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层,并在镜像栈顶部添加一个读写成。如果运行的容器修改了一个已经存在的文件。那么文件就会从只读层复制到读写层,该文件的只读版本依然存在。

理解原理后,便是要思考如何运用到工作中🥶。

  • 容器最后的读写层,可能一般包含了修改的文件。 所以应该避免将容器,docker commit 的方式提交到registry。

  • docker ps -s 可以看到容器总共的size(含读写层),以及读写层的size。

  • docker history 看到的 某些层为missing,没有标注ID。其实是因为这些层不在这台电脑上封装。

    image.png

base 镜像 - Linux最小安装的Linux发行版

  • 在Dockerhub上拉去一个centos镜像,看到只有200mb。困惑。其实这是因为docker镜像在运行时,使用的是docker宿主机的kernel。Linux操作系统由内核空间和用户空间组成。

    image.png

My Question

那么相同的两个镜像,做了少许改动后,push到harbor,客户端需要把镜像每一层都重新推到harbor上吗?答案是no。registry 会做一个判断,如果层的校验值一致,其实会提示Layer already exists。直接跳过。

image.png

Author: Chandler Kwok
Link: http://yoursite.com/2020/04/14/why-docker/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.