Немного контекста: я новичок в докере и пока не знаю каких-либо лучших практик. Моя задача — создать веб-сервис на основе php, и я решил использовать docker-compose для предоставления.
Поскольку мы все являемся модными разработчиками, мы знаем — в наши дни невозможно создать php-приложение без использования composer.
Должен ли я установить зависимости в сборке? Итак, добавив это в мой Dockerfile:
RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
Или я должен установить зависимости во время разработки и создать образ контейнера с включенными зависимостями?
Я знаю только один способ НЕ сделать это: установить зависимости локально на компьютере разработчика и затем собрать контейнер. Но как будет выглядеть «лучшая практика»?
И — поскольку я новичок в этой области — как бы мне запустить «composer Требуется какой-нибудь / пакет» для моего контейнера службы приложений?
Я также заметил сообщение «Не запускайте Composer от имени пользователя root / super!» при сборке контейнера. я добавил COMPOSER_ALLOW_SUPERUSER=1
в мой файл Env (как видно Вот), но это сообщение все еще появляется.
Можно ли НЕ выполнить установку composer от имени пользователя root в контейнере Docker? Могу ли я игнорировать это сообщение?
Заранее спасибо,
Philipp
На данный момент я работаю над следующим решением:
Добавьте весь объем как объем:
volumes:
- .:/app
начальная команда установки композитора
docker-compose exec app composer install
установить новый пакет composer:
docker-compose exec app composer require some/package
Пакет будет установлен через контейнер в директории пакета вашего компоновщика (конечно, по умолчанию / vendor), исходный код может быть проверен в вашем ide и т. Д.
Только состояние приложения, определенное как объем, например:
volumes:
- public/uploads:/app/public/uploads
добавить / vendor в .dockerignore
и запустите composer install во время сборки
RUN cd /app && composer install --no-dev --no-interaction --optimize-autoloader
Таким образом, у вас будет готовый образ для развертывания, но вы сможете разрабатывать его более гибко.
Решением (я не знаю, возможно ли это в composer) может быть том для каталога кэша composer.
Я понятия не имею, как это исправить правильно. Может быть, я мог бы создать пользователя с именем пользователя dev для контейнера разработки и заставить этого пользователя запускать команды, php-fpm и т. Д. Для производственного рута все будет в порядке, я думаю.
Я все еще очень новичок в докере и открыт для лучших решений, поэтому я не приму этот ответ.
ОБНОВЛЕНО
Чтобы добавить нового пользователя в Docker пользователя в Dockerfile
, следующее
RUN useradd -ms /bin/bash newuser
USER newuser
если вы хотите создать домашнего пользователя тоже
WORKDIR /home/newuser
или же
mkdir /home/newuser
если вы хотите вернуться к пользователю root, вы можете сделать как
USER root
две стороны монеты —
Это хорошая практика для построения периода изображений, которую я делаю так же, как и вы.
мы будем получать последние обновления из общедоступных репозиториев, но другая сторона медали в том, что мы не можем гарантировать, что они являются той же версией, что и мы.
вам нужно справиться с этим, указав точную версию в composer.json (не используйте ^, *).