Как получить докер-образ развертывания на героку через Circleci

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

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

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

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

version: 2.1

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

orbs:
  python: circleci/[email protected]
  heroku: circleci/[email protected]

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, а затем использовать этот образ напрямую на CircleCi, тогда я смогу использовать этот образ на другом компьютере. Но сборка изображений в образы с помощью CircleCi кажется очень грязной, и я не уверен, как мне поступить.

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

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

    heroku container:push web
    

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

  3. Выпустите свое приложение:

    heroku container:release web
    

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

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

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

Другие вопросы по теме