Я ищу лучшее решение для установки пакетов composer или npm внутри томов хоста, смонтированных через docker-compose.
В моем docker-compose.yml у меня есть:
volumes:
- ./app:/var/www/app
...
И в моем dockerfile я хотел бы использовать этот том для установки вещей:
VOLUME ["/var/www/app"]
RUN composer install -d /var/www/app
Но, насколько я понимаю, тома, смонтированные в docker-compose, еще не доступны, когда контейнер работаетпостроен из файла Docker.
Итак, моя следующая попытка была сделать это при запуске контейнера:
CMD bash -c "composer install -d /var/www/app && /usr/sbin/apache2ctl -DFOREGROUND"
Это работало по крайней мере, но вызывало установку composer при каждом запуске контейнера, чтоявляется избыточным.
Итак, моя текущая идея - использовать для установки специальный образ композитора, монтировать в него файл composer.json, а затем скопировать готового поставщика из контейнера компоновщика в контейнер и связать его там, где это необходимо.Вот так:
FROM composer as composer
COPY ./app/composer.json /app
COPY ./app/composer.lock /app
RUN composer install --ignore-platform-reqs --no-scripts
FROM library/ubuntu:jessie
# ... do other stuff with the main image ...
COPY --from=composer /app/vendor /var/www/composer/vendor
CMD bash -c "ln -s /var/www/composer/vendor /var/www/app/vendor && /usr/sbin/apache2ctl -DFOREGROUND"
Но это все еще похоже на обходной путь для такой обычной проблемы.Есть ли лучший способ сделать это или какой-либо известный пример хорошей практики?