Зависимости Composer в Docker
Зависимости Composer читаются из файла проекта
и складываются в каталог vendor при сборке.
Пустой блок require
уже достаточен,
чтобы команда создала структуру
и зафиксировала автозагрузчик
внутри образа.
В composer.json
задают имя пакета app
и пустой список библиотек:
{
"name": "app",
"require": {}
}
Dockerfile
копирует манифест,
ставит зависимости
без вопросов в консоли
и оставляет vendor
в слое образа:
FROM php:8.5-fpm
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY composer.json /app/composer.json
WORKDIR /app
RUN composer install --no-interaction
Сервис app
собирается из этой папки.
Файл compose.yaml:
services:
app:
build: .
После docker compose up
с флагом сборки
каталог vendor
уже внутри образа,
хотя на хосте его может не быть.
Проверка наличия каталога:
docker compose up -d --build
docker compose exec app test -d vendor && echo yes
Терминал печатает yes,
если установка прошла.
Список файлов в vendor
не разбираем,
фреймворки не подключаем -
важен сам факт каталога
после composer install.
Соберите сервис shop с именем пакета shop в composer.json без внешних библиотек, чтобы vendor появился только в образе.
Убедитесь изнутри контейнера, что каталог vendor существует, не перечисляя его содержимое.