参考答案:
在 Dockerfile
中,常见的指令(命令)有很多,每个指令都有特定的作用,帮助我们定义 Docker 镜像的构建过程。以下是一些最常见和最重要的 Dockerfile
指令:
FROM
指令指定基础镜像,它是 Dockerfile 中必须的第一行。每个 Dockerfile
都必须以 FROM
开头,指定镜像的基础。
1FROM <image_name>:<tag>
<image_name>
:指定基础镜像的名称。<tag>
:指定镜像的标签(默认是 latest
)。1FROM ubuntu:20.04
LABEL
用于为镜像添加元数据(例如镜像的作者、版本等)。这种信息通常用于镜像的标识和管理。
1LABEL key="value"
1LABEL maintainer="example@example.com" 2LABEL version="1.0"
RUN
指令在构建镜像过程中执行命令。它用于安装软件包、执行 shell 脚本或进行其他设置,命令执行完成后会将结果保存到镜像中。
1RUN <command>
1RUN apt-get update && apt-get install -y python3
COPY
将文件或目录从构建上下文复制到镜像中的指定路径。
1COPY <src> <dest>
<src>
:要复制的文件或目录路径(相对于 Dockerfile 的上下文路径)。<dest>
:复制到镜像中的路径。1COPY ./app /usr/src/app
ADD
类似于 COPY
,但是 ADD
更强大,它支持自动解压 .tar
文件和从 URL 下载文件。
1ADD <src> <dest>
1ADD ./app.tar.gz /usr/src/app
CMD
指定一个默认的命令或参数,该命令会在容器启动时运行。如果容器启动时未指定其他命令,CMD
定义的命令将被执行。
1CMD ["executable", "param1", "param2"]
CMD echo "Hello, World!"
CMD ["echo", "Hello, World!"]
1CMD ["python3", "app.py"]
ENTRYPOINT
用于设置容器的启动命令。与 CMD
不同,ENTRYPOINT
不能被 docker run
命令替代。如果 ENTRYPOINT
和 CMD
都指定了,则 CMD
提供默认参数给 ENTRYPOINT
。
1ENTRYPOINT ["executable", "param1", "param2"]
1ENTRYPOINT ["python3", "app.py"]
EXPOSE
指定容器应暴露的端口。它仅仅是一个说明,Docker 不会自动将端口映射到主机上。实际的端口映射需要使用 docker run
或 docker-compose
配置。
1EXPOSE <port>
1EXPOSE 8080
ENV
设置环境变量,可以在容器运行时使用。
1ENV <key>=<value>
1ENV APP_HOME=/usr/src/app
VOLUME
指定一个或多个匿名卷,这些卷会在容器启动时创建。卷可以用于持久化存储数据。
1VOLUME ["/data"]
1VOLUME ["/data", "/config"]
WORKDIR
设置工作目录。如果指定的目录不存在,WORKDIR
会自动创建。
1WORKDIR <path>
1WORKDIR /usr/src/app
USER
指定在容器中运行命令时的用户。它是一个非常重要的安全措施,防止容器以 root 用户身份运行应用程序。
1USER <username>
1USER nobody
ARG
定义了在构建时可用的构建参数。与环境变量不同,ARG
只在构建阶段有效,构建完成后不可用。
1ARG <name>[=<default_value>]
1ARG VERSION=1.0
SHELL
指定在 RUN
指令中使用的 shell 类型和参数。
1SHELL ["executable", "parameters"]
1SHELL ["powershell", "-Command"]
最近更新时间:2024-12-09