Статьи

Развертывание приложений в стиле Heroku с помощью Docker

Разработка и развертывание приложений на  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 команде. Это создает необходимые  Dockerfiledocker-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 .