在Docker中,Dockerfile有哪些常见指令?
Dockerfile中的常见指令及其用法如下:
-
FROM
FROM <image>
- 说明:定义构建镜像的基础镜像。
- 用法:指定一个现有镜像作为新建镜像的父镜像,所有后续操作都在这个基础上进行。
-
RUN
RUN <command> (shell form) 或 RUN ["executable", "param1", "param2"] (exec form)
- 说明:在构建镜像时运行命令。
- 用法:用于安装软件包、设置环境变量、执行脚本等操作,每条RUN命令都会产生一个新的镜像层。
示例:
RUN apt-get update && apt-get install -y package_name
-
CMD
CMD ["executable", "param1", "param2"]
- 说明:指定容器启动后的默认命令。
- 用法:每个Dockerfile中只能有一个CMD指令,但可以被docker run命令后面跟随的命令行参数覆盖。
示例:
CMD ["python", "app.py"]
-
ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
- 说明:定义容器启动时执行的可执行程序和参数。
- 用法:类似于CMD,但ENTRYPOINT不会被docker run后面的命令行参数覆盖,而是作为容器启动时固定的入口点。当同时存在CMD和ENTRYPOINT时,CMD参数会作为ENTRYPOINT的额外参数。
示例:
ENTRYPOINT ["java", "-jar", "/app.jar"]
-
COPY
COPY <src>... <dest>
- 说明:将构建上下文目录下的文件或目录复制到镜像内部指定路径。
- 用法:用于将宿主机上的文件复制到容器中。
示例:
COPY ./app /opt/myapp
-
ADD
ADD <src>... <dest>
- 说明:类似于COPY,但ADD还支持从URL获取文件并自动解压缩tar文件。
- 用法:用于将文件或目录从构建上下文或URL复制到镜像中,如果源文件是tar文件,还会自动解压。
示例:
ADD http://example.com/package.tar.xz /usr/src/myapp/
-
WORKDIR
WORKDIR /path/to/workdir
- 说明:设置构建和运行时的工作目录。
- 用法:后续的RUN、CMD、COPY、ADD等指令将在此目录下执行。
示例:
WORKDIR /app
-
ENV
ENV key value
- 说明:设置环境变量。
- 用法:定义的环境变量在构建镜像时和容器运行时均可使用。
示例:
ENV APP_VERSION 1.0
-
ARG
ARG name[=default-value]
- 说明:定义构建时的变量,可以在构建过程中通过
--build-arg
参数传递。 - 用法:构建时动态传入变量值,方便根据不同环境构建不同的镜像。
示例:
ARG BUILD_DATE
- 说明:定义构建时的变量,可以在构建过程中通过
-
EXPOSE
EXPOSE <port> [<port>/tcp|udp> ...]
- 说明:声明容器打算监听的端口,但并不实际开放端口。
- 用法:告诉使用者该容器需要映射哪些端口到宿主机。
示例:
EXPOSE 8080
-
VOLUME
VOLUME ["/data"]
- 说明:创建匿名数据卷,用于持久化数据。
- 用法:指定容器内的目录作为数据卷,数据在容器销毁后得以保存。
示例:
VOLUME ["/var/log/myapp"]
-
USER
USER user[:group]
- 说明:指定运行容器时使用的用户和用户组。
- 用法:改变后续指令和容器运行时的用户身份。
示例:
USER appuser
-
HEALTHCHECK
HEALTHCHECK --interval=5m --timeout=3s \ CMD curl --fail http://localhost/health || exit 1
- 说明:定义检查容器健康状况的命令。
- 用法:用于监测容器的服务是否正常运行。
-
其他较不常用的指令还包括但不限于:
- STOPSIGNAL
定义容器接收到什么信号时应当停止。 - ONBUILD
规定在基于当前镜像构建子镜像时,执行的一些预设命令。 - LABEL
用于给镜像添加元数据标签。
- STOPSIGNAL
综上所述,每个指令的具体使用还需要根据实际需求进行适当调整和组合,以构建出满足特定功能和要求的Docker镜像。