Php 生产中的Docker和package经理
我正在开发一个PHP应用程序,我想让它使用docker容器运行。我使用的是包管理器,它可以提取所有依赖项。除了依赖项之外,所有代码都保存在git存储库中 为了在本地机器上运行一切,我使用docker compose(图)。我将应用程序代码(包括供应商文件夹)装载到容器上的卷中。这是我的docker-compose.yml文件Php 生产中的Docker和package经理,php,docker,composer-php,docker-compose,Php,Docker,Composer Php,Docker Compose,我正在开发一个PHP应用程序,我想让它使用docker容器运行。我使用的是包管理器,它可以提取所有依赖项。除了依赖项之外,所有代码都保存在git存储库中 为了在本地机器上运行一切,我使用docker compose(图)。我将应用程序代码(包括供应商文件夹)装载到容器上的卷中。这是我的docker-compose.yml文件 nginx: image: nginx:1.9 links: - php volumes: - conf/nginx
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
我真正不明白的是,我将如何将其推进到生产或登台环境中。据我所知,最好在不运行包管理器的情况下在容器中装运所有内容,因为这可能会失败,或者包可能与本地计算机上的包不同。因此,我提出了以下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构建的,并托管在某个存储库中
FROM busybox
VOLUME /var/www/html
ADD src /var/www/html
我有一个git钩子,它将在quay.io上触发此dockerfile的构建,并将我的源代码添加到映像中
问题是:供应商文件/依赖项不在版本控制中,因此不会添加它们
我看到了两个我都不认为理想的解决方案
composer install
以拉入所有文件。如前所述,不可取我对docker还是个新手,所以可能是我把事情搞错了。我很想得到一个正确的答案 您的
Dockerfile
应该构建容器映像,就像没有装入卷一样。克隆或复制容器中的代码,运行composer以安装依赖项。在没有任何卷的情况下运行容器应该是可行的
生产环境中的卷主要用于持久化数据和日志。您的代码不应位于装入的卷中
出于开发目的,您可以将卷装载到代码位置,并且您的容器仍然可以工作
要加快构建过程,请先复制
composer.json
和composer.lock
文件,并将依赖项安装到源代码树之外的位置。它将确保只在json文件更改时更新依赖项,而不是在每次代码更改时更新依赖项,从而大大加快了过程。作为一个小提示,在生产中,composer.lock
文件应始终与命令composer install
一起使用,因为这将确保安装与上次提交锁文件时相同的依赖项:)