如何在Linux上安装和使用源到镜像(S2I)工具包

时间:2020-02-23 14:31:44  来源:igfitidea点击:

Source-to-Image(S2I)是用于从源代码构建可复制容器图像的工具箱和工作流程。通过将源代码注入到容器镜像中并让容器准备该源代码以供执行,S2I用于生成准备运行的图像。

S2I为我们提供了一种轻松的方式来版本控制构建环境,就像使用容器镜像来版本化运行时环境一样。其中我们将向我们展示如何在Linux系统上轻松安装S2I Toolkit并使用它来构建容器应用程序。

在Linux CentOS/Fedora/Ubuntu/Arch/Debian 等上安装Source-To-Image(S2I)工具包

我们将下载Source-To-Image(S2I)二进制软件包归档文件,将其解压缩并将其放入我们的系统PATH中。

访问发行页面并下载适用于我们计算机的正确发行版。如果在32位系统上,请为64位选择linux-386或者linux-amd64.

mkdir /tmp/s2i/&& cd /tmp/s2i/
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 

下载完成后,使用命令解压缩tar。

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

该文件应该是可执行文件,将其移至/usr/local/bin路径。

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

确认文件位置并检查安装的版本。

$which s2i                                                                                                                      
/usr/local/bin/s2i

$s2i version  
s2i v1.1.14

要查看使用帮助页面,请使用:

$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 cent7-app .

目录树:

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

4 directories, 9 files

在Linux上使用Source-To-Image(S2I)

现在,我们已经安装了S2I工具,我们可以考虑一个简单的示例,说明如何使用它来通过应用程序构建镜像。为简单起见,请充分利用Software Collections S2I存储库,其中包含针对许多应用程序预先创建的模板。

我们的示例适用于Nginx Web服务器。让我们使用Dockerfiles克隆存储库,以获取OpenShift的Nginx镜像。我们可以在基于RHEL和CentOS的镜像之间进行选择。

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

转到Nginx版本文件夹。

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

要使用其他版本的Nginx,只需在上面的命令中将1.12值替换为特定版本即可。

存储库中的文件和目录
|
|

在本地拥有存储库后,创建一个名为nginx-centos7的CentOS 7构建器镜像。

docker build -t nginx-centos7 .

创建应用程序镜像

应用程序镜像将构建器镜像与应用程序源代码相结合,可以使用通过Dockerfile安装的任何应用程序提供服务,使用汇编脚本进行编译,然后使用运行脚本来运行该应用程序源代码。

我们可以将创建的图像作为基础来构建可以在Openshift Container平台上运行的simplesample-app应用程序。以下命令将创建应用程序镜像:

$cd nginx-container/1.12
$s2i build test/test-app nginx-centos7 nginx-centos7-app
 ---> Installing application source
 ---> Copying nginx.conf configuration file…
 './nginx.conf' -> '/etc/opt/rh/rh-nginx112/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访问。