Last active
May 13, 2021 13:18
-
-
Save azalio/ce134ebb6cb73210897adf7459cd7422 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Buildpack | |
Потестил создание docker образа из исходников ruby с помощью своего билда. | |
===================== | |
Небольшое отступление. | |
Вам в обычной жизни не надо этим заморачиваться, уже создано большое количество билдпаков, которые сами разберутся как собрать образ вашего приложения. | |
https://devcenter.heroku.com/articles/buildpacks#officially-supported-buildpacks | |
https://elements.heroku.com/buildpacks (7741 Buildpacks) | |
Вот, например, как я собрал свое приложение на Golang | |
Склонировал репозиторий | |
git clone https://github.com/azalio/dnsapi.git | |
Посмотрел что советует pack | |
``` | |
➜ dnsapi git:(master) pack builder suggest | |
Suggested builders: | |
Google: gcr.io/buildpacks/builder:v1 Ubuntu 18 base image with buildpacks for .NET, Go, Java, Node.js, and Python | |
Heroku: heroku/buildpacks:18 Base builder for Heroku-18 stack, based on ubuntu:18.04 base image | |
Paketo Buildpacks: paketobuildpacks/builder:base Ubuntu bionic base image with buildpacks for Java, .NET Core, NodeJS, Go, Ruby, NGINX and Procfile | |
Paketo Buildpacks: paketobuildpacks/builder:full Ubuntu bionic base image with buildpacks for Java, .NET Core, NodeJS, Go, PHP, Ruby, Apache HTTPD, NGINX and Procfile | |
Paketo Buildpacks: paketobuildpacks/builder:tiny Tiny base image (bionic build image, distroless-like run image) with buildpacks for Java Native Image and Go | |
``` | |
Собрал образ | |
``` | |
pack build dnsapi --builder gcr.io/buildpacks/builder:v1 | |
``` | |
Все, приложение запускается и работает. | |
===================== | |
https://github.com/azalio/buildpack-test | |
Делалось по этому туториалу | |
https://buildpacks.io/docs/buildpack-author-guide/create-buildpack/ | |
Само руби приложение | |
https://github.com/azalio/buildpack-test/tree/master/ruby-sample-app | |
Для того чтобы собрать докер образ без Dockerfile вам надо создать три файла | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/buildpack.toml | |
Описание нашего buildpack - https://buildpacks.io/docs/concepts/components/buildpack/ | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/detect | |
отвечает за то, что при поиске кандидата на сборку приложения будет выбран этот билдпак. | |
Тут просто смотрит на наличие Gemfile | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/detect#L4 | |
``` | |
if [[ ! -f Gemfile ]]; then | |
exit 100 | |
fi | |
``` | |
Логика ниже позволяет указать с какой версией руби работает ваше приложение. | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/detect#L12 | |
Файл проверяется в исходниках приложения | |
https://github.com/azalio/buildpack-test/blob/master/ruby-sample-app/.ruby-version | |
Если запустить тестовую сборку | |
pack build test-ruby-app --path ./ruby-sample-app --buildpack ./ruby-buildpack | |
То увидим следующее | |
``` | |
===> DETECTING | |
[detector] examples/ruby 0.0.1 ``` | |
За сборку приложения отвечает файл | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/build | |
Вся основная работа начинается со скачивания руби | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/build#L16 | |
Тут мы говорим что хотим иметь руби при запуске приложения | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/build#L23 | |
Далее идут оптимизации по работе с кешом и установка гемов | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/build#L33 | |
Тут мы говорим как запускать наше приложение | |
https://github.com/azalio/buildpack-test/blob/master/ruby-buildpack/bin/build#L59 | |
Как вы можете увидеть его можно запустись по-разному | |
По дефолту запустится | |
``` | |
docker run --rm -p 8080:8080 test-ruby-app | |
docker run --rm --entrypoint worker test-ruby-app | |
``` | |
``` | |
bundle exec ruby app.rb | |
``` | |
В принципе это все, остальное - оптимизации | |
Запускаем сборку | |
``` | |
# Установили дефолтный билдер - https://buildpacks.io/docs/concepts/components/builder/ | |
pack config default-builder cnbs/sample-builder:bionic | |
# Собираем | |
pack build test-ruby-app --path ./ruby-sample-app --buildpack ./ruby-buildpack | |
bionic: Pulling from cnbs/sample-builder | |
Digest: sha256:a674cd6b556924e0b36000c00f0cda8ee42c20aa9be45e4ddfc65ea43c5423e7 | |
Status: Image is up to date for cnbs/sample-builder:bionic | |
bionic: Pulling from cnbs/sample-stack-run | |
Digest: sha256:0e6d2966062c26f0a0660c89c5bd1dba7e1fa019e6d68ef5c3694eafde1ab805 | |
Status: Image is up to date for cnbs/sample-stack-run:bionic | |
0.10.2: Pulling from buildpacksio/lifecycle | |
Digest: sha256:c3a070ed0eaf8776b66f9f7c285469edccf5299b3283c453dd45699d58d78003 | |
Status: Image is up to date for buildpacksio/lifecycle:0.10.2 | |
===> DETECTING | |
[detector] examples/ruby 0.0.1 | |
===> ANALYZING | |
[analyzer] Restoring metadata for "examples/ruby:bundler" from app image | |
[analyzer] Restoring metadata for "examples/ruby:ruby" from app image | |
===> RESTORING | |
[restorer] Restoring data for "examples/ruby:bundler" from cache | |
===> BUILDING | |
[builder] ---> Ruby Buildpack | |
[builder] ---> Downloading and extracting Ruby 2.5.0 | |
[builder] ---> Installing bundler | |
[builder] Successfully installed bundler-2.2.17 | |
[builder] 1 gem installed | |
[builder] ---> Reusing gems | |
===> EXPORTING | |
[exporter] Reusing layer 'examples/ruby:bundler' | |
[exporter] Reusing layer 'examples/ruby:ruby' | |
[exporter] Reusing 1/1 app layer(s) | |
[exporter] Reusing layer 'launcher' | |
[exporter] Reusing layer 'config' | |
[exporter] Reusing layer 'process-types' | |
[exporter] Adding label 'io.buildpacks.lifecycle.metadata' | |
[exporter] Adding label 'io.buildpacks.build.metadata' | |
[exporter] Adding label 'io.buildpacks.project.metadata' | |
[exporter] Setting default process type 'web' | |
[exporter] *** Images (cee365e8df4f): | |
[exporter] test-ruby-app | |
[exporter] Reusing cache layer 'examples/ruby:bundler' | |
Successfully built image test-ruby-app | |
``` | |
Запускаем приложение | |
``` docker run --rm -p 8080:8080 test-ruby-app | |
[2021-05-13 13:11:00] INFO WEBrick 1.4.2 | |
[2021-05-13 13:11:00] INFO ruby 2.5.0 (2017-12-25) [x86_64-linux] | |
== Sinatra (v2.0.7) has taken the stage on 8080 for development with backup from WEBrick | |
[2021-05-13 13:11:00] INFO WEBrick::HTTPServer#start: pid=1 port=8080 ``` | |
P.S. Для самых любопытных: | |
https://github.com/buildpacks | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment