阅读量: 483
Docker镜像是一种轻量级、可执行的独立软件包,用于打包软件运行环境及基于此环境开发的软件。它包含了软件运行所需的所有内容,包括代码、库、环境变量、配置文件和运行时环境等。所有的应用程序都可以直接打包成Docker镜像,然后通过镜像创建容器并运行。
如何获取镜像:
你可以从远程仓库(如docker hub或阿里云镜像仓库)下载镜像,也可以由朋友拷贝给你,或者自己通过Dockerfile制作一个镜像。还可以通过对已有镜像的容器进行修改(或不修改),然后使用Commit命令提交一个新的镜像。
Docker镜像加载原理:
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统称为UnionFS。bootfs(boot file system)主要包含bootloader和kernel,其中bootloader用于引导加载kernel。Linux启动时会加载bootfs文件系统,这是在Docker镜像的最底层。这一层与典型的Linux/Unix系统类似,包含boot加载器和内核。当boot加载完成后,整个内核会在内存中运行,此时内存的控制权从bootfs转移到内核,系统也会卸载bootfs。
rootfs(root file system)位于bootfs之上,包含典型Linux系统中的标准目录和文件,如/dev, /proc, /bin, /etc等。rootfs代表了各种不同的操作系统发行版,例如Ubuntu和Centos等。
第一张图展示了仅包含bootfs和rootfs的基础镜像。如果要创建一个emacs环境的镜像,就在这个基础上添加一层emacs镜像,如图二所示。如果再添加一个Apache环境,就在图二的基础上再加一层apache镜像,如图三所示。图中每一层镜像都可以被复用。
对于一个精简的操作系统,rootfs可以很小,只需要包含最基本的命令、工具和程序库,因为它可以直接使用宿主机的kernel,只需提供rootfs即可。因此,不同的Linux发行版虽然bootfs基本一致,但rootfs会有差异,所以不同的发行版可以共享bootfs。
分层下载的理解:
当我们下载一个镜像时,可以观察到它是一层层下载的,而且对于已经重复的文件,不会再次下载。
思考:为什么Docker要采用分层下载的方式呢?
所有Docker镜像都从一个基础镜像层开始。当进行修改或添加新内容时,会在当前镜像层之上创建新的镜像层。
举个简单的例子,假设基于Ubuntu Linux 16.04创建一个新镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会基于基础镜像层创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
当前镜像已经包含三个镜像层,如下图所示(这只是一个用于演示的简单例子)。
在添加额外镜像层的同时,镜像始终保持为当前所有镜像层的组合,理解这一点非常重要。下图中展示了一个简单的例子,每个镜像层包含三个文件,而整体的大镜像包含了来自两个镜像层的六个文件。
上图中的镜像层与之前的图略有不同,主要是为了便于展示文件。
下图展示了一个稍微复杂的三层镜像,从外部来看,整个镜像只有六个文件,因为最上层的文件7是文件5的一个更新版本。
在这种情况下,上层镜像层的文件会覆盖底层镜像层的文件。这样,文件的更新版本作为一个新镜像层添加到镜像中。
Docker通过存储引擎(新版本采用快照机制)来实现镜像层堆栈,并确保多镜像层对外展示为一个统一的文件系统。
在Linux上可用的存储引擎包括AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。每种存储引擎都基于Linux中对应的文件系统或块设备技术,并且每种都有其独特的性能特点。
Docker在Windows上仅支持windowsfilter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW(Copy-on-Write)。
特点:
Docker镜像都是只读的。当用镜像创建容器并启动时,实际上是在原镜像之上新建了一层可写层,这层称为容器层,容器层之下的称为镜像层。
commit镜像:
commit命令用于从容器创建一个新的镜像,其具体操作命令如下:
docker commit 提交容器成为一个镜像 docker commit -a="作者名" -m="提交的描述信息" 容器id 镜像名称[:tag]
更多关于commit操作的攻略
以上就是Docker镜像讲解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号