Docker 容器和 Docker 镜像的区别
在本文中,我们将通过展示构成容器和图像的组件以及使它们不同的功能来了解容器和图像之间的区别。
了解 Docker 中的层
要创建自定义镜像,我们通常使用 Dockerfile,它定义了使用基础镜像创建自定义镜像的指令。 可用于在 Dockerfile 中构建映像的指令如下。
FROM node:16.17.0-alpine
WORKDIR /app
ADD package*.json ./
RUN npm install
ADD . .
CMD node index.js
Docker 镜像是使用彼此堆叠的层创建的。 当 Dockerfile 中的指令操作能够添加或删除文件时,将向堆栈添加一个新层。
请注意
,并非 Dockerfile 中定义的所有指令都会创建一个新层。 例如,CMD 指令将有关要在容器内运行的命令的元数据添加到图像中。
另请注意,使用 Dockerfile 创建的层除最后一层外都是只读的。
当我们创建容器时,会创建一个新的薄层。 这一层和上一层的区别在于我们可以从这一层读写文件。
容器运行后,写入新文件、修改已有文件、删除文件等操作都在薄读写层进行。 下图显示了包含图像的只读层和容器的读写层的堆栈。
Docker 容器和镜像之间的区别
在上一节中,我们已经看到堆栈的顶层是容器使用的薄读写层,其他层是用于创建自定义图像的只读层。
这是 Docker 容器和镜像之间的主要区别。 在容器中添加或删除文件的任何更改都会对特定容器的薄读写层进行。
请注意,删除容器会删除其关联层。 但是,基本映像不会被删除。
创建的每个容器都有其读写层,允许它们共享基础映像但保持其数据状态。 下图展示了多个容器如何共享一个基础镜像。
总结
我们在本文中学习了如何通过使用层来区分 docker 容器和 docker 镜像。 我们已经了解到,镜像是使用名为 Dockerfile 的文件创建的,文件中的每条指令形成一个堆叠在另一层之上的只读层。
最后,我们了解到最上层是一个读写层,供容器用来添加或修改文件变化。
相关文章
在 Linux 中托管 Docker Internal
发布时间:2023/04/18 浏览次数:139 分类:Docker
-
Docker 允许开发人员通过将应用程序包装在称为容器的标准化单元中来高效地构建、测试和部署应用程序。 在使用 Docker 容器时,您可能会遇到需要将容器与主机连接的场景。
在 Docker 中设置工作目录
发布时间:2023/04/18 浏览次数:82 分类:Docker
-
在 Docker 中,我们可以通过编辑 Dockerfile 并添加密钥 WORKDIR 来设置我们的工作目录。本文将讨论在 Docker 中更改我们当前和默认的工作目录。
在 Docker 容器中公开多个端口
发布时间:2023/04/18 浏览次数:143 分类:Docker
-
Docker 容器使用端口来实现万维网上不同设备之间的通信。 在本篇文章中,我们将学习如何使用 Nginx 应用程序在 Docker 容器中公开多个端口。
将用户添加到 Docker 容器
发布时间:2023/04/18 浏览次数:187 分类:Docker
-
在本文中,我们将学习如何通过实现返回产品数组的 Express 应用程序将用户添加到 Docker 容器。
使用 Docker 网络主机命令
发布时间:2023/04/18 浏览次数:112 分类:Docker
-
在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。
清除 Docker 容器日志
发布时间:2023/04/18 浏览次数:181 分类:Docker
-
本文介绍了我们可以用来清除 docker 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。
Dockerfile 中 COPY 和 ADD 命令的区别
发布时间:2023/04/18 浏览次数:158 分类:Docker
-
在 Dockerfile 中,我们可以使用 COPY 或 ADD 命令复制这些文件。 这些命令在功能上是相同的; 但是,存在一些差异。本文介绍了 Dockerfile 中 COPY 和 ADD 命令之间的区别。