Использование Docker с Symfony

Дата обновления перевода 2024-07-29

Использование Docker с Symfony

Можете ли вы использовать Docker с Symfony? Конечно! И существует несколько инструментов, которые могут вам в этом помочь, в зависимости от ваших потребностей.

Полное окружение Docker

Если вам нужно полное окружение Docker (т.е. где PHP, веб-сервер, база данных и прочее, все находится в Docker), прочтите https://github.com/dunglas/symfony-docker.

Как вариант, вы можете установить PHP на вашей локальной машине, и использовать бинарную интеграцию symfony с Docker . В обоих случаях, вы можете воспользоваться преимуществами автоматической конфигурации Docker из Symfony Flex .

Рецепты Flex & конфигурация Docker

Рецепт Flex для некоторых пакетов также включает в себя конфигурацию Docker. К примеру, когда вы выполняете composer require doctrine (чтобы получить symfony/orm-pack), ваш файл compose.yaml будет автоматически обновлен, чтобы включать в себя сервис database.

Первый раз, когда вы установите рецепт, содержащий конфигурацию Docker, Flex спросит вас, хотите ли вы добавить ее. Или, вы можете установить свои предпочтения в composer.json, установив конфигурацию extra.symfony.docker как true или false.

Некоторые рецепты также имеют дополнения к вашему Dockerfile. Чтобы получить эти изменения, вам нужно уже иметь Dockerfile в корне вашего приложения со следующим кодом где-то внутри:

1
2
###> recipes ###
###< recipes ###

Рецепт найдет этот раздел и добавит некоторые изменения внутри. Если вы используете https://github.com/dunglas/symfony-docker, у вас это уже будет.

После установки пакета, пересоздайте ваши контейнеры, выполнив:

1
$ docker-compose up --build

Бинарный веб-сервер Symfony и поддержка Docker

Если вы используете (например, symfony server:start), то он может автоматически определять ваши сервисы Docker и демонстрировать их в виде переменных окружения. См. .

Note

Пользователям macOS необходимо явно разрешить использовать сокет Docker по умолчанию, чтобы интеграция с Docker работала как объясняется в документации Docker.