首页>软件资讯>常见问题

常见问题

Docker镜像原理

发布时间:2024-09-26 22:25:26人气:43

什么是 Docker 镜像?

Docker 镜像是用于在 Docker 容器中执行代码的文件。Docker 镜像充当构建 Docker 容器(如模板)的一组指令。使用 Docker 时,Docker 映像也充当起点。映像相当于虚拟机 (VM) 环境中的快照。


Docker 是一个开源项目,用于在容器中创建、运行和部署应用程序。Docker 镜像包含应用程序代码、库、工具、依赖项和运行应用程序所需的其他文件。当用户运行映像时,它可以成为容器的一个或多个实例。Docker 守护程序在后台运行,以监督映像、容器和相关任务。客户端和守护程序之间的通信是通过套接字或 RESTful API 实现的。

Docker 镜像层

Docker 映像具有多个层,每个层都源自前一层,但不同。这些层加快了 Docker 构建速度,同时提高了可重用性并减少了磁盘使用。层有助于避免传输冗余数据,并跳过每个 Docker 缓存尚未更改的任何构建步骤。


图像图层也是只读文件。创建容器后,将在不可更改的图像上添加一个可写层,以便用户进行更改。


对 Docker 映像和容器中磁盘空间的引用可能会令人困惑。区分大小和虚拟大小非常重要。Size 是指容器的可写层使用的磁盘空间,而 virtual size 是容器和可写层使用的磁盘空间。镜像的只读层可以在从同一镜像启动的任何容器之间共享。


Docker 镜像使用案例

Docker 镜像提供了广泛的使用案例,这些案例具有以下优势:


开发和部署效率。Docker 镜像包含运行容器化应用程序所需的一切,包括代码、配置文件、环境变量、库和运行时。将映像部署到 Docker 环境时,可以作为 Docker 容器执行。docker run 命令从特定镜像创建容器。

一致性。Docker 为应用程序提供了一致的环境,使它们在从开发到生产的所有环境中都能一致地运行。此外,Docker 的奇偶校验功能可确保映像无论在哪个服务器或笔记本电脑上运行,其功能都相同,从而在配置环境和解决每个环境特有的问题时节省时间。

平台独立性。Docker 镜像是跨平台镜像。例如,它可以在 Windows 环境中创建,提交到 Docker 中心,并由运行 Linux 和其他操作系统 (OS) 的用户获取。

可移植性。 Docker 镜像轻量级、体积小且速度快,这使得它们在所有不同版本的 Linux、笔记本电脑或云之间都极具可移植性。

速度和敏捷性。Docker 使用户能够立即创建和部署容器,而无需启动操作系统。Docker 能够轻松创建、销毁、停止或启动容器,并通过 YAML 配置文件自动部署,从而简化了基础设施扩展。通过在整个管道中使用容器映像并支持非依赖作业并发执行,它可以加快 CI/CD 管道的速度,从而加快上市时间并提高工作效率。

隔离和安全性。Docker 映像通过在容器中运行应用程序来提供隔离。由于每个容器都有自己的文件系统、进程和网络堆栈,因此依赖项和程序与主机系统以及彼此分开。这种隔离可以提高安全性并防止应用程序之间的冲突。

版本控制和回滚。Docker 的更改提交和版本控制功能可以在新更改中断环境时立即回滚到以前的版本。

可 重用。Docker 镜像是可部署在任何主机上的可重用资产。开发人员可以从一个项目中获取静态图像层,并在另一个项目中使用它们。这节省了用户的时间,因为他们不必从头开始重新创建映像。

可扩展性。通过启动多个容器实例,Docker 镜像有助于轻松进行水平应用程序扩展。通过使用 Docker Swarm 或 Kubernetes 等编排和管理选项,组织可以根据需求自动进行负载均衡和扩展。

Docker 容器与 Docker 镜像

Docker 容器和 Docker 镜像都是 Docker 中执行独特特征的基本概念。Docker 容器和 Docker 镜像之间的主要区别包括以下内容。


Docker 容器

Docker 容器是应用程序开发中使用的虚拟化运行时环境。

它用于创建、运行和部署与底层硬件隔离的应用程序。

Docker 容器可以使用一台机器,共享其内核并虚拟化操作系统以运行更多隔离的进程。因此,Docker 容器是轻量级的。

Docker 容器可以快速扩展,以满足不断变化的工作负载的需求。这使得它们适用于微服务架构和云原生应用程序。

Docker 镜像

Docker 镜像类似于其他类型的 VM 环境中的快照。它是 Docker 容器在特定时间点的记录。

Docker 镜像也是不可变的。虽然它们无法更改,但可以复制、共享或删除。此功能对于测试新软件或配置非常有用,因为无论发生什么,映像都不会更改。

容器依赖于 Docker 镜像,并且需要可运行镜像才能存在,因为镜像用于构建运行时环境,并且需要运行应用程序。

Docker 镜像是使用该命令创建的,并位于 Docker 注册表中。由于它们的分层结构,其中多层图像相互构建,因此它们需要最少的网络数据传输。

Docker 镜像剖析

Docker 镜像有很多层。每个映像都包含配置容器环境所需的一切,包括系统库、工具、依赖项和其他文件。图像的各个部分包括以下内容:


基础图像。用户可以使用 build 命令完全从头开始构建第一层。基础镜像作为初始空层,便于从头开始构建 Docker 镜像。虽然提供对映像内容的完全控制,但基础映像通常是为具有高级 Docker 技能的用户量身定制的。

父图像。作为基础映像的替代方法,父映像可以是 Docker 映像中的第一层。它是一个重复使用的图像,用作所有其他图层的基础。标准父映像通常由基本 Linux 发行版或附带已安装的服务(如内容管理系统或数据库管理系统)组成。

层。使用代码将层添加到基础映像中,使其能够在容器中运行。Docker 映像的每一层都可以在 /var/lib/docker/aufs/diff 下或通过命令行界面 (CLI) 中的 Docker 历史记录命令查看。Docker 的默认状态是显示所有顶层映像,包括存储库、标签和文件大小。缓存中间图层,使顶层更易于查看。Docker 存储驱动器管理映像层内容。

容器层。Docker 镜像不仅会创建新容器,还会创建可写层或容器层。此层托管对正在运行的容器所做的更改,并存储新写入和删除的文件以及对现有文件的更改。此层还用于自定义容器。

Docker 清单。Docker 镜像的这一部分是一个附加文件。它使用 JavaScript Object Notation 格式来描述图像,使用图像标记、数字签名等信息,以及有关如何为各种平台类型设置容器的说明。

Docker 镜像仓库

Docker 镜像存储库是存储和管理 Docker 镜像的中心位置。映像存储在私有或公共存储库中,例如 Docker Hub 注册表中的存储库,用户可以从中部署容器以及测试和共享映像。Docker Hub 的 Docker Trusted Registry 还提供镜像管理和访问控制功能。


官方镜像是 Docker 生成的镜像,而社区镜像是 Docker 用户创建的镜像。Datadog/docker-dd-agent 是 Datadog Log Management 程序中代理的 Docker 容器,是社区 Docker 映像的一个示例。


用户还可以从现有镜像创建新镜像,并使用 docker 命令将自定义镜像上传到 Docker Hub。为了确保社区映像的质量,Docker 在发布之前会向作者提供反馈。映像发布后,作者负责更新。作者在从另一方获取图像时必须谨慎,因为攻击者可以通过旨在诱骗用户认为他们来自可信来源的山寨图像来访问系统。push


最新映像的概念也可能引起混淆。标记的 Docker 镜像不一定是通常意义上的最新镜像。latest 标签不是指映像的最近推送版本;它只是一个默认标签。:latest


如何创建 Docker 镜像

可以使用交互式方法或 Dockerfile 方法创建 Docker 映像。


交互式方法

交互式方法是创建 docker 镜像的最简单方法。使用此方法,用户可以从现有 Docker 映像运行容器,并在保存映像之前手动对环境进行任何必要的更改。此方法适用于首选更动手、更实时的映像创建方法的方案,从而支持直接操作和自定义容器环境。


创建 Docker 镜像涉及以下步骤:


启动 Docker 并打开终端会话。

使用 Docker run command 。这将启动与从映像启动的容器的 shell 会话。如果省略标签名称,Docker 将使用最新版本的映像。image_name:tag_name

在此之后,图像应显示在结果中。

Dockerfile 方法

Dockerfile 是一个基于文本的文件,没有文件扩展名,其中包含 Docker 用于构建容器映像的指令脚本。此过程更加困难和耗时,但在持续交付环境中表现良好。该方法包括创建 Dockerfile 和添加映像所需的命令。


以下是创建 Docker 镜像所涉及的步骤:


启动 Dockerfile 后,用户会设置一个 .dockerignore 文件,以排除最终构建不需要的任何文件。.dockerignore 文件位于根目录中。

使用 Docker 命令创建 Docker 镜像,并设置镜像名称和标签。build

Docker 命令用于查看创建的镜像。images

Docker 镜像命令

有一组主要的 Docker 镜像命令,归类为子命令;其中一些包括:


Docker 镜像构建。从 Dockerfile 构建镜像。

Docker 镜像检查。显示有关一个或多个图像的信息。

Docker 镜像加载。从 tar 存档或流加载图像以接收或读取输入。这也称为 STDIN。

Docker 镜像修剪。删除未使用的图像。

Docker 镜像拉取。从注册表中提取镜像或存储库。

Docker 镜像推送。将镜像或存储库推送到注册表。

Docker 镜像 rm.删除一个或多个图像。

Docker 镜像保存。将一个或多个图像保存到 tar 存档,并默认流式传输到正常输出或 STDOUT。

Docker 镜像标签。创建引用 的标记。TARGET_IMAGESOURCE_IMAGE

Docker CLI 提供用于自定义 Docker 镜像的命令。Docker 镜像命令的示例包括:


Docker 镜像历史记录。显示图像的历史记录,包括对图像及其图层所做的更改。

Docker 更新。更新容器的配置。

Docker 标记。创建一个标签(例如 ),用于对容器镜像进行分组和组织。TARGET_IMAGE

Docker 搜索。在 Docker Hub 中查找用户需要的任何内容。

Docker 保存。将图像保存到存档中。

Docker 编写。处理环境变量。

Docker 和 OpenShift 都用作容器化工具,每种工具都有自己的优点和缺点。深入研究它们的主要差异,以做出明智的业务决策。



上一条:Docker使用案例

下一条:Docker最新安装教程