У меня есть приложение 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! заранее спасибо
Платформа Heroku является частной, поэтому мы не можем быть уверены, как она работает внутри.
Мы знаем, что их стеки основаны на выпусках Ubuntu LTS , и мы знаем, что они используют сборочные пакеты с открытым исходным кодом для компиляции слагов приложений из исходного кода, но подробности о базовой инфраструктуре неясны. Они, конечно, не предоставляют базовые изображения, такие как heroku/python:3.11.0
, для загрузки.
Если вы хотите использовать один и тот же образ локально, на CircleCI и Heroku, лучшим вариантом будет начать развертывание с Реестра контейнеров Heroku вместо Git. Это позволяет вам создавать образ локально, помещать его в реестр контейнеров и выпускать в качестве следующей версии вашего приложения.
Я предлагаю вам прочитать всю страницу документации, указанную выше, но краткая версия:
Войдите в реестр контейнеров с помощью интерфейса командной строки Heroku:
heroku container:login
Предполагая, что у вас уже есть Dockerfile
для вашего приложения, создайте и отправьте изображение:
heroku container:push web
В этом случае мы строим из Dockerfile
и отправляем полученное изображение для использования в качестве web
процесса.
Выпустите свое приложение:
heroku container:release web
Это базовое развертывание Docker с вашего локального компьютера, и даже если это не ваш окончательный план, я предлагаю вам начать с его работы.
Оттуда у вас есть варианты. Один из вариантов — перенести этот поток в CircleCI — продолжить создавать образы там, но пусть CircleCI отправит полученный контейнер в реестр контейнеров Heroku.
Другой вариант может быть таким, как вы предлагаете в своем вопросе: создавать образы локально и использовать их как с CircleCI, так и с Heroku.