Dockerfile:Docker中构建镜像用到的文本文档
【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》
在我们进行JavaEE开发的时候,经常使用Maven或者Gradle进行包管理,当我们需要某一个包时,只需在Maven或者Gradle添加该包的唯一标识,这个包就能从远程仓库拉取到本地,搭建私服的也会先从私服里拉取该包。当我们自己封装了一个比较好的包,也可以通过这些工具推送给远程仓库。正好,Docker镜像的拉取或者推送也是相同的原理。 通过前两章的讲解,相信大家对于Docker的相关概念、常用命令有了基本的了解,也知道怎么从远程 Pull 一个镜像,那远程的镜像是怎么来的呢?如果我们想自己创建一个镜像又该怎么做呢?今天就来说一说Dockerfile!Dockerfile 是一个包含用户能够构建镜像的所有命令的文本文档,它有自己的语法以及命令,Docker 能够从 Dockerfile 中读取指令自动的构建镜像! Dockerfiler的本质是一个文本文档,既然是一个文本文档,就要了解这个文档的编写规则,也就是对 Dockerfile 的语法和命令需要了解,下面就来说一说它的相关指令! 1、FROM
from就是从哪里来,对于Docker官方说法就是指定基础镜像,当前镜像是基于哪个镜像创建的,有点类似 Java 中的类继承。FROM 指令必是 Dockerfile 文件中的首条命令。 2、MAINTAINER
镜像维护者的信息,已经舍弃该指令。 3、LABEL
4、ENV ENV 设置环境变量! 5、WORKDIR
设置工作目录,在该指令后的 RUN、CMD、ENTRYPOINT, COPY、ADD 指令都会在该目录执行。如果该目录不存在,则会创建! 6、RUN
RUN 会在当前镜像的最上面创建一个新层,并且能执行任何的命令,然后对执行的结果进行提交。提交后的结果镜像在 Dockerfile 的后续步骤中可以使用。 7、ADD
从宿主机拷贝文件或者文件夹到镜像,也可以复制一个网络文件!如果拷贝的文件是一个压缩包,会自动解压缩! 8.COPY
从宿主机拷贝文件或者文件夹到镜像,不能复制网络文件也不会自动解压缩! 9、VOLUME
VOLUME 用于创建挂载点,一般配合 run 命令的 -v 参数使用。 10、EXPOSE
指定容器运行时对外暴露的端口,但是该指定实际上不会发布该端口,它的功能是镜像构建者和容器运行者之间的记录文件。 回到容器命令中的 run 命令部分,run 命令有 -p 和 -P 两个参数。 如果是 -P 就是随机端口映射,容器内会随机映射到 EXPOSE 指定的端口;如果是 -p 就是指定端口映射,告诉运维人员容器内需要映射的端口号。 11、CMD
指定容器启动时默认运行的命令,在一个 Dockerfile 文件中,如果有多个 CMD 命令,只有一个最后一个会生效! 12、ENTRYPOINT
这个指令与 CMD 指令类似,都是指定启动容器时要运行的命令,如果指定了 ENTRYPOINT,则 CMD 指定的命令不会执行! 在一个 Dockerfile 文件中,如果有多个 ENTRYPOINT 命令,也只有一个最后一个会生效!不同的是通过 docker run command 命令会覆盖 CMD 的命令! 执行的命令不会覆盖 ENTRYPOINT,docker run 命令中指定的任何参数都会被当做参数传递给 ENTRYPOINT! RUN、CMD、ENTRYPOINT 区别: ---RUN 指令是在镜像构建时运行,而后两个是在容器启动时执行! ---CMD 指令设置的命令是容器启动时默认运行的命令,如果 docker run 没有指定任何的命令,并且 Dockerfile 中没有指定 ENTRYPOINT,那容器启动的时候就会执行 CMD 指定的命令!有点类似代码中的缺省参数! ---如果设置了 ENTRYPOINT 指令,则优先使用!并且可以通过 dockerrun 给该指令设置的命令传参! ---CMD 有点类似代码中的缺省参数。 13、USER (编辑:ASP站长网) |