ARG命令

ARG命令用于定义一个变量,这个变量可以在构建镜像时传递给Docker构建器。具体来说,ARG命令的作用和使用方式如下:

  1. 定义构建参数

    ARG <varname>[=<default value>]
    • <varname>是变量名,<default value>是可选的默认值。如果构建镜像时没有传递该变量的值,则使用默认值。
  2. 传递构建参数
    在运行docker build命令时,可以通过--build-arg选项来传递构建参数:

    docker build --build-arg <varname>=<value> -t <image_name> .

    其中<varname>是之前定义的变量名,<value>是你想传递的值。

  3. 覆盖参数值

    • 如果在Dockerfile中定义了同名的ARG变量,则命令行传递的值会覆盖Dockerfile中定义的默认值。
    • 例如:

      ARG VERSION=1.0

      在构建时使用--build-arg VERSION=2.0会将版本号从1.0改为2.0

  4. 变量使用范围

    • ARG变量在镜像构建过程中有效,但在容器运行时不可用。
    • 例如,可以在RUN指令中使用ARG变量:

      ARG VERSION
      RUN echo $VERSION
  5. 未定义的构建参数

    • 如果用户在构建时传递了未在Dockerfile中定义的构建参数,构建过程会发出警告,但不会出错。
    • 例如:

      docker build --build-arg UNDEFINED_VAR=value -t image_name .
  6. 安全性建议

    • 不建议使用ARG命令传递敏感信息,如GitHub密钥、密码等,因为这些值在构建历史记录中是可见的。
  7. ARG和ENV的关系

    • 可以通过ARG来定义ENV指令的默认值。ENV指令设置的环境变量在镜像构建后和容器运行时均可用。
    • 例如:

      ARG APP_VERSION=1.0
      ENV VERSION=$APP_VERSION
    • 在构建镜像时可以使用--build-arg APP_VERSION=2.0来覆盖默认值。

配合使用参数

  1. FROM

    • 解释:指定基础镜像。
    • 例子

      FROM ubuntu:20.04

      这行代码指定了一个基于Ubuntu 20.04的基础镜像。

  2. MAINTAINER

    • 解释:指定维护者信息,已经过时,可以使用LABEL maintainer=<xxx>来替代。
    • 例子

      LABEL maintainer="example@example.com"
  3. RUN

    • 解释:运行命令。
    • 例子

      RUN apt-get update && apt-get install -y nginx

      这行代码更新了包列表并安装了nginx。

  4. CMD

    • 解释:指定启动容器时默认的命令。
    • 例子

      CMD ["nginx", "-g", "daemon off;"]

      这行代码在启动容器时运行nginx。

  5. ENTRYPOINT

    • 解释:指定镜像的默认入口。运行命令。
    • 例子

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

      这两行代码设置python为入口点,并运行python app.py

  6. EXPOSE

    • 解释:声明镜像内服务监听的端口。
    • 例子

      EXPOSE 80

      这行代码声明容器内应用将会监听80端口。

  7. ENV

    • 解释:指定环境变量,可以在docker run的时候使用-e改变;会被固化到image的config里面。
    • 例子

      ENV APP_ENV=production

      这行代码设置环境变量APP_ENVproduction

  8. ADD

    • 解释:复制指定的src路径下的内容到镜像中的dest路径下,src可以为url会自动下载,可以为tar文件,会自动解压。
    • 例子

      ADD https://example.com/file.tar.gz /tmp/

      这行代码从URL下载文件并解压到/tmp/目录下。

  9. COPY

    • 解释:复制本地主机的src路径下的内容到镜像中的dest路径下,但不会自动解压等。
    • 例子

      COPY . /app

      这行代码将本地当前目录的所有文件复制到镜像的/app目录。

  10. LABEL

    • 解释:指定生成镜像的元数据标签信息。
    • 例子

      LABEL version="1.0"
      LABEL description="This is an example image"
  11. VOLUME

    • 解释:创建数据卷挂载点。
    • 例子

      VOLUME ["/data"]

      这行代码创建一个数据卷并挂载到/data目录。

  12. USER

    • 解释:指定运行容器时的用户名或UID。
    • 例子

      USER appuser

      这行代码设置容器内的默认用户为appuser

  13. WORKDIR

    • 解释:配置工作目录,为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
    • 例子

      WORKDIR /app

      这行代码将工作目录设置为/app

  14. ARG

    • 解释:指定镜像构建使用的参数(如版本号等),可以在build的时候,使用--build-args改变。
    • 例子

      ARG VERSION=1.0
      RUN echo $VERSION

      这行代码设置构建参数VERSION1.0,并在构建过程中使用该参数。

本文由mdnice多平台发布


逼格高的汤圆
7 声望2 粉丝