暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

掌握Docker ARG命令:轻松实现动态构建参数传递

293

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=来替代。
    • 例子
      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_ENV
      production
  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

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


文章转载自周同学带您玩AI,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论