Dockerfile
|
|
关于此Dockerfile
在这个Dockerfile中为php5.6官方镜像加载了redis、mongo、memcached扩展,且包括nginx1.10.3版本
关于最近一段时间学习Docker
刚开始接触docker的时候以为docker是把nginx+php+mongo(或者mysql,因为我们用的是mongo,配置mongo也比较繁琐,一半dockerhub给出的php镜像是已经加载了mysql)放到虚拟机中,这个虚拟机只有这三个进程,其他的进程都没有。
后来搜了很多资料,知道了容器,镜像和仓库的概念。但是对于是该把nginx,php和mongo放在一个容器中还是该拆开每一个服务制作成单一的镜像很困惑。还有一点就是我是在阿里云上部署的环境,阿里云比普通的docker多了一层应用,此外阿里云还有一个编排模版来自己定义镜像,后来发现即使编排镜像的时候一次性的编排了两个镜像,阿里云还是给拆分成了2个服务,这里就说的通了,在github上浏览了一下,大部分都是nginx和php放在一起,但是dockerhub以及github上有一小部分是php和nginx单独做成了两个镜像。
后来想了一下单独做成两个容器的好处就是,每一部分升级的时候很容易,更新换代的代价小。如果将nginx和php制作成一个镜像,那后续无论是升级php还是nginx都要重新制作镜像。
此外,在自己定制镜像的时候,最好基于dockerhub官方镜像给出的版本进行定制。这样做的好处就是,如果自己基于系统进行定制的话,镜像构建成功运行的时候,如果容器中没有进程运行的话会直接退出。这是因为当启动容器的时候其实就是启动了容器里面的进程,如果一个容器里面没有一个一直在前台执行的进程,那容器启动后就会立即退出。这也很好的解释了容器的本质,即进程。
最后,就是熟练运用shell对于写Dockerfile有很大的帮助,Dockerfile中执行的命令与shell的命令很相似。