🐳 Π‘Π±ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠ· исходного ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 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