2015-06-04 88 views
1

我正在開發一個我想用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的構建,並增加了我的源代碼的圖像。

下面是問題:供應商文件/依賴關係不在版本控制中,因此它們不會被添加。

我看到兩個解決方案,我都覺得不理想。

  1. 將依賴關係添加到版本控制。
  2. 運行命令composer install拉入所有文件。如上所述不是優選的。

我對docker仍然很陌生,所以可能是我弄錯了所有的東西。很想得到一個答案如何正確地做到這一點。

回答

2

您的Dockerfile應該構建容器映像,就好像不會安裝卷一樣。在容器中克隆或複製代碼,運行作曲者來安裝依賴項。運行容器沒有任何卷應該工作。

生產環境中的卷主要用於保存數據和日誌。您的代碼不應該處於安裝的卷中。

爲了開發目的,您可以將卷掛載到代碼位置,並且容器仍然可以工作。

要加快構建過程,請先複製您的composer.jsoncomposer.lock文件,然後將依賴項安裝到源樹之外的位置。它將確保只有當你的json文件發生變化時纔會更新依賴關係,而不是每次更改代碼,都會極大地加速進程。

+1

作爲一個小記錄,在製作時'composer.lock'文件應該總是和命令'composer install'一起使用,因爲這樣可以確保安裝和上次提交鎖文件時相同的依賴關係:) – stephenfrank