Docker和包pipe理器在生产中

我正在开发一个PHP应用程序,我想使用docker集装箱运行。 我正在使用composer包pipe理器来引入所有的依赖关系。 所有的代码保存在一个git仓库,除了依赖。

为了使我的本地机器上运行的一切,我使用docker-compose(图)。 我将我的应用程序代码(包括供应商文件夹)装载到我的容器上。 这是我的docker-compose.yml文件。

nginx: image: nginx:1.9 links: - php volumes: - conf/nginx/default.conf:/etc/nginx/conf.d/default.conf - src:/var/www/html ports: - "80:80" php: image: php:5.6.9-fpm links: - memcached volumes: - conf/php/php.ini /usr/local/etc/php/php.ini - src:/var/www/html volumes_from: - nginx 

我不明白的是我如何将其推入生产或分期环境。 根据我的理解,最好将容器中的所有东西都放在容器中,而不必运行包pipe理器,因为这可能会失败,或者包可能与本地机器上的包不一样。 所以我想出了以下docker-compose.yml文件:

 webapp: image : quay.io/myusername/myrepo php: image: php:5.6.9-fpm volumes: - config/php/php.ini /usr/local/etc/php/php.ini volumes_from: - webapp nginx: image: nginx:1.9 links: - php volumes: - config/nginx/default.conf:/etc/nginx/conf.d/default.conf volumes_from: - webapp ports: - "80:80" 

webapp容器是从以下dockerfile构build的,并托pipe在某个存储库上。

 FROM busybox VOLUME /var/www/html ADD src /var/www/html 

我有一个git钩子,会触发quay.io上的这个dockerfile的构build,并将我的源代码添加到图像。

这是问题:供应商文件/依赖不在版本控制,所以他们不会被添加。

我看到两个解决scheme,我都不觉得理想。

  1. 添加依赖到版本控制。
  2. 运行命令composer install来拉入所有文件。 如上所述不是优选的。

docker工人对我来说还是很新的,所以我可能弄错了所有的东西。 很想得到一个答案如何正确地做到这一点。

你的Dockerfile应该build立一个容器镜像,好像没有安装卷一样。 在容器中复制或复制代码,运行composer来安装依赖项。 运行容器没有任何卷应该工作。

生产环境中的卷主要用于保存数据和日志。 您的代码不应该在装入的卷中。

出于开发目的,您可以将卷挂载到代码位置,并且您的容器仍然可以工作。

为了加速构build过程,请首先复制composer.jsoncomposer.lock文件,然后将依赖关系安装到源代码树之外的位置。 这将确保只有当你的json文件发生变化时才会更新依赖关系,而不是每次更改代码,都会极大地加速进程。