Docker镜像讲解_技术学院_宜昌市隼壹珍商贸有限公司

您好,欢迎访问宜昌市隼壹珍商贸有限公司

400 890 5375
当前位置: 主页 > 新闻动态 > 技术学院

Docker镜像讲解

发布时间:2025-06-27  |  点击率:

阅读量: 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操作的攻略

全国统一服务电话

400 890 5375

电子邮箱:879577@qq.com

公司地址:宜昌市西陵区黄河路5号三峡明珠10栋1051室

咨询微信

TEL:13680874598