Dockerfile 是一个文本文件,用于定义如何构建一个 Docker 镜像。它包含了若干条指令,每一条指令都会在镜像构建过程中被执行,形成新的镜像层。通过 docker build 命令读取并执行 Dockerfile 中的指令序列,最终生成一个新的 Docker 镜像。
以下是Dockerfile中一些关键概念和常用指令详解:
基础镜像(FROM):
Dockerfile 通常以 FROM 指令开始,指定构建新镜像的基础镜像,例如:FROM ubuntu:latest 表示基于 Ubuntu 的最新版本镜像进行构建。
维护者信息(MAINTAINER)(已废弃,推荐使用 LABEL):
虽然 MAINTAINER 已不再推荐使用,但可以使用 LABEL 指令设置元数据,如:LABEL maintainer="John Doe <john.doe@example.com>"。
工作目录(WORKDIR):
设置构建时及容器运行时的工作目录,例如:WORKDIR /app。
复制文件(COPY)和添加文件(ADD):
COPY 指令从构建上下文目录中复制文件或目录到镜像内部。
ADD 指令类似,但除了复制文件外,还可以自动解压 tar 压缩包,并可以从 URL 下载文件。
运行命令(RUN):
在构建镜像的过程中执行 shell 命令或执行程序,每次 RUN 都会产生一个新的镜像层。例如:RUN apt-get update && apt-get install -y nginx。
环境变量(ENV):
定义将在构建过程以及容器运行时使用的环境变量,例如:ENV NODE_ENV=production.
暴露端口(EXPOSE):
声明容器运行时将要监听的端口号,但这不会在主机上自动创建端口映射,例如:EXPOSE 80 443。
入口点(ENTRYPOINT) 和 默认命令(CMD):
ENTRYPOINT 设定容器启动后执行的默认可执行程序及其参数,不可被 docker run 命令直接覆盖(除非使用 --entrypoint 参数),但其后的 CMD 参数会被追加至 ENTRYPOINT 后作为额外参数传递。
CMD 则是为容器提供默认的命令和参数,如果在 docker run 时指定了命令,则会覆盖 CMD 提供的默认值。
健康检查(HEALTHCHECK):
用于定义一个测试容器服务是否健康的命令,例如:HEALTHCHECK --interval=5m --timeout=3s CMD curl --fail http://localhost/ || exit 1
用户和组(USER、GROUP):
指定镜像内运行进程的用户和组身份,例如:USER appuser
通过这些指令以及其他更多指令(比如 VOLUME、STOPSIGNAL 等),
开发者能够详细地定制化 Docker 镜像,使其满足特定的应用需求。在编写 Dockerfile 时,应遵循最佳实践,如减少层数、最小化镜像大小、利用缓存提高构建速度等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。