🐳 Сборка контейнеров из исходного кода с помощью S2I на Linux

by itisgood

Source-to-Image (S2I) – это инструментарий и рабочий процесс для создания воспроизводимых образов контейнеров из исходного кода.

S2I используется для создания готовых к запуску образов путем вставки исходного кода в образ контейнера и подготовки контейнером этого исходного кода к выполнению.

S2I дает вам простой способ версионирования и контроля среды сборки точно так же, как вы используете образы контейнеров для версионирования среды выполнения.

Здесь мы покажем вам, как легко установить S2I Toolkit на систему Linux и использовать его для сборки контейнерных приложений.

Установка Source-To-Image (S2I) Toolkit на Linux

Скачаем архив бинарного пакета Source-To-Image (S2I), распакуем его и поместим бинарный файл в PATH нашей системы.

Перейдите на страницу релизов и загрузите дистрибутив, подходящий для вашей машины.

Если вы работаете на 32-битной системе, выберите linux-386 или linux-amd64 для 64-битной.

mkdir /tmp/s2i/ && cd /tmp/s2i/ 

# Linux
curl -s https://api.github.com/repos/openshift/source-to-image/releases/latest| grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4  | wget -qi -

# macOS
 curl -s https://api.github.com/repos/openshift/source-to-image/releases/latest| grep browser_download_url | grep darwin-amd64 | cut -d '"' -f 4  | wget -qi -

После загрузки распакуйте tar с помощью команды.

$ tar xvf source-to-image*.gz
./
./sti
./s2i

Файл должен быть исполняемым, переместите его по пути /usr/local/bin.

sudo mv s2i /usr/local/bin
rm -rf /tmp/s2i/

Подтвердите расположение файла и проверьте установленную версию.

$ which s2i                                                                         
/usr/local/bin/s2i

$ s2i version  
s2i v1.4.0

Чтобы просмотреть страницу помощи по использованию, используйте:

$ s2i --help
Source-to-image (S2I) is a tool for building repeatable docker images.

A command line interface that injects and assembles source code into a docker image.
Complete documentation is available at http://github.com/openshift/source-to-image

Usage:
  s2i [flags]
  s2i [command]

Available Commands:
  build       Build a new image
  completion  Generate completion for the s2i command (bash or zsh)
  create      Bootstrap a new S2I image repository
  rebuild     Rebuild an existing image
  usage       Print usage of the assemble script associated with the image
  version     Display version

Flags:
      --ca string        Set the path of the docker TLS ca file (default "/home/jmutai/.docker/ca.pem")
      --cert string      Set the path of the docker TLS certificate file (default "/home/jmutai/.docker/cert.pem")
      --key string       Set the path of the docker TLS key file (default "/home/jmutai/.docker/key.pem")
      --loglevel int32   Set the level of log output (0-5)
      --tls              Use TLS to connect to docker; implied by --tlsverify
      --tlsverify        Use TLS to connect to docker and verify the remote
  -U, --url string       Set the url of the docker socket to use (default "unix:///var/run/docker.sock")

Use "s2i [command] --help" for more information about a command.

Чтобы загрузить новое хранилище образов с поддержкой S2I, используйте синтаксис команды:

$ s2i create <image name> <destination directory>

Эта команда сгенерирует скелетный каталог .s2i и заполнит его примерами скриптов S2I, которые вы можете использовать для взлома. См. пример:

mkdir /tmp/s2i-test && cd /tmp/s2i-test
s2i create cent9-app .

Дерево:

$ tree                                                       
.
├── Dockerfile
├── Makefile
├── README.md
├── s2i
│   └── bin
│       ├── assemble
│       ├── run
│       ├── save-artifacts
│       └── usage
└── test
    ├── run
    └── test-app
        └── index.html

4 directories, 9 files

Использование Source-To-Image (S2I) на  Linux

Теперь, когда мы установили инструмент S2I, мы можем рассмотреть простой пример того, как его можно использовать для создания образов с приложениями.

Для простоты мы будем использовать репозиторий Software Collections S2I, который содержит готовые шаблоны для многих приложений.

Наш пример – веб-сервер Nginx.

Давайте клонируем репозиторий с Dockerfiles для создания образов Nginx для OpenShift.

Вы можете выбирать между образами на базе RHEL и CentOS.

git clone --recursive https://github.com/sclorg/nginx-container.git

Перейдите в папку с версией Nginx.

cd nginx-container
git submodule update --init
cd 1.26

Для использования других версий Nginx просто замените значение 1.26 на конкретную версию в командах выше.

Файлы и каталоги в репо

 

Файл Требуется? Описание
Dockerfile Да Определяет базый образ
s2i/bin/assemble Да Скрипт, создающий приложение
s2i/bin/usage Нет Скрипт, выводящий данные об использовании конструктора
s2i/bin/run Да Скрипт, запускающий приложение
s2i/bin/save-artifacts Нет Скрипт для инкрементных сборок, сохраняющий собранные артефакты
test/run Нет Тестовый скрипт для образа
test/test-app Да Тестирование исходного кода приложения

Когда репозиторий будет локализован, создайте bbuilder-образ Fedora с именем nginx-fedora.

docker||podman build -f Dockerfile.fedora -t nginx-fedora .

Создание образа приложения

Образ приложения объединяет образ сборщика с исходным кодом вашего приложения, которое обслуживается с помощью приложения, установленного через Dockerfile, компилируется с помощью скрипта assemble и запускается с помощью скрипта run.

Созданный образ можно использовать в качестве основы для создания простого примера приложения, которое можно запустить на платформе Openshift Container.

Следующая команда создаст образ приложения:

$ cd nginx-container/1.26
$ s2i build test/test-app nginx-fedora nginx-fedora-app
 ---> Installing application source
 ---> Copying nginx.conf configuration file…
 './nginx.conf' -> '/etc/opt/rh/rh-nginx124/nginx/nginx.conf'
 ---> Copying nginx configuration files…
 './nginx-cfg/default.conf' -> '/opt/app-root/etc/nginx.d/default.conf'
 ---> Copying nginx default server configuration files…
 './nginx-default-cfg/alias.conf' -> '/opt/app-root/etc/nginx.default.d/alias.conf'
 ---> Copying nginx start-hook scripts…
 Build completed successfully

Используя логику, заданную в скрипт сборки, s2i создаст образ приложения, используя образ сборщика в качестве основы и включая исходный код из каталога test/test-app.

Проверьте, создан ли образ приложения.

$ docker images | grep nginx-centos7-app
nginx-centos7-app              latest              59cbe8e707c7        About a minute ago   320MB

Запуск образа приложения

Запустите образ приложения, вызвав команду docker run:

docker run -d -p 8080:8080 nginx-centos7-app

Развернутое приложение представляет собой простую статическую веб-страницу и должно быть доступно по адресу http://localhost:8080.

см. также:

 

Loading

You may also like

Leave a Comment