Dockerfile 中的指令用于定义构建 Docker 镜像的具体步骤。以下是一些常用的 Dockerfile 指令及其用途:
-
FROM
FROM
是 Dockerfile 的第一条有效指令,它指定基础镜像,所有后续的操作都是基于这个基础镜像进行的。
FROM ubuntu:20.04
-
RUN
RUN
用于在构建镜像过程中执行命令或脚本,它可以用来安装软件包、修改配置文件等操作。
RUN apt-get update && apt-get install -y curl
-
COPY
COPY
将从构建上下文目录中复制文件或目录到容器内部指定路径。
COPY myapp /usr/local/bin/
-
ADD
ADD
类似于COPY
,但它还可以支持解压缩 tar 文件,并且可以自动下载 URL 地址指向的文件到容器内。
ADD package.tar.gz /opt/ ADD http://example.com/app.zip /tmp/
-
WORKDIR
WORKDIR
设置工作目录,后续的RUN
、CMD
、ENTRYPOINT
、COPY
和ADD
指令将在这个目录下执行。
WORKDIR /app
-
ENV
ENV
用于设置环境变量,这些变量将在构建时和容器运行时都可用。
ENV VAR_NAME value
-
ARG
ARG
定义构建参数,可以在构建时通过--build-arg
参数传递值,通常用于动态配置编译选项或其他需要根据构建场景变化的内容。
ARG BUILD_ARG=value
-
VOLUME
VOLUME
创建一个可以从宿主机或其他容器挂载的数据卷。
VOLUME ["/data"]
-
EXPOSE
EXPOSE
声明容器运行时将会监听的端口,但不会自动映射到宿主机端口,需在运行时使用-p
或-P
参数进行端口映射。
EXPOSE 8080
-
CMD
CMD
提供了容器启动时默认要执行的命令和参数,如果用户在运行容器时指定了docker run
后面的命令,则会覆盖 CMD 指定的命令。
CMD ["python", "app.py"]
-
ENTRYPOINT
ENTRYPOINT
类似于CMD
,也是设置容器启动时执行的命令,但是更具有固定性,一般不会被 docker run 时的命令行参数覆盖,而是将命令行参数附加到 ENTRYPOINT 指定的命令之后。
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
以上是 Dockerfile 中常见的一些指令,实际编写时可根据项目需求灵活组合和使用。