Я пишу PHP-приложение и хочу, чтобы среда разработки была контейнером Docker. Для этого я создал Dockerfile
в корне моего проекта, который устанавливает все пакеты, необходимые для моего приложения, копирует файлы конфигурации в контейнер и затем устанавливает мое приложение.
Это работает нормально, но теперь мне нужно сообщить моему PHP-приложению, в какой среде оно находится, development
или же production
, Это также легко, я могу просто добавить это к моему Dockerfile
:
ENV environment development
Теперь, когда я создаю свой образ, мое приложение PHP запускается в development
Режим. Отлично, теперь я могу создать свое приложение внутри контейнера Docker!
Но что произойдет, когда я захочу развернуть это приложение на рабочем сервере (в частности, AWS Elastic Beanstalk)? Если я указал в моем Dockerfile
что среда development
мое приложение не будет работать в режиме разработки при развертывании в Elastic Beanstalk?
Установка переменной среды — хороший способ сделать это; однако, делая это в Dockerfile, вы устанавливаете его для любых контейнеров, полученных из этого изображения. То, что вы действительно хотите сделать, это установить его в зависимости от контейнера. Способ сделать это, установив его при запуске контейнера:
Для развития:
docker run --env environment=development my-image
И для производства:
docker run --env environment=production my-image
Обратите внимание, что это будет работать, даже если вы установите переменную окружения в вашем Dockerfile — переменные, установленные с docker run --env
переопределит значения, установленные в Dockerfile.
Других решений пока нет …