Docker构建中的”RUN”命令运行环境

68次阅读
没有评论

问题描述

在Docker构建过程中,使用”RUN”命令时,它运行在什么样的”环境”中呢?更具体地说,它是在构建时运行还是在容器启动时运行?它是否使用了FROM中提到的操作系统?

解决方案

在Dockerfile中,”RUN”步骤是在”docker build”过程中执行的。操作系统与宿主机共享(容器与虚拟机不同)。用于定义临时容器的文件系统和其余配置是基于前一步骤生成的镜像状态的。Dockerfile中的每个步骤都使用附加的元数据和文件系统层扩展镜像。

“RUN”步骤本身是在一个临时容器内执行的。”RUN”步骤的输出是在命令成功退出时容器中存在的任何文件系统更改。对于Shell的更改(如”cd”命令或在Shell内设置环境变量)、生成的进程以及在卷内部的文件更改都会被丢弃。对容器文件系统的更改被捕获为文件系统层,包含在生成的镜像中。

总结来说,”RUN”命令实际上是在构建时运行的,它在构建过程中创建临时容器并在其中执行命令,然后将文件系统更改捕获为镜像的一部分。

请注意以下操作可能因版本差异或风险性操作而有所不同,建议在操作前做好备份。

操作步骤

以下是使用”Dockerfile”中的”RUN”命令的基本步骤:
1. 创建一个名为”Dockerfile”的文本文件。
2. 在文件中定义Docker镜像的构建过程,包括各个步骤和命令。
3. 使用”RUN”关键字后跟要在临时容器内执行的命令。

以下是一个示例的”Dockerfile”文件:

# 使用基础镜像作为起点
FROM ubuntu:latest

# 在临时容器内执行命令
RUN apt-get update && apt-get install -y curl

# 其他构建步骤...

在上面的示例中,我们从最新版本的Ubuntu镜像作为起点,并使用”RUN”命令在临时容器内执行了更新和安装curl工具的操作。这些操作都是在构建过程中进行的,生成了一个包含所有更改的新镜像。

请注意,”RUN”命令是在构建时执行的,它的效果在构建过程中体现,并且会生成一个新的镜像,该镜像包含了所有”RUN”步骤中的文件系统更改。

通过理解”Dockerfile”中”RUN”命令的运行时机,你可以更好地控制镜像的构建过程,确保所需的软件包和配置被正确地添加到最终的Docker镜像中。

正文完