Docker——Dockerfile相关知识点

定义:Dockerfile用来构建镜像的文本文档,文本文档包含了构建镜像所需的指令和说明。

构建好的镜像内会有一个 /usr/share/nginx/html/index.html的文件。

在一个空目录下,新建一个名为Dockerfile的文件,并添加下面内容:

FROM nginx
RUN echo '构建nginx镜像' 〉 /usr/share/nginx/html/index.html

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后续命令,有以下2种格式:

shell格式:RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec格式:RUN["可执行文件","参数1","参数2"]
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

构建镜像:docker build -t nginx:test .
          “.”表示上下文路径,是指docker在构建镜像,有时候需要使用本机的文件,docker build命令得知
          这个路径之后,会将路径下的所有内容打包。

解析:docker的运行模式为C/S,本机为C,docker引擎是S。实际的构建过程在docker引擎下完成,需要
          把我们本机的指定目录下的文件打包提供给docker引擎使用。如果未说明最后一个参数,
          默认的上下文路径就是dockerfile所在的目录。

指令详解:

COPY [--chown=<user>:<group>] <源路径1> ... <目标路径>

COPY [--chown=<user>:<group>] ["源路径1" ... "目标路径"]

[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

ADD:与COPY使用的格式一致,功能也类似,不同之处在于:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,
            会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,
            从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

CMD:类似于RUN,CMD 在docker run 时运行。RUN 在 docker build时运行。
作用:为启动的程序指定默认要运行的程序,程序运行结束,容器也结束。
        CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
        如果Dockerfile中存在多个CMD指令,仅最后一个生效。

ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,
                          而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
                          但是, 如果运行 docker run 时使用了 --entrypoint 选项,
                          此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
               优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
                          如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

ENV:设置环境变量
ARG:作用与ENV一样,不过作用域不一样,ARG设置的环境变量仅在Dockerfile内有效,
            即只在docker build的过程中有效,在构建好的镜像内不存在此环境变量。

VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
        作用:(1)避免重要数据因重起而丢失。(2)避免容器不断变大。

EXPOSE:声明端口。
  作用:(1)帮助镜像使用者理解这个镜像服务的端口,以方便配置映射。
          (2)在运行时使用随机端口(docker run -P),会自动随机映射EXPOSE的端口。

WORKDIR:指定工作目录。必须提前建好,会在构建镜像的每一层中都存在。

USER:用于指定执行后续命令的用户和用户组,必须提前存在。

HEALTHCHECK:用于指定某个程序或者指令来监控docker容器的运行状态。

ONBUILD:用于延迟构建命令的执行。在Dockerfile里用ONDBUILD指定的命令,在本次构建镜像的过程中不会执行。

参考:https://www.runoob.com/docker/docker-dockerfile.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章