Если мы подписываемся на подход «однажды запустить в любом месте», то вы правы, мы должны стремиться собрать контейнер один раз и запустить его в любой среде, изменив его переменные среды.
Изменение переменных среды не обязательно должно означать передачу значений, таких как ключи API, непосредственно в ваше приложение, хотя вы можете использовать переменные среды для указания на хранилище или etcd обслуживайте и используйте эти инструменты для начальной загрузки приложения и создания файлов конфигурации.
Я бы порекомендовал добавить слой инициализации в ваш контейнер (с помощью ENTRYPOINT
), который выполняет настройку вашего приложения до CMD
срабатывает.Это может быть что угодно: от настройки соединения с базой данных, разогрева кеша или установки зависимостей.
Вы, безусловно, можете застрелить себя с плохими точками входа.Обязательно ознакомьтесь с некоторыми популярными изображениями, чтобы увидеть, как они справляются с этими сценариями - postgres - хороший вариант.