Хотите создать удобную среду для разработки на symfony, но не знаете как? Тогда эта статья для Вас.
Установка docker подробно описана на официальном сайте.
Предположим, что нам понадобится обработка изображений и работа с мультиязычными сайтами. Во время сборки доставим все необходимые пакеты. Как БД будет использована mariadb.
Создадим где-нибудь папку app. Для примера, это будет /home/user/app. В корне создадим папку docker, внутри нее папку php. В ней создадим папку files и положим туда файл php-local.ini следующего содержания:
date.timezone = "Asia/Krasnoyarsk"
Если этого не сделать, то в контейнере будет установлена таймзона по-умолчанию. Может привести к неприятным последствиям сохранения дат в бд.
Создаем DockerFile следующего содержания:
https://pastebin.com/6DYFU64e - ссылка на скачивание файла текстом.
Рассмотрим значение каждой из строк в отдельности.
FROM php:7.4-cli
Сборку проводим на основе официального php 7.4 образа, cli версия.
COPY --from=composer /usr/bin/composer /usr/bin/composer
Подтянем в контейнер composer последней версии из официального образа.
COPY files/php-local.ini "$PHP_INI_DIR/conf.d/php-local.ini"
Скопируем наши настройки тайм-зоны в целевой образ
RUN \
mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" && \
apt-get update && \
apt-get install -y \
git unzip wget libpng-dev libfreetype6-dev libjpeg62-turbo-dev libicu-dev && \
docker-php-ext-configure gd --with-freetype --with-jpeg && \
docker-php-ext-configure intl && \
docker-php-ext-install mysqli pdo_mysql gd intl && \
Установим правильный php.ini из офф. образа, поставим все необходимые пакеты, включим расширения php для работы с бд, картинками и переводами.
#> symfony
wget https://get.symfony.com/cli/installer -O - | bash && \
mv /root/.symfony/bin/symfony /usr/local/bin/symfony && \
#< symfony
Установим Symfony CLI
adduser --uid 1000 --gecos '' --disabled-password myuser && \
По умолчанию, контейнер работает под 33 пользователем. Если оставить, как есть, нельзя будет редактировать файлы вне контейнера. Добавим нашего пользователя внутрь контейнера. 1000 - uid пользователя linux. У Вас может отличаться.
apt-get remove -y wget && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
Подчистим за собой установочный мусор. Этим уменьшаем финальный размер образа.
USER myuser
Контейнер запускается от имени пользователя myuser.
WORKDIR /home/myuser/app
Установка рабочей директории для нашего приложения.
CMD ["symfony", "server:start", "--no-tls", "--port=8000"]
По умолчанию, запускаем symfony server при старте контейнера.
Теперь, когда DockerFile полностью сформирован, запускаем сборку.
docker build . -t symfony-app
Важно! Запуск команды производим из папки /home/user/app/docker/php. Иначе не соберется.
Дожидаемся окончания сборки и получаем готовый образ.
docker images | grep symfony-app
Убеждаемся в наличии образа в списке наших образов.
Теперь необходимо развернуть стартовый шаблон приложения.
docker run -it --rm -v /home/user/app:/home/myuser/app symfony-app bash
Отдельное внимание надо обратить на строчку -v. Пробрасываем папку с корнем нашего приложения внутрь контейнера.
Выполняем команду и создаем приложение, как указано на странице официальной документации
composer create-project symfony/website-skeleton:"5.2.x@dev" app
После установки пишем exit и завершаем таким образом работу с этим контейнером.
Установка произошла в папку /home/user/app/app.
Теперь все готово к запуску нашего приложения.
docker run -it --rm -p 9001:8000 -v /home/user/app/app:/home/myuser/app symfony-app
Здесь стоит обратить внимание на строчку -p 9001:8000 - мы пробросили наш локальный порт 9001 на контейнерный 8000. Теперь достаточно открыть в браузере https://127.0.0.1:9001 и увидеть стандартную главную страницу нашего symfony приложения. Если в Вашей системе порт 9001 уже занят - попробуйте любой другой.
Вот и все. Контейнер готов к работе.