【发布时间】:2017-07-01 19:53:16
【问题描述】:
我有以下基于官方[php][1] 图像的 php 运行时 Dockerfile。
FROM php:fpm
WORKDIR /var/www/root/
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
zip \
unzip \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install mysqli \
&& docker-php-ext-enable opcache \
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
我在运行 composer install 时遇到问题。
我猜测 Dockerfile 在安装卷之前运行,因为如果添加,我会收到 composer.json 找不到文件错误:
...
&& mv composer.phar /usr/local/bin/composer \
&& composer install
以上。
但是,将以下属性添加到docker-compose.yml:
command: sh -c "composer install && composer require drush/drush"
似乎在命令执行完成后终止容器。
有没有办法:
- 等待安装卷
- 使用挂载的
composer.json文件运行composer install - 让容器在之后继续运行
?
【问题讨论】:
-
Dude 删除该哈希检查,因为它经常更改,随着 Composer 的每个新版本。顺便说一句,您希望拥有在容器启动时执行安装的自定义入口点。此外,您应该将应用程序数据移动到仅数据容器中,以便您可以拆分职责。然后,您的应用程序可以独立于 Web 服务器的基础设施进行部署。祝你好运
-
@mike 您能否提供一个使用仅数据容器的示例以及如何将其与 docker-compose 一起使用?或者,提供您认为可以很好地描述此概念的资源?或两者? :-) 干杯
-
网上有很多例子,随便找
data only container或者docker persistence strategy。您所做的只是构建您的应用程序(composer install / docs / assets 等),然后获取尽可能小的图像(可用的 144 字节图像!)并将所有内容复制到它。使用 docker-compose 中的volumes_from指令将该数据挂载到 php 映像中的 apache 根目录。任何 CI/CD 系统(如 Jenkins、Gitlab 等)都可以实现这一切。
标签: docker docker-compose dockerfile