根据官方[php][1]
图像,我有以下Dockerfile用于php运行时。Docker - 安装卷后执行命令
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 install
使用安装composer.json
文件 - 有容器保持运行afters
?
Dude随着Composer的每一个新版本的移除,经常更换哈希检查。顺便说一下,您希望让您的自定义入口点在容器启动时进行安装。另外,您应该将您的应用程序数据移动到仅限数据的容器,以便您可以分解责任。然后,您的应用程序可以独立于Web服务器的基础架构进行部署。祝你好运 –
@mike你能提供一个使用数据专用容器的例子,以及它如何与docker-compose一起使用?或者,提供一个你认为很好地描述这个概念的资源?或两者? :-) cheers –
在网上有很多例子可以找到,只需查找'data only container'或'docker persistence strategy'。你所做的只是构建你的应用程序(作曲家安装/文档/资产等),然后获得最小的图像(144字节图像可用!),并将所有内容复制到它。使用docker-compose中的'volumes_from'指令将该数据装载到php映像中的apache根目录。所有这些都可以通过Jenkins,Gitlab等任何CI/CD系统来实现。 –