Dockerfile详解

Dockerfile是用来构建镜像的文本文件,只要有如下参数可供配置

FROM

指定基础镜像,后续操作都是基于基础镜像向上加层封装。FROM命令必须是Dockerfile第一个命令。
语法格式:FROM [:] [AS ]
举例: FROM postgresql:12 as base 指定postgresql12为基础镜像并命名为base。

MAINTAINER

镜像维护人的信息
语法格式: MAINTAINER
示例:MAINTAINER UV

RUN

用于在构建镜像时执行指定命令
语法格式(shell格式): RUN
语法格式(exec格式): RUN ["可执行文件", "参数1", "参数2"]
实例: RUN echo ''Hello World

说明: Dockerfile的指令每执行一次都会在基础镜像上新建一层。因此多次使用RUN命令会造成过多层,使得镜像膨胀过大,可做如下优化:

RUN command1
RUN command2
可优化成:
RUN command1 && command2

ADD

将本地文件复制到容器中。当文件压缩格式为tar、gzip、bzip2或xz时,会自动解压到指定路径。同时也可以访问网络的文件,自动下载到指定路径。
语法格式:ADD
示例: ADD app.jar /home/app.jar

说明: 由于该指令会自动解压tar文件,将可能造成镜像构建缓存失效、镜像构建失败。因此是否使用该指令取决于是否要进行tar文件解压。

COPY

将本地文件复制到容器中。
语法格式:COPY
示例: COPY app.jar /home/app.jar

说明: COPY和ADD的区别在于COPY在复制后不会解压文件,也无法从网络上下载文件

CMD

容器启动后要执行的命令。当使用docker run 运行容器时,CMD配置的指令可以在命令行被覆盖。
语法格式(shell形式):CMD
语法格式(exec形式):CMD ["指令", "参数1", "参数2"]
示例: CMD echo "启动成功"

说明:
(1) 当Dockerfile中存在多个CMD指令时,仅最后一个指令生效;
(2) 当Dockerfile存在ENTRYPOINT时,CMD的值将成为ENTRYPOINT执行的命令的默认参数

FROM nginx

ENTRYPOINT ["nginx", "-c"] 
CMD ["/etc/nginx/nginx.conf"]
# 此时CMD中的值,是作为nginx -c的参数,而不是指令

ENTRYPOINT

容器启动后要执行的命令。当使用docker run 运行容器时,ENTRYPOINT配置的指令不会在命令行被覆盖。
语法格式(shell形式):ENTRYPOINT
语法格式(exec形式):ENTRYPOINT ["指令", "参数1", "参数2"]
示例: ENTRYPOINT echo "启动成功"

说明:
(1) 当Dockerfile中存在多个ENTRYPOINT指令时,仅最后一个指令生效;

ENV

设置环境变量的值
语法格式:ENV
ENV = = =
示例: ENV JAVA_HOME /home/java/

EXPOSE

暴露对外的端口
语法格式:EXPOSE <端口1> [<端口2>...]
示例:EXPOSE 80
##USER
指定运行命令时所使用的用户,为了安全和权限起见,根据要执行的命令选择不同用户
语法格式: USER <用户名>:[<用户组>]
示例:USER root

WORKDIR

设置工作目录,设置之后 ,RUN、CMD、COPY、ADD 的工作目录都会同步变更
语法格式:WORKDIR <工作目录>
示例:WORKDIR /home

VOLUME

指定数据持久化的目录,当容器启动后该目录会被随机映射到宿主机的一个目录中,实现数据持久化和同步。
语法格式:
VOLUME
VOLUME [,...]
VOLUME 指定容器中的path2挂载到宿主机的path1上。
示例: VOLUME /data

HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
语法格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

ARG

设置环境变量的值,但作用域仅限于Dockerfile,即只有在docker build过程中有效,构建好后的镜像不存在该环境变量
语法格式:ARG <参数名>[=<默认值>]

你可能感兴趣的:(Docker,docker,Dockerfile)