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.
см. также:
- 🐳 Как проверить оставшееся дисковое пространство в файловой системе Docker Overlay
- 🐳 Выбор между Docker Compose и Docker Swarm
- 🐳 Размер образа Docker: как проверить и уменьшить
- 🐳 Как установить Docker на Ubuntu с помощью bash скрипта
- 🐳 Подключение к службе, запущенной на вашем хосте Docker, из контейнера
- 🐳 Пошаговое руководство: Установка Docker на Windows 11 и 10
- 🐳 Отображение различий между двумя образами Docker