Back_To_Home..
Dockerfile
January 2015 (76 Words, 1 Minutes)
Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令,用于描述镜像的创建过程。以下是Dockerfile的基本语法:
指令格式
- 每条指令都以大写字母开头,后面跟着参数,指令和参数之间用空格分隔,例如
FROM ubuntu:latest。 - 指令不区分大小写,但通常遵循大写的约定,以提高可读性。
- 可以使用
#进行单行注释,从#开始到行末的内容都会被Docker忽略,例如# 这是一个注释。
基础指令
- FROM:指定基础镜像,是Dockerfile中必须的第一条指令,如
FROM ubuntu:22.04,表示基于Ubuntu 22.04镜像构建新镜像。 - MAINTAINER:指定镜像的维护者信息,格式为
MAINTAINER <name>或MAINTAINER <name> <email>,如MAINTAINER John Doe johndoe@example.com,该指令已被LABEL maintainer替代。 - RUN:用于在镜像构建过程中执行命令,有两种格式, shell格式
RUN <command>和exec格式RUN ["executable", "param1", "param2"],如RUN apt-get update && apt-get install -y python3。 - CMD:指定容器启动时要执行的命令,有三种格式,
CMD ["executable","param1","param2"](exec格式,推荐)、CMD ["param1","param2"](作为ENTRYPOINT的参数)和CMD command param1 param2(shell格式)。如CMD ["python3", "app.py"]。 - ENTRYPOINT:配置容器启动时要执行的可执行文件,让容器像命令一样运行。格式与CMD类似,如
ENTRYPOINT ["nginx", "-g", "daemon off;"]。
配置指令
- WORKDIR:设置容器内的工作目录,后续的指令如
RUN、CMD、COPY等操作都将在该目录下进行,可多次使用,如WORKDIR /app。 - EXPOSE:声明容器运行时监听的端口,格式为
EXPOSE <port> [<port>/<protocol>...],如EXPOSE 8080或EXPOSE 8080/tcp。 - VOLUME:创建挂载点,用于将容器内的数据存储到宿主机或其他容器中,格式为
VOLUME ["/data"]或VOLUME /data,如VOLUME ["/app/data"]。 - USER:设置运行容器时的用户名或UID,如
USER appuser或USER 1001。
构建指令
- ADD:将本地文件或目录复制到容器中,还可以自动解压URL和tar文件,格式为
ADD <src>... <dest>,如ADD. /app。 - COPY:将本地文件或目录复制到容器中,格式与ADD类似,但不支持自动解压和URL,如
COPY. /app。 - ARG:定义构建时的变量,可在构建命令中通过
--build-arg参数传递值,格式为ARG <name>[=<default value>],如ARG VERSION=1.0。
元数据指令
- LABEL:为镜像添加元数据标签,格式为
LABEL <key>=<value> [<key>=<value>...],如LABEL version="1.0" description="My app image"。
多阶段构建指令
- 可以使用多个
FROM指令在一个Dockerfile中进行多阶段构建,以减小最终镜像的大小。例如:
FROM golang:1.18 as build
WORKDIR /app
COPY..
RUN go build -o myapp
FROM alpine:latest
WORKDIR /app
COPY --from=build /app/myapp.
CMD ["./myapp"]