0

0

Docker镜像讲解

星夢妙者

星夢妙者

发布时间:2025-06-27 12:18:23

|

1070人浏览过

|

来源于php中文网

原创

阅读量: 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等。

Docker镜像讲解第一张图展示了仅包含bootfs和rootfs的基础镜像。如果要创建一个emacs环境的镜像,就在这个基础上添加一层emacs镜像,如图二所示。如果再添加一个Apache环境,就在图二的基础上再加一层apache镜像,如图三所示。图中每一层镜像都可以被复用。

对于一个精简的操作系统,rootfs可以很小,只需要包含最基本的命令、工具和程序库,因为它可以直接使用宿主机的kernel,只需提供rootfs即可。因此,不同的Linux发行版虽然bootfs基本一致,但rootfs会有差异,所以不同的发行版可以共享bootfs。

分层下载的理解:

当我们下载一个镜像时,可以观察到它是一层层下载的,而且对于已经重复的文件,不会再次下载。

Docker镜像讲解思考:为什么Docker要采用分层下载的方式呢?

所有Docker镜像都从一个基础镜像层开始。当进行修改或添加新内容时,会在当前镜像层之上创建新的镜像层。

举个简单的例子,假设基于Ubuntu Linux 16.04创建一个新镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会基于基础镜像层创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。

当前镜像已经包含三个镜像层,如下图所示(这只是一个用于演示的简单例子)。

Movio
Movio

AI真人出镜视频讲解

下载

Docker镜像讲解在添加额外镜像层的同时,镜像始终保持为当前所有镜像层的组合,理解这一点非常重要。下图中展示了一个简单的例子,每个镜像层包含三个文件,而整体的大镜像包含了来自两个镜像层的六个文件。

Docker镜像讲解上图中的镜像层与之前的图略有不同,主要是为了便于展示文件。

下图展示了一个稍微复杂的三层镜像,从外部来看,整个镜像只有六个文件,因为最上层的文件7是文件5的一个更新版本。

Docker镜像讲解在这种情况下,上层镜像层的文件会覆盖底层镜像层的文件。这样,文件的更新版本作为一个新镜像层添加到镜像中。

Docker通过存储引擎(新版本采用快照机制)来实现镜像层堆栈,并确保多镜像层对外展示为一个统一的文件系统。

在Linux上可用的存储引擎包括AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。每种存储引擎都基于Linux中对应的文件系统或块设备技术,并且每种都有其独特的性能特点。

Docker在Windows上仅支持windowsfilter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW(Copy-on-Write)。

特点:

Docker镜像都是只读的。当用镜像创建容器并启动时,实际上是在原镜像之上新建了一层可写层,这层称为容器层,容器层之下的称为镜像层。

Docker镜像讲解Docker镜像讲解commit镜像:

commit命令用于从容器创建一个新的镜像,其具体操作命令如下:

docker commit 提交容器成为一个镜像
docker commit -a="作者名" -m="提交的描述信息" 容器id 镜像名称[:tag]

更多关于commit操作的攻略

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

727

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

630

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

747

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1237

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

576

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

702

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

194

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.9万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 1.9万人学习

Node.js-前端工程化必学
Node.js-前端工程化必学

共19课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号