В Попытке # 1 composer install
не создает папки поставщиков, потому что контейнер будет снова монтировать том.
В Попытке # 2 CMD
заставит контейнер выходить со статусом 0 после завершения команд.
Итак, какова лучшая реализация для запуска composer install && php artisan migrate
?
Я ожидаю, что composer install && php artisan migrate
будет запускаться при каждом запуске контейнера.
Попытка # 1
FROM php:7.3-fpm
COPY . /var/www
WORKDIR /var/www
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client libmagickwand-dev zip unzip git curl vim --no-install-recommends \
&& docker-php-ext-install pdo_mysql gd bcmath \
&& 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');" \
&& composer install \
&& php artisan migrate
Попытка # 2
FROM php:7.3-fpm
COPY . /var/www
WORKDIR /var/www
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client libmagickwand-dev zip unzip git curl vim --no-install-recommends \
&& docker-php-ext-install pdo_mysql gd bcmath \
&& 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');"
CMD bash -c "composer install && php artisan migrate"
docker-compose.yml
:
version: '3'
services:
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
environment:
- "DB_PORT=3306"
- "DB_HOST=db"
tty: true
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
ports:
- 8080:80
db:
image: mysql:5.7
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"
ports:
- "33061:3306"
volumes:
dbdata: