Как нажимать контейнеры Docker, управляемые Docker-compose для Heroku?

В настоящее время у меня есть локально проверенное и работающее веб-приложение, состоящее из 4 контейнеров докеров: Java MVC, NodeJS, Flask и MongoDB. У меня есть 4 Dockerfiles, по одному для каждого, и я управляю сборками с помощью docker-compose.yml.

Однако теперь я хочу подтолкнуть свой код к Heroku, и я прочитал документацию на https://devcenter.heroku.com/articles/container-registry-and-runtime. Тем не менее, представляется весьма неоднозначным, как использовать докер-компоновку на производственной линии. Это то, что он говорит в документах:

"Если вы создали многоконтейнерное приложение, вы можете использовать Docker Compose, чтобы определить среду разработки локальная. Узнайте, как использовать Docker Compose для локальной разработки.

Может ли кто-нибудь привести меня к некоторому фактическому коду, как я могу продвинуть свой проект в контейнер Heroku, используя CLI Heroku?

Ответ 1

Более точная документация по герою того, что вы хотите сделать, находится здесь: https://devcenter.heroku.com/articles/container-registry-and-runtime

Выше приведено описание настройки плагина контейнера heroku и входа в реестр. Вы даже можете перенести изображение в Dockerfile со следующей строкой в вашем Dockerfile:

FROM "<insert Dockerfile tag here>"

Чтобы легко настроить это, вы назовете свои файлы Docker различными суффиксами, такими как Dockerfile.mongo, Dockerfile.node, Dockerfile.flask и Dockerfile.javamvc. Суффикс сообщает heroku имя dyno, используемое для вашего веб-приложения. Когда вам нужно отправить все ваши контейнеры, вы можете сделать это с помощью следующей команды, которая будет рекурсивно создавать все файлы Docker, если все они имеют уникальные суффиксы:

heroku container:push --recursive

Поскольку Heroku не читает файлы, создаваемые в Docker, любые переменные среды/настройка порта/и т.д. Необходимо будет перенести в Dockerfile. Кроме того, поскольку я не могу найти способ монтирования постоянного хранилища/тома с контейнерами в Heroku, я бы порекомендовал использовать дополнение Heroku для вашей базы данных mongo.

На Heroku вы увидите, что ваше приложение работает как один dyno для каждого Dockerfile, причем каждое имя dyno является суффиксом каждого Dockerfile.

ОБНОВИТЬ:

  1. Трэвис поднимает хороший вопрос. Убедитесь, что в вашем Dockerfile есть инструкция CMD, иначе heroku выдаст ошибку.
  2. Вчерашний вчера также добавил шаг к процессу, вам нужно будет запустить heroku container:release <your dyno name> для каждого dyno, который вы хотите обновить.

Ответ 2

Просто обновленная информация по этому вопросу, поскольку в последнее время он, похоже, набирает обороты.

Теперь существует официально поддерживаемое решение " Heroku.yml ", предлагаемое Heroku. Теперь вы можете написать файл .yml (в формате, аналогичном docker-compose), и Heroku обработает ваши изображения. Просто перейдите по ссылке выше для деталей.

Счастливого Heroku-ing.