Dockerfile指令详解
1. FROM
拉取 / 引用一个基础镜像,作为镜像构建的起点,后续所有指令全部叠加在此镜像之上
2. ENV
在镜像内写入环境变量
生效范围:镜像构建阶段(RUN 指令能够读取)、容器启动运行阶段(容器内所有进程均可读取该变量)
查看方式:
①进入正在运行的容器内部查看 env | grep 环境变量名
②在宿主机外部,不进容器 docker inspect 镜像 / 容器名
3. LABEL
向镜像元数据写入键值对信息(作者、版本、项目备注等)
特性:仅用于展示,不会生成新镜像文件层,不会改变容器运行逻辑
查看方式:
只能通过宿主机 docker inspect 镜像 / 容器名

4. WORKDIR
设置容器内部的工作目录路径;目录不存在则自动创建
影响:后续 RUN / COPY / ADD / CMD 等指令,全部以该目录作为默认工作路径
5. COPY
构建阶段将宿主机构建上下文目录中的文件,原样复制写入镜像文件层
特性:单纯文件拷贝,不会自动解压压缩包。日常复制文件优先使用 COPY
6. ADD
复制宿主机上下文文件到镜像内
特殊逻辑:如果源文件是本地 tar/tar.gz 压缩包,复制完成后自动解压到目标路径
7. RUN
构建阶段启动临时容器,执行命令;命令执行完成后,将容器内文件改动提交生成一层新的只读镜像层,临时容器销毁
用途:安装软件、源码编译、配置系统环境
8. EXPOSE
仅在镜像元数据中声明容器计划占用的端口
重点误区:不会自动开放端口、不会自动完成端口映射;外部访问容器仍然需要启动参数 -p
9. VOLUME
预先定义容器内的数据挂载目录
生效时机:构建(build)镜像阶段不执行挂载;容器启动时 Docker 自动创建可写挂载点,实现数据持久化,数据生命周期独立于容器
两种方式使用方式:


10. STOPSIGNAL
写入镜像配置,定义执行docker stop时发送给容器 PID1 进程的信号(例如 SIGQUIT 适配 nginx 优雅退出)
11. ENTRYPOINT
定义容器启动时执行的主程序
优先级:高于 CMD;docker run 追加的参数,会传递给 ENTRYPOINT,不会覆盖 ENTRYPOINT 本身程序
12. CMD
定义容器默认启动指令 / 默认参数
两种场景:
① 单独使用:docker run 不带额外参数则执行 CMD;run 后追加命令会直接完整覆盖 CMD ② 搭配 ENTRYPOINT:CMD 充当 ENTRYPOINT 的默认参数
总结:
COPY、ADD、RUN在临时容器执行,会修改文件系统(rootfs),生成新镜像只读层;
ENV、LABEL、WORKDIR、EXPOSE、VOLUME、STOPSIGNAL、ENTRYPOINT、CMD执行时不会启动临时容器、不会新增实体文件,仅修改镜像配置
实体文件:占用磁盘数据块、真实存储数据的文件
更多推荐

所有评论(0)