如何在Linux上安装和使用源到镜像(S2I)工具包
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访问。