Глоссарий
Контейнер - одно приложение, но в нем может находиться все что угодно
Основные команды cli heroku
heroku container
- Сборка и отправка контейнеров в heroku
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