Author:赵志乾
Date:2024-08-01
Declaration:All Right Reserved!!!
1. 简介
RUN在Dockerfile中用于镜像的构建;其基本功能如下:
- 构建镜像:RUN在Dockerfile中用于执行命令,并在当前镜像基础上创建一个新的镜像层。这些命令可以是安装软件包、复制文件或进行配置更改等操作;
- 提交结果:执行完命令后,RUN会将结果提交为新的镜像层,该镜像层将用于Dockerfile中的后续步骤;
2. 工作流程
- 检查镜像:Docker引擎检查本地是否存在指定的基础镜像,若不存在则会从仓库下载该镜像;
- 执行命令:在基础镜像上,Docker引擎执行RUN中指定的命令,这些命令可以是shell命令或exec格式的命令;
- 提交结果:执行完命令后,Docker会将更新提交为一个新的镜像层;该镜像层包含了所有由RUN指令引起的文件系统更改;
- 创建容器:当使用构建好的镜像创建容器时,Docker会将这些镜像层叠加在一起,并在最顶层添加一个可写层,用于容器运行时的更改;
备注:RUN以Shell模式运行命令的(如 RUN apt-get update && apt-get install -y nginx),Docker将调用 /bin/sh -c 来执行这些命令;以exec模式运行命令的(如 RUN ["apt-get","update"]),Docker将直接调用指定命令,而不会通过shell;
3. 注意事项
- 分层存储:Docker镜像采用分层存储的方式,每个RUN指令都会创建一个新的镜像层;这种方式有助于镜像的复用和共享,但过多的层可能会导致镜像体积过大,影响构建和传输效率;
- 命令合并:为减少镜像层数,建议将多个命令合并为一个RUN指令运行;这可以通过使用shell的&&、|等操作符或使用换行符\来实现;
- 环境变量:在RUN中使用环境变量时,需要注意环境变量的作用域和值;在shell模式下,可以直接使用环境变量,而在exec模式下,则需要确保环境变量在命令执行时可用;