Как получить образ docker развертывания на heroku через circleci

У меня есть приложение django, работающее локально, и я установил проект на CircleCi с образами python и postgres. Если я правильно понимаю происходящее, CircleCi будет использовать образы для создания контейнера для тестирования моего приложения с базой данных кода. Затем я использую задание heroku/deploy-via-git для развертывания на Heroku, когда тесты пройдены.

Теперь я думаю, что Heroku тоже использует некоторые изображения для запуска приложения.

Я хотел бы получить образ, используемый heroku, для запуска моего сайта локально на другой машине. То есть получить образ, затем переместить его в Docker Hub и, наконец, загрузить его обратно на мой компьютер, чтобы использовать только docker compose up.

Вот мой файл конфигурации CircleCi

version: 2.1

docker-auth: &docker-auth
  auth:
    username: $DOCKERHUB_USERNAME
    password: $DOCKERHUB_PASSWORD

orbs:
  python: circleci/python@1.5.0
  heroku: circleci/heroku@0.0.10

jobs:
  build-and-test:
    docker:
      - image: cimg/python:3.10.2
      - image: cimg/postgres:14.1
        environment:
          POSTGRES_USER: theophile

    steps:
      - checkout
      - run:
          command: pip install -r requirements.txt
          name: Install Deps 
      - run:
          name: Run MIGRATE
          command: python manage.py migrate 
      - run:
          name: Run loaddata from Json
          command: python manage.py loaddata datadump.json
      - run:
          name: Run tests
          command: pytest

          
workflows:
  heroku_deploy:
    jobs:
      - build-and-test
      - heroku/deploy-via-git:
          requires:
              - build-and-test

Я не знаю, возможно ли это, если нет, то как лучше поступить? (Я предполагаю, что существует много возможностей)

Я рассматривал возможность создания образа из моего локального каталога с помощью docker compose up, затем использовать этот образ непосредственно на CircleCi, после чего я смогу использовать этот образ на другом компьютере. Но создание образов в образы с помощью CircleCi кажется очень запутанным, и я не уверен, как мне следует действовать.

Я пытался извлечь изображения из Heroku, но, похоже, я могу извлечь только код или получить/изменить базу данных, но не могу получить сами сборки изображений.

Надеюсь, этот вопрос уместен и понятен, поскольку документация CircleCi и Heroku кажется непонятной, и это мой первый пост на stackoverflow! Заранее спасибо

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

Мы знаем, что их стеки основаны на релизах Ubuntu LTS, и мы знаем, что они используют открытые билдпаки для компиляции приложений из исходного кода, но подробности о базовой инфраструктуре туманны. Они, конечно, не предоставляют базовые образы, такие как , для загрузки.heroku/python:3.11.0

Если вы хотите использовать один и тот же образ локально, на CircleCI и Heroku, лучшим вариантом будет начать развертывание с помощью Heroku's Container Registry вместо Git. Это позволит вам собрать образ локально, поместить его в реестр контейнеров и выпустить его в качестве следующей версии вашего приложения.

Я предлагаю вам прочитать всю страницу документации, ссылка на которую приведена выше, но краткая версия такова:

  1. Войдите в реестр контейнеров с помощью Heroku CLI:

    heroku container:login
    
  2. Предполагая, что у вас уже есть Dockerfile для вашего приложения, создайте и вытолкните образ:

    heroku container:push web
    

    В данном случае мы собираем из Dockerfile и проталкиваем полученный образ для использования в качестве web процесса.

  3. Освободите ваше приложение:

    heroku container:release web
    

Это базовое развертывание Docker с вашей локальной машины, и даже если это не является вашим окончательным планом, я советую вам начать с того, чтобы это заработало.

Отсюда у вас есть варианты. Один из вариантов - перенести этот поток в CircleCI - продолжать создавать образы там, но заставить CircleCI отправить полученный контейнер в Heroku's Container Registry.

Другим вариантом может быть то, что вы предлагаете в своем вопросе: создавать образы локально и использовать их как с CircleCI, так и с Heroku.

Вернуться на верх