2.4. 使用 source-to-image 实用程序构建应用程序镜像
Red Hat Software Collections 提供了 source-to-image
实用程序,您可以在 Red Hat Enterprise Linux 7 服务器中无需 OpenShift 的情况下使用它。
source-to-image
实用程序仅适用于 Red Hat Enterprise Linux 7,且只适用于 docker
拉取的镜像。您不能将 podman
与 source-to-image
实用程序搭配使用。
构建过程包含以下三个基本元素,这些元素组合成最终的容器镜像:
- 应用的源代码,使用编程语言或框架编写。
-
构建器映像,这是 Red Hat Software Collections 容器镜像,它支持使用
source-to-image
实用程序构建镜像。 - 作为构建器镜像一部分的 S2I 脚本。有关这些脚本的详情请参考 第 1.1 节 “Red Hat Software Collections Container Images 作为构建器镜像”。
在构建过程中,source-to-image
实用程序会创建一个 .tar
文件,其中包含源代码和脚本,然后将该文件流传输到构建器镜像中。
在您的系统中使用 source-to-image
工具:
- 订阅红帽软件集合.具体步骤,请参阅 获取 Red Hat Software Collections。
启用 Red Hat Software Collections Server 存储库,它提供
source-to-image
软件包和 Red Hat Enterprise Linux 7 Server 软件仓库,其中包含source-to-image
所需的docker
软件包:subscription-manager repos --enable rhel-server-rhscl-7-rpms --enable rhel-7-server-extras-rpms
# subscription-manager repos --enable rhel-server-rhscl-7-rpms --enable rhel-7-server-extras-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装
source-to-image
软件包:yum install source-to-image
# yum install source-to-image
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 登录到容器 registry:
docker login registry.redhat.io
# docker login registry.redhat.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 拉取构建器镜像:
docker pull registry.redhat.io/rhscl_image_name
# docker pull registry.redhat.io/rhscl_image_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从应用程序源代码构建应用程序镜像:
s2i build path_to_application_source_code_repository --context-dir=source_code_context_directory application_image_name
# s2i build path_to_application_source_code_repository --context-dir=source_code_context_directory application_image_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
docker
运行生成的镜像。
例 2.3. 使用 source-to-image
实用程序从 Git 存储库构建 Python 3.8 应用程序
本例演示了如何使用 rhscl/python-38-rhel7
构建器镜像和 source-to-image
实用程序构建可从公共 Git 存储库中提供的测试应用。
登录到容器 registry:
docker login registry.redhat.io
# docker login registry.redhat.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 拉取
rhscl/python-38-rhel7
构建器镜像:docker pull registry.redhat.io/rhscl/python-38-rhel7
# docker pull registry.redhat.io/rhscl/python-38-rhel7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
3.8/test/setup-test-app/
目录中从 GitHub s2i-python 存储库构建测试应用:s2i build https://github.com/sclorg/s2i-python-container.git --context-dir=3.8/test/setup-test-app/ registry.redhat.io/rhscl/python-38-rhel7 python-38-rhel7-app
# s2i build https://github.com/sclorg/s2i-python-container.git --context-dir=3.8/test/setup-test-app/ registry.redhat.io/rhscl/python-38-rhel7 python-38-rhel7-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会生成新应用镜像
python-38-rhel7-app
。运行生成的
python-38-rhel7-app
镜像:docker run -d -p 8080:8080 --name example-app python-38-rhel7-app
# docker run -d -p 8080:8080 --name example-app python-38-rhel7-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 http://localhost:8080/ 获取生成的示例文档:
wget http://localhost:8080/
$ wget http://localhost:8080/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止容器:
docker stop example-app
# docker stop example-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- S2I 要求
- GitHub 上的 Source-to-image README 文件
-
相应的构建器镜像 README 文件中的 Source-to-Image 环境变量部分,它们位于镜像内的
/help.1
文件中,或者位于上游 GitHub 存储库中。