我正在開發一個我想用Docker容器運行的PHP應用程序。我正在使用包含所有依賴關係的composer軟件包管理器。所有代碼都保存在git存儲庫中,除了依賴關係。生產中的Docker和包管理器
爲了讓我的本地機器上運行的所有東西都使用docker-compose(fig)。我將我的應用程序代碼(包括供應商文件夾)安裝到我的容器上。這是我的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
我真的不明白的是我如何將它推入生產環境或登臺環境。根據我的理解,最好將所有內容發佈到容器中,而無需運行包管理器,因爲這可能會失敗,或者包可能與本地機器上的包不一致。於是我想出了以下泊塢窗,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仍然很陌生,所以可能是我弄錯了所有的東西。很想得到一個答案如何正確地做到這一點。
作爲一個小記錄,在製作時'composer.lock'文件應該總是和命令'composer install'一起使用,因爲這樣可以確保安裝和上次提交鎖文件時相同的依賴關係:) – stephenfrank