Docker image
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE redis 4-alpine 23d561d12e92 9 days ago 35.5MB nginx 1.14-alpine 66952fd0a8ef 2 weeks ago 16MB busybox latest 3a093384ac30 6 weeks ago 1.2MB# docker exec -it kvstor1 /bin/sh
/data # ls /
bin data dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var //完整意义上的根文件系统,是底层--> Base Image
Docker Image Layer
位于下层的镜像成为父镜像(parent image),最底层的成为基础镜像(base image)
最上层为"可读写"层,其下的均为"只读"层。
分层构建是在纯净的Debian镜像之上添加一个emacs,然后在emacs之上再添加apache。每添加一个软件都是一个独立的层次,bootfs/Kernel层在容器启动时,rootfs一旦被引导完成,会被从内存中移除。
真正的用户空间运行的只有Debian、emacs、apache这三层,同时这三层是有层级关系的。最底层的是base image,是供给一个系统的基本构成(比如bin、sbin等),但是它是最小化的,没有依赖的应用程序。
如果需要用到某些额外的应用程序的话,需要在其上面进行安装操作。比如最小化安装了centos,然后在centos上安装vim。注意对于镜像来讲,是只读的,需要创建的centos镜像是最小化,是不会动的,安装vim时会在这个镜像上生成一个新的层次,这个层次只包含vim程序。如果安装httpd的话,需要在vim层安装一个新的层次。如果要启动nginx的,就要把centos、vim和nginx这三层都启动起来。
容器启动起来之后,如果需要创建临时文件,一般是放在/tmp目录下的,但是在docker中/tmp是位于底层基础镜像中是不允许编辑的,所以就要在最上层添加可读写层。
注意:如果删除了容器,最上层的"可读写"层也会被删除。
Aufs
镜像的分层构建和联合挂载依赖于中游文件系统的支撑才能实现,在早期用到的专有文件系统叫aufs
# docker info
Storage Driver: overlay2 //前端
Backing Filesystem: xfs //后端
Docker Registry
启动容器时,docker daemon会试图从本地获取相关的镜像;
本地镜像不存在时,其将从Registry中下载该镜像并保存到本地;
如果没有特别指定registry,那么通常就是docker hub,如果要指向别的registry,必须在镜像的访问路径当中指明服务器地址,如果没有服务器地址,只给了仓库名/tags,那么这个镜像一定是指docker hub。