Docker镜像管理篇
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Docker镜像概述
1>.什么是docker镜像
Docker镜像含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于创建并启动docker容器。
Docker镜像含里面是一层层文件系统,叫做联合文件系统(Union FS),联合文件系统开源将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通的Linux系统的目录结构一样,docker通过这些文件再加上宿主机的内核提供了一个Linux的虚拟环境,每一层文件系统我们叫做layer。 联合文件系统(Union FS)可以对每一层(layer)文件系统设置三种权限,即只读(readonly),读写(readwrite)和写出(whiteout-able)。严格来说,docker镜像中每一层文件系统都是只读的或者说是禁止直接修改,因为大家都知道容器是基于镜像启动的,如果A,B用户都基于同一个镜像启动的容器进行开发,如果镜像内容不一致会导致两个人拿到的初始代码不一致! 构建镜像的时候,从一个最基础的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层网上叠加,上层的修改会覆盖底层该位置的可见性。这很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层文件系统也不需要知道里面有几层,如下图所示。
2>.容器,镜像和父镜像关系
3>.docker镜像(image)和Linux文件系统对比
一个典型的Linux文件系统由bootfs(全称为"boot file system")和rootfs("root file system")两部分组成。bootfs主要包含bootloader和kernel,bootloader主要用于引导加载kernel,当kernel被加载到内存中后bootfs会被卸载(umount)掉。rootfs包含就是典型Linux系统中的"/bin","/dev","/etc","/home","/proc"等标准目录和文件。
docker image中最基础的两层结构,不同的Linux发行版(如Ubuntu和CentOS)在rootfs这一层会有所区别,但是对于docker镜像通常都比较小,官方提供的CentOS基础镜像在220MB左右,一些其它版本镜像甚至不到10MB,docker镜像直接调用宿主机的内核,镜像中只提供rootfs,也就是只需要包括最基本的命令,工具和程序库就可以了,比如alpine镜像仅有5.59M左右。
如下图所示,两个不同的docker image在同一个宿主机内核上实现不同的rootfs。
二.Docker镜像的管理命令
docker命令是常使用的docker客户端命令,其后面可以加不同的参数以实现响应的功能,常用的镜像管理相关命令如下。
[root@docker201.yinzhengjie.org.cn ~]# docker image --help Usage: docker image COMMAND Manage images Commands: build Build an image from a Dockerfile history Show the history of an image import Import the contents from a tarball to create a filesystem image inspect Display detailed information on one or more images load Load an image from a tar archive or STDIN ls List images prune Remove unused images pull Pull an image or a repository from a registry push Push an image or a repository to a registry rm Remove one or more images save Save one or more images to a tar archive (streamed to STDOUT by default) tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE Run 'docker image COMMAND --help' for more information on a command. [root@docker201.yinzhengjie.org.cn ~]# [root@docker201.yinzhengjie.org.cn ~]#