Dockerfile 是 Docker 容器镜像的构建文件,它包含了构建这个容器镜像所需要的所有指令,例如基础镜像、安装软件、设置环境变量等等。在 Dockerfile 中,每一个指令都代表着一个镜像层,这些层会被组合成一个完整的镜像。
FROM
FROM 指令是 Dockerfile 中的第一条指令,它指定了构建镜像的基础镜像。例如:
FROM node:18.12.4
这表示我们将以 node:18.12.4 为基础镜像来构建我们的容器。
RUN
RUN 指令用于在镜像中运行指定的命令。例如:
RUN apt-get update && apt-get install -y nginx
这条命令会在镜像中安装 nginx 服务器。
COPY
COPY 指令用于将本地文件复制到镜像中。例如:
COPY index.html /var/www/html/
这条命令会将本地的 index.html 文件复制到镜像中的 /var/www/html/ 目录下。
WORKDIR
WORKDIR 指令用于设置工作目录。例如:
WORKDIR /var/www/html/
这条命令会将工作目录设置为 /var/www/html/。
EXPOSE
EXPOSE 指令用于指定容器运行时监听的端口。例如:
EXPOSE 80
这条命令表示容器会监听 80 端口。
CMD
CMD 指令用于指定容器启动后要执行的命令。例如:
CMD ["nginx", "-g", "daemon off;"]
这条命令表示容器启动后会执行 nginx -g "daemon off;" 命令。
这些指令是 Dockerfile 中最常用的指令,当然还有其他的指令,例如 ENV、LABEL、ENTRYPOINT 等等。了解这些指令的作用,可以帮助我们更好地构建自己的 Docker 镜像。
ENV
ENV 指令用于设置环境变量。例如:
ENV NODE_ENV=production
这条命令会将 NODE_ENV 设置为 production。
LABEL
LABEL 指令用于为镜像添加元数据,例如维护者、版本号等等。例如:
LABEL maintainer="docker_user <docker_user@docker.com>"
LABEL version="1.0"
这些元数据可以通过 docker inspect 命令来查看。
ENTRYPOINT
ENTRYPOINT 指令用于指定容器启动时要执行的命令。与 CMD 不同的是,ENTRYPOINT 指令指定的命令不会被 docker run 命令后面的命令覆盖。例如:
ENTRYPOINT ["nginx", "-g", "daemon off;"]
这条命令表示容器启动后会执行 nginx -g "daemon off;" 命令,而且无法通过 docker run 命令后面的命令来覆盖。
了解这些指令可以帮助我们更好地构建自己的 Docker 镜像,使得镜像更加轻量级、更加可靠、更加易于管理。