Heroku - облачная PaaS платформа. На что ты способна?


 Toc

Глоссарий

Контейнер - одно приложение, но в нем может находиться все что угодно

Основные команды cli heroku

heroku container - Сборка и отправка контейнеров в heroku

heroku-container


USAGE
  $ heroku container

Установка клиента


curl https://cli-assets.heroku.com/install.sh | sh

Пример запуска docker контейнеров в heroku


$ heroku login
heroku: Press any key to open up the browser to login or q to exit: 
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/38010bcb-7385-4052-a96a-2c0996afa675
Logging in... done
Logged in as orlov.avis@yandex.ru

Создаем простое web приложение


$ mkdir docker-in-heroku
$ cd docker-in-heroku/ && catalyst.pl MyApp
...

$ cat ./MyApp/lib/MyApp/Controller/Root.pm
package MyApp::Controller::Root;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller' }

__PACKAGE__->config(namespace => '');

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;
    $c->response->body("Hello world");
}

sub default :Path {
    my ( $self, $c ) = @_;
    $c->response->body( 'Page not found' );
    $c->response->status(404);
}

sub end : ActionClass('RenderView') {}

__PACKAGE__->meta->make_immutable;

1;

Засовываем в контейнер


avis@avisPC[18:37:22]:~/tmp/docker-in-heroku$ cat Dockerfile
FROM ubuntu:bionic

RUN apt-get update && apt-get install -y \
    libcatalyst-perl \
    libcatalyst-devel-perl \
    libmoose-perl \
    libcatalyst-plugin-static-simple-perl \
    libcatalyst-plugin-configloader-perl \
    libcatalyst-action-renderview-perl

WORKDIR /MyApp
COPY MyApp /MyApp

CMD perl /MyApp/script/myapp_server.pl -rd -p $PORT
avis@avisPC[18:37:36]:~/tmp/docker-in-heroku$ 

Создаем конфиг для хероку


$ cat heroku.yml 
build:
  docker:
    web: Dockerfile

Собираем образ


$ docker build -t my-perl-app .
...

Запускаем локально


$ docker run --rm -d -e PORT=3300 --net=host --name my-perl-app my-perl-app
1a0e85b1a5ee5db91df71868947201284558dfb7c57859d8ea02afda1d6f3da9
...
$ curl localhost:3300
Hello world

Создаем приложение в хероку


$ heroku create my-perl-app
Creating ⬢ my-perl-app... done
https://my-perl-app.herokuapp.com/ | https://git.heroku.com/my-perl-app.git

heroku container:login

Говорим что будем использовать контейнер


$ heroku stack:set container --app my-perl-app

Пушим образ в хероку в хероку


$ heroku container:push web --app my-perl-app

Говорим что контейнер релизный


$ heroku container:release web --app my-perl-app
Releasing images web to my-perl-app... done

Проверяем


$ curl https://my-perl-app.herokuapp.com/
Hello world