最近看了一些Docker相关的知识,对制作dockerfile的流程有一些不明白的地方。
假如要制作一个基于Ubuntu的包含Nginx、MySQL、PHP等服务的dockerfile,我现在的流程是:
docker run一个基本的Ubuntu镜像
更新系统依赖包,如:apt-get update,在文本文档记录执行的命令
安装Nginx,在文本文档记录安装Nginx执行的步骤
....
等于说是先把流程跑一遍,记录下所有执行的命令,然后再把这些步骤复制到dockerfile里。
个人感觉这样做是不对的,请问大家都是怎么做的??
很正确呀。假如你非常熟悉所有的流程,自然可以直接编写Dockerfile。但这种事情基本不能绝对的保证,特别是Docker的基础系统镜像大多都非常精简,一些软件的依赖包都需要进行下载安装,所以自己通过容器实践一次搭建的过程虽然有些耗时,但相对来说反而要比空想写Dockerfile要节约时间。
通常来说编写Dockerfile是这样一个流程:
通过容器预演安装过程,记录下搭建命令
对安装命令进行汇总、优化,编写Dockerfile
尝试使用Dockerfile构建镜像,检查是否存在问题
通过构建的镜像建立容器,确保其中的程序能够正确使用
通过参考docker hub上现成的dockerfile 再根据自己的需求修改,这样的效率会更高一些,从头写dockerfile只能按照楼上的兄弟那样操作了,我称之为“录像机”方式。