Docker镜像的定制
在上一篇文章,仅仅只是大致介绍了Docker的Image、Container以及Registry。这里将对于镜像有更详细的介绍。
Dockerfile
虽然说在Docker hub上提供了很多完善的镜像,但是由于具体情况需求,我们需要去具体定制镜像,因此就可以利用到Dockerfile,dockerfile相当于一个文本文件,里面包含了一条条的指令,每一条指令构建一层,因此每一条指令都是在具体描述如何构建每一层。
当文件书写完毕之后,可以利用以下命令来构建
docker build .
要理解这条指令,需要明白两个地方,第一是docker build的工作原理,第二个是Context,可以理解为构建上下文。
---Docker build: docker在运行时候分为Docker引擎(服务端守护进程)和客户端工具。Docker引擎提供REST API,称为Docker Remote Api,而客户端工具则利用这组api与引擎完成交互。
---Context: 由于在自定义镜像时候,不仅仅执行的RUN命令,还有ADD,COPY之类,这种需要将本地文件复制进镜像中去,就需要有环境上下文了,当用户开始构建时候,用户会指定构建上下文的路径,docker build获取这个命令之后,就会打包该路径下的内容,然后发送给docker引擎。
多阶段构建镜像
之前要进行多阶段构建镜像的时候,需要将所有的构建过程全部放入一个dockerfile里面,随之带来的缺点也是显而易见的,难以维护,镜像体积变大,部署时间变长。
还有一种方法是分开构建,将不同的dockerfile整合起来,但是流程过于复杂。
还有一种方法是利用多阶段构建的方式,Docker17.05开始支持多阶段构建(multistage builds),这个可以很容易解决之前两种方法遇到的问题,并且只需要一个dockerfile。