Dockerfile是一个用来定义构建镜像的文件,通常分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器自动执行指令。
- FROM:第一行必须指定基础镜像
FROM nginx
或
FROM nginx:1.18
- MAINTAINER:维护者信息
MAINTAINER admin admin@admin.com
- RUN:在当前镜像基础上执行命令,并提交为新的镜像
RUN yum install nginx
- CMD:指定启动容器时执行的命令,有且只能有一个CMD,如果存在多个,则只有最后一个生效;如果在"docker run"指定了运行命令,CMD的命令会被覆盖掉
CMD ["executable", "arg1", "arg2", ...]
- ENTRYPOINT:指定启动容器时执行的命令,有且只能有一个,如果存在多个则只有最后一个生效;"docker run"指定命令时不会被覆盖掉
ENTRYPOINT ["executable", "arg1", "arg2", ...]
- VOLUME:创建一个可以从本地主机或其它容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
VOLUME ["/data"]
- EXPOSE:指定容器暴露的端口号
EXPOSE 80 # 指定多个端口,如:EXPOSE 80 443
- ENV:指定环境变量,会被后面的RUN指令使用,并在容器运行时保持
ENV PG_VERSION 9.8.0 # 格式如:ENV key value
- ADD:复制指定的src到容器中的dest;src可以是Dockerfile所在目录的一个相对路径;也可以是URL、或tar文件
ADD src dest
- COPY: 复制本地主机的src为容器中的dest;目标路径不存在时,会自动创建
COPY src dest
- ARG:构建参数,与 ENV 作用一至;ARG设置的环境变量仅在Dockerfile内有效,也就是说只有
docker build
的过程中有效,构建好的镜像内不存在此环境变量。
构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
ARG key value
- WORKDIR:指定工作目录(目录必须是提前创建好的),用WORKDIR指定的工作目录,会在构建镜像的每一层中都存在;
docker build
构建镜像过程中的,每一个RUN命令都是新建的一层,只有通过 WORKDIR 创建的目录才会一直存在。
WORKDIR <工作目录路径>
- USER:用于指定执行后续命令的用户和用户组(用户和用户组必须提前已经存在)。
USER <用户名>
- HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
示例
FROM nginx:1.18
MAINTAINER admin@admin.com
RUN apt update && apt install wget vim -y
构建
格式:
docker build -t target_registry/image_name:TAG . # 在Dockerfile所在目录执行
示例:
docker build -t nginx-vim:v1 .