作者信息:https://home.cnblogs.com/u/huangjiabobk

在Docker中,Dockerfile有哪些常见指令?

Dockerfile中的常见指令及其用法如下:

  1. FROM

    FROM <image>
    
    • 说明:定义构建镜像的基础镜像。
    • 用法:指定一个现有镜像作为新建镜像的父镜像,所有后续操作都在这个基础上进行。
  2. RUN

    RUN <command> (shell form) 或
    RUN ["executable", "param1", "param2"] (exec form)
    
    • 说明:在构建镜像时运行命令。
    • 用法:用于安装软件包、设置环境变量、执行脚本等操作,每条RUN命令都会产生一个新的镜像层。

    示例:

    RUN apt-get update && apt-get install -y package_name
    
  3. CMD

    CMD ["executable", "param1", "param2"]
    
    • 说明:指定容器启动后的默认命令。
    • 用法:每个Dockerfile中只能有一个CMD指令,但可以被docker run命令后面跟随的命令行参数覆盖。

    示例:

    CMD ["python", "app.py"]
    
  4. ENTRYPOINT

    ENTRYPOINT ["executable", "param1", "param2"]
    
    • 说明:定义容器启动时执行的可执行程序和参数。
    • 用法:类似于CMD,但ENTRYPOINT不会被docker run后面的命令行参数覆盖,而是作为容器启动时固定的入口点。当同时存在CMD和ENTRYPOINT时,CMD参数会作为ENTRYPOINT的额外参数。

    示例:

    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
  5. COPY

    COPY <src>... <dest>
    
    • 说明:将构建上下文目录下的文件或目录复制到镜像内部指定路径。
    • 用法:用于将宿主机上的文件复制到容器中。

    示例:

    COPY ./app /opt/myapp
    
  6. ADD

    ADD <src>... <dest>
    
    • 说明:类似于COPY,但ADD还支持从URL获取文件并自动解压缩tar文件。
    • 用法:用于将文件或目录从构建上下文或URL复制到镜像中,如果源文件是tar文件,还会自动解压。

    示例:

    ADD http://example.com/package.tar.xz /usr/src/myapp/
    
  7. WORKDIR

    WORKDIR /path/to/workdir
    
    • 说明:设置构建和运行时的工作目录。
    • 用法:后续的RUN、CMD、COPY、ADD等指令将在此目录下执行。

    示例:

    WORKDIR /app
    
  8. ENV

    ENV key value
    
    • 说明:设置环境变量。
    • 用法:定义的环境变量在构建镜像时和容器运行时均可使用。

    示例:

    ENV APP_VERSION 1.0
    
  9. ARG

    ARG name[=default-value]
    
    • 说明:定义构建时的变量,可以在构建过程中通过--build-arg参数传递。
    • 用法:构建时动态传入变量值,方便根据不同环境构建不同的镜像。

    示例:

    ARG BUILD_DATE
    
  10. EXPOSE

    EXPOSE <port> [<port>/tcp|udp> ...]
    
    • 说明:声明容器打算监听的端口,但并不实际开放端口。
    • 用法:告诉使用者该容器需要映射哪些端口到宿主机。

    示例:

    EXPOSE 8080
    
  11. VOLUME

    VOLUME ["/data"]
    
    • 说明:创建匿名数据卷,用于持久化数据。
    • 用法:指定容器内的目录作为数据卷,数据在容器销毁后得以保存。

    示例:

    VOLUME ["/var/log/myapp"]
    
  12. USER

    USER user[:group]
    
    • 说明:指定运行容器时使用的用户和用户组。
    • 用法:改变后续指令和容器运行时的用户身份。

    示例:

    USER appuser
    
  13. HEALTHCHECK

    HEALTHCHECK --interval=5m --timeout=3s \
        CMD curl --fail http://localhost/health || exit 1
    
    • 说明:定义检查容器健康状况的命令。
    • 用法:用于监测容器的服务是否正常运行。
  14. 其他较不常用的指令还包括但不限于:

    • STOPSIGNAL
      定义容器接收到什么信号时应当停止。
    • ONBUILD
      规定在基于当前镜像构建子镜像时,执行的一些预设命令。
    • LABEL
      用于给镜像添加元数据标签。

综上所述,每个指令的具体使用还需要根据实际需求进行适当调整和组合,以构建出满足特定功能和要求的Docker镜像。

posted @ 2024-03-07 11:01  黄嘉波  阅读(49)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波