docker и php: получение зависимостей (composer) в контейнер

Немного контекста: я новичок в докере и пока не знаю каких-либо лучших практик. Моя задача — создать веб-сервис на основе 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

2

Решение

На данный момент я работаю над следующим решением:

Добавьте весь объем как объем:

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

Таким образом, у вас будет готовый образ для развертывания, но вы сможете разрабатывать его более гибко.

1) сборка становится медленной — кажется, кэширование композитора не работает должным образом

Решением (я не знаю, возможно ли это в composer) может быть том для каталога кэша composer.

2) все пакеты, созданные docker, принадлежат пользователю root, поэтому вы можете работать только с этими файлами / папками в сеансе sudo / root.

Я понятия не имею, как это исправить правильно. Может быть, я мог бы создать пользователя с именем пользователя dev для контейнера разработки и заставить этого пользователя запускать команды, php-fpm и т. Д. Для производственного рута все будет в порядке, я думаю.

Я все еще очень новичок в докере и открыт для лучших решений, поэтому я не приму этот ответ.

ОБНОВЛЕНО

Чтобы добавить нового пользователя в Docker пользователя в Dockerfile, следующее

RUN useradd -ms /bin/bash  newuser
USER newuser

если вы хотите создать домашнего пользователя тоже

WORKDIR /home/newuser

или же

mkdir /home/newuser

если вы хотите вернуться к пользователю root, вы можете сделать как

USER root
1

Другие решения

две стороны монеты —

Это хорошая практика для построения периода изображений, которую я делаю так же, как и вы.

мы будем получать последние обновления из общедоступных репозиториев, но другая сторона медали в том, что мы не можем гарантировать, что они являются той же версией, что и мы.
вам нужно справиться с этим, указав точную версию в composer.json (не используйте ^, *).

0

По вопросам рекламы [email protected]