ARG命令
ARG命令用于定义一个变量,这个变量可以在构建镜像时传递给Docker构建器。具体来说,ARG命令的作用和使用方式如下:
定义构建参数:
ARG <varname>[=<default value>]
<varname>
是变量名,<default value>
是可选的默认值。如果构建镜像时没有传递该变量的值,则使用默认值。
传递构建参数:
在运行docker build
命令时,可以通过--build-arg
选项来传递构建参数:docker build --build-arg <varname>=<value> -t <image_name> .
其中
<varname>
是之前定义的变量名,<value>
是你想传递的值。覆盖参数值:
- 如果在Dockerfile中定义了同名的ARG变量,则命令行传递的值会覆盖Dockerfile中定义的默认值。
例如:
ARG VERSION=1.0
在构建时使用
--build-arg VERSION=2.0
会将版本号从1.0
改为2.0
。
变量使用范围:
- ARG变量在镜像构建过程中有效,但在容器运行时不可用。
例如,可以在RUN指令中使用ARG变量:
ARG VERSION RUN echo $VERSION
未定义的构建参数:
- 如果用户在构建时传递了未在Dockerfile中定义的构建参数,构建过程会发出警告,但不会出错。
例如:
docker build --build-arg UNDEFINED_VAR=value -t image_name .
安全性建议:
- 不建议使用ARG命令传递敏感信息,如GitHub密钥、密码等,因为这些值在构建历史记录中是可见的。
ARG和ENV的关系:
- 可以通过ARG来定义ENV指令的默认值。ENV指令设置的环境变量在镜像构建后和容器运行时均可用。
例如:
ARG APP_VERSION=1.0 ENV VERSION=$APP_VERSION
- 在构建镜像时可以使用
--build-arg APP_VERSION=2.0
来覆盖默认值。
配合使用参数
FROM
- 解释:指定基础镜像。
例子:
FROM ubuntu:20.04
这行代码指定了一个基于Ubuntu 20.04的基础镜像。
MAINTAINER
- 解释:指定维护者信息,已经过时,可以使用LABEL maintainer=<xxx>来替代。
例子:
LABEL maintainer="example@example.com"
RUN
- 解释:运行命令。
例子:
RUN apt-get update && apt-get install -y nginx
这行代码更新了包列表并安装了nginx。
CMD
- 解释:指定启动容器时默认的命令。
例子:
CMD ["nginx", "-g", "daemon off;"]
这行代码在启动容器时运行nginx。
ENTRYPOINT
- 解释:指定镜像的默认入口。运行命令。
例子:
ENTRYPOINT ["python"] CMD ["app.py"]
这两行代码设置python为入口点,并运行
python app.py
。
EXPOSE
- 解释:声明镜像内服务监听的端口。
例子:
EXPOSE 80
这行代码声明容器内应用将会监听80端口。
ENV
- 解释:指定环境变量,可以在docker run的时候使用-e改变;会被固化到image的config里面。
例子:
ENV APP_ENV=production
这行代码设置环境变量
APP_ENV
为production
。
ADD
- 解释:复制指定的src路径下的内容到镜像中的dest路径下,src可以为url会自动下载,可以为tar文件,会自动解压。
例子:
ADD https://example.com/file.tar.gz /tmp/
这行代码从URL下载文件并解压到
/tmp/
目录下。
COPY
- 解释:复制本地主机的src路径下的内容到镜像中的dest路径下,但不会自动解压等。
例子:
COPY . /app
这行代码将本地当前目录的所有文件复制到镜像的
/app
目录。
LABEL
- 解释:指定生成镜像的元数据标签信息。
例子:
LABEL version="1.0" LABEL description="This is an example image"
VOLUME
- 解释:创建数据卷挂载点。
例子:
VOLUME ["/data"]
这行代码创建一个数据卷并挂载到
/data
目录。
USER
- 解释:指定运行容器时的用户名或UID。
例子:
USER appuser
这行代码设置容器内的默认用户为
appuser
。
WORKDIR
- 解释:配置工作目录,为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
例子:
WORKDIR /app
这行代码将工作目录设置为
/app
。
ARG
- 解释:指定镜像构建使用的参数(如版本号等),可以在build的时候,使用--build-args改变。
例子:
ARG VERSION=1.0 RUN echo $VERSION
这行代码设置构建参数
VERSION
为1.0
,并在构建过程中使用该参数。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。