Docker - 在PHP容器中使用Composer

时间:2016-10-23 09:29:42

标签: php docker composer-php

我希望能够在php-fpm容器中使用composer install。我目前的设置:

搬运工-compose.yml

version: '2'

services:
    web:
        image: nginx
        ports:
          - "80:80"
        volumes:
          - ./public:/var/www/html
          - ./vhost.conf:/etc/nginx/conf.d/vhost.conf

    fpm:
        image: php:fpm
        volumes:
          - ./public:/var/www/html
        expose:
          - 9000

    composer:
        restart: 'no'
        image: composer/composer
        command: install --working-dir=/var/www/html
        volumes_from:
          - fpm

但显然我的command: install发生在composer容器中,并且没有完成安装所需的php扩展。

php-fpm容器中的composer install表示未安装composer

不知何故谷歌没有从我所看到的那里得到答案。

3 个答案:

答案 0 :(得分:4)

您只需在fpm容器中安装composer

这样的东西
FROM php:5.6-fpm 

...
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
    && php -r "unlink('composer-setup.php');"

答案 1 :(得分:0)

实际上我建议的是一个单独的轻量级php-cli容器,只是为了运行composer(和其他命令)。它不必以“持久”的方式运行。如果有兴趣看看我是如何做my image for running php tasks像composer或phpunit。

docker run -ti --rm -v /path/to/your/project:/app kmwrona/ci-stack /usr/bin/composer install --quiet
docker run -ti --rm -v /path/to/your/project:/app kmwrona/ci-stack /usr/bin/composer dump-autoload --optimize
docker run -ti -a STDOUT -v /path/to/your/project:/app kmwrona/ci-stack /usr/bin/phpunit --log-junit /app/junit.xml --testdox-html /app/unit-tests-html-report.html

答案 2 :(得分:0)

更加性感的方式是将作曲家添加到你的形象中:

# Install Composer
ADD https://getcomposer.org/installer /tmp/composer-setup.php
RUN php /tmp/composer-setup.php --install-dir /usr/local/bin/ --filename composer \
 && rm /tmp/composer-setup.php

请注意,composer可用于开发图像(例如:用于持续集成或测试)。生产映像里面不应该有作曲家......只有生成的供应商:)