Куда мы помещаем композитную установку для докера для Laravel или Lumen - PullRequest
0 голосов
/ 20 мая 2019

В Попытке # 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:
...