我的docker-compose设置(我认为(做了一些奇怪的事情。
我正在从这个composer.json
安装:
{
"require-dev": {
"phpunit/phpunit":"~9.0",
"squizlabs/php_codesniffer": "~3.0",
"fzaninotto/faker": "~1.9"
},
"require": {
"doctrine/orm": "2.7.2",
"haydenpierce/class-finder": "0.4.2"
},
"autoload" : {
"psr-4": {
"WebApp\": "src/"
}
},
"autoload-dev" : {
"psr-4": {
"WebApp\Tests\" : "tests/"
}
}
}
我的dockerfile
看起来像:
FROM php:7.4.4-apache
#Install git
RUN php -v
RUN apt-get update && apt-get install -y git
RUN apt-get install zip unzip
RUN docker-php-ext-install pdo pdo_mysql mysqli
#enable Ubuntu module 'URL rewrite'
RUN a2enmod rewrite
#Install Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --install-dir=/usr/local/bin/ --filename=composer
#setup database secrets file
COPY db_secret.prod.php /etc/db_secret.prod.php
#Make php error log file
RUN touch /var/log/php-error.log
RUN chmod 755 /var/log/php-error.log
#copy across necessary files
COPY . /var/www/
RUN rm /var/www/db_secret.prod.php
#change root that server runs files from
RUN sed -i 's+/var/www/html+/var/www/src/html+i' /etc/apache2/sites-available/000-default.conf
#Install php testing
RUN cd .. && composer update && composer install --no-dev
#RUN cd .. && vendor/bin/doctrine orm:schema-tool:create
EXPOSE 80
运行时composer install
我得到:
Step 15/16 : RUN cd .. && composer update && composer install --no-dev
---> Running in 2980b48bbbc0
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 55 installs, 0 updates, 0 removals
- Installing ocramius/package-versions (1.8.0): Downloading (100%)
...abridged for brevity...
- Installing fzaninotto/faker (v1.9.1): Downloading (100%)
symfony/polyfill-intl-normalizer suggests installing ext-intl (For best performance)
symfony/polyfill-intl-grapheme suggests installing ext-intl (For best performance)
symfony/service-contracts suggests installing symfony/service-implementation
symfony/console suggests installing symfony/event-dispatcher
symfony/console suggests installing symfony/lock
symfony/console suggests installing symfony/process
symfony/console suggests installing psr/log (For using the console logger)
doctrine/cache suggests installing alcaeus/mongo-php-adapter (Required to use legacy MongoDB driver)
doctrine/orm suggests installing symfony/yaml (If you want to use YAML Metadata Mapping Driver)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-invoker suggests installing ext-pcntl (*)
phpunit/php-code-coverage suggests installing ext-pcov (*)
phpunit/php-code-coverage suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing ext-soap (*)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
37 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Loading composer repositories with package information
Installing dependencies from lock file
Package operations: 0 installs, 0 updates, 31 removals
- Removing webmozart/assert (1.8.0)
...abridged for brevity...
- Removing fzaninotto/faker (v1.9.1)
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
19 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
谁能告诉我为什么它会安装然后删除开发包,而不仅仅是从原始安装中省略它们?
dockerfile 的容器是 php744-apache
非常简单:你运行composer update
(这将更新软件包列表,并安装它们(,然后你运行composer install --no-dev
。
只是出于好奇:这仅在更新 Docker 映像时完成。这有什么好的理由吗?为什么不分离图像和在该映像中运行的源代码?