Разработка и развертывание приложений на Heroku была революционной, когда она была представлена. Разработчик может просто сосредоточиться на разработке приложения-убийцы, а не на настройке серверов и создании сценариев.
Эта статья первоначально была опубликована на блоге Kontena по Лаури Невала , и с их разрешения, мы разделяем его здесь для читателей Codeship.
В этой статье мы расскажем, как вы можете использовать экспериментальные функции Kontena для развертывания приложений с Kontena, как с Heroku!
Heroku, как и многие другие решения « платформа как услуга» (PaaS), позволяет разработчикам развертывать приложения, написанные на поддерживаемом языке программирования, на размещенной облачной платформе. Развертывание обычно выполняется git push
в репозитории, специфичном для платформы PaaS. При развертывании платформа обнаружит язык программирования, создаст и запустит приложение.
С платформами PaaS разработчики могут наслаждаться высокоавтоматизированными процессами развертывания. Kontena стремится обеспечить такое же удобство для людей, переходящих от решений PaaS к контейнерам Docker. Поскольку Heroku является одной из самых совершенных и удобных для разработчиков платформ PaaS, мы хотели посмотреть, возможно ли создать аналогичный рабочий процесс разработки с помощью Kontena.
«Давайте поговорим о том, как использовать @KontenaInc для создания рабочего процесса в стиле Heroku». — через @codeship
Click To Tweet
Начало работы приложения на Kontena
После того, как вы подготовили главный и главный узлы, вы готовы начать развертывание приложений в Kontena. Смотрите наше краткое руководство для более подробной информации.
Первым шагом запуска вашего приложения в Kontena является его Dockerize. С Kontena это просто: просто позвоните kontena app init
команде. Это создает необходимые Dockerfile
, docker-compose.yml
и kontena.yml
файлы.
Сгенерированный Dockerfile по умолчанию основан на Buildstep, который позволяет создавать приложения в стиле Heroku с помощью Docker. Buildstep имеет список официально поддерживаемых пакетов сборки , которые встроены и готовы к использованию.
В дополнение к генерации Dockerfile Kontena анализирует app.json
файл манифеста и Procfile
. Основываясь на этих файлах, он описывает необходимые приложения и дополнительные сервисы kontena.yml
и генерирует связанные переменные среды в .env
файле.
Когда ваше приложение Dockerized, вы можете развернуть его с помощью kontena app deploy
команды. При развертывании Kontena автоматически создает образ Docker для вашего приложения, определяет тип приложения на основе исходного кода и подготавливает для него требуемую рабочую среду.
После завершения сборки Kontena помещает созданный образ Docker в реестр образов. По умолчанию Kontena использует встроенный автономный реестр Docker , но вы можете изменить его kontena.yml
.
При развертывании Kontena организует контейнеры Docker и развертывает приложение на узлах хоста.
Когда развертывание завершится, ваше приложение и все необходимые дополнительные службы будут запущены и запущены.
пример
Давайте попробуем это с помощью простого приложения на Ruby / Sinatra в стиле Heroku, которое имеет одну конечную точку, которая показывает, сколько раз была посещена страница:
web.rb
require 'sinatra'
require 'redis'
get '/' do
redis = Redis.new(:url => ENV['REDIS_URL'])
redis.incr "count"
"Hello, world called #{redis.get("count")} times"
end
Затем мы определяем наше приложение в app.json
манифесте с одним openredis
дополнением:
{
"name": "Sinatra example application",
"description": "This app is a basic Sinatra application.",
"keywords": [
"kontena",
"ruby",
"sinatra",
"redis"
],
"website": "http://www.kontena.io",
"repository": "https://github.com/kontena/redis-example",
"success_url": "/",
"addons": [
"openredis"
]
}
Мы также должны представить наши процессы в Procfile
:
web: bundle exec ruby web.rb -p $PORT
Теперь мы готовы Dockerize наше приложение, запустив:
$ kontena app init
Он создает все необходимые файлы и службы, связанные с Docker и Kontena, и мы можем просто развернуть наше приложение:
$ kontena app deploy
Масштабирование приложения
Чтобы масштабировать приложение, нам нужно прикрепить его к Kontena Load Balancer . Чтобы сделать это, мы должны сначала создать сервис балансировки нагрузки для сетки:
$ kontena service create --ports 80:80 internet_lb
kontena/lb:latest
Затем мы можем отредактировать kontena.yml
файл и установить количество запущенных экземпляров и прикрепить сервис к сервису балансировки нагрузки. Это можно сделать с помощью external_links
переменных свойства и среды:
web:
...
instances: 2
external_links:
- internet_lb
environment:
- KONTENA_LB_MODE=http
- KONTENA_LB_BALANCE=roundrobin
- KONTENA_LB_INTERNAL_PORT=5000
- KONTENA_LB_VIRTUAL_HOSTS=www.yourdomain.com,yourdomain.com
Смотрите пример kontena.yml для полного примера.
После этого мы можем просто повторно развернуть наш веб-сервис:
$ kontena app deploy web
Вывод
Мы продемонстрировали, что при работе с контейнерами Docker возможен рабочий процесс разработки приложений в стиле Heroku. Вы можете наслаждаться лучшими частями обоих миров: супер-простой процесс разработки приложений в сочетании с чистыми контейнерами Docker.
При работе с контейнерами @Docker можно иметь рабочий процесс, похожий на @Heroku.
Нажмите, чтобы чирикать
Мы все еще работаем и экспериментируем с этой функцией, поэтому ожидаем увидеть некоторые изменения в будущем. Вот некоторые из улучшений, о которых мы думаем:
- Автоматически подключать «веб» сервисы к балансировщику нагрузки Kontena
- Разрешить Heroku-подобное легкое масштабирование для применения
- Сделать Buildstep производить меньшие изображения. Текущая реализация создает слишком большие изображения; как правило, более 1 ГБ!
Дайте нам знать, что вы думаете и / или помогите нам, внеся свой вклад в проект с открытым исходным кодом Kontena . Будем рады видеть вас снова!
«Развертывание приложений в стиле Heroku с помощью Docker» — через @codeship
Click To Tweet
О Контене
Kontena — это новая платформа Docker с открытым исходным кодом, включающая в себя оркестровку, обнаружение служб, оверлейные сети и все инструменты, необходимые для запуска ваших контейнерных рабочих нагрузок. Kontena создана, чтобы максимизировать счастье разработчика. Он работает в любом облаке, прост в настройке и супер прост в использовании. Попробуйте! Если вам это нравится, отметьте это на GitHub и подпишитесь на нас в Twitter . Надеемся увидеть вас снова!
Пост развертывания приложений в стиле Heroku с помощью Docker впервые появился через @codeship .