摘要:现在,您已在 Docker Hub 上成功创建了构建器镜像,定义了镜像流,并将其应用到了 OpenShift 集群,而且使用自己的 Source-to-Image 条目将应用程序部署到了 OpenShift。OpenShift source-to-image 条目是从构建器镜像创建的。

在本教程中,您将学习如何为 OpenShift 集群创建自己的 source-to-image (S2I) 条目。比如,如果您计划将多个应用部署到云环境,就可以使用自定义 S2I,而不是为每个项目或应用构建单独的镜像。又比如,如果您有一个在 GitHub 上进行更新的应用,您希望这些更新能够自动触发和部署一个构建,这时或许您就会想要使用 S2I 和 GitHub webhook。本教程中的示例使用 Red Hat® OpenShift® on IBM Cloud™。

免费试用 IBM Cloud

利用 IBM Cloud Lite 快速轻松地构建您的下一个应用程序。您的免费帐户从不过期,而且您会获得 256 MB 的 Cloud Foundry 运行时内存和包含 Kubernetes 集群的 2 GB 存储空间。

前提条件

要完成本教程,您需要设置以下环境:

预计花费时间

完成本教程大约需要 20 分钟。

第 1 步:了解构建器镜像和 Docker 镜像

OpenShift source-to-image 条目是从构建器镜像创建的。这些镜像可用于从源代码构建可复制的容器镜像。本教程主要关注 Docker Hub 上的 Docker 镜像。

借助 Docker,可通过多种方式创建 source-to-image 条目。

  • 从头构建一个 基础镜像
  • 从现有基础镜像构建一个 父镜像
  • 使用 Docker Hub 中的现有基础镜像或父镜像。

第 2 步:构建一个 Go 父镜像

在本教程中,您将从一个 现有基础镜像 构建一个简单的 Go 父镜像。首先,将以下内容保存到 Dockerfile 中:

FROM centos/go-toolset-7-centos7:latest
EXPOSE 8080

上述操作的目的是使用现有基础镜像和公开的 8080 端口,以便能够从该镜像访问在容器中运行的一个应用程序。

第 3 步:将新镜像推送到 Docker Hub

通过以下命令,从 Dockerfile 所在的目录,将新镜像推送到 Docker Hub:

export DOCKERHUB_USERNAME=<your-dockerhub-username>
docker build -t $DOCKERHUB_USERNAME/go_s2i:latest .
docker login
docker push $DOCKERHUB_USERNAME/go_s2i:latest

第 4 步:定义镜像流

我们需要做的下一步就是定义 镜像流 。为此,我们将创建 goImageStream.json ,其中包含以下内容:

注意:应将 <your-dockerhub-username> 替换为自己真实的 Docker Hub 用户名

{
    "apiVersion": "v1",
    "kind": "ImageStream",
    "metadata": {
        "annotations": {
            "openshift.io/display-name": "Go"
        },
        "name": "golang"
    },
    "spec": {
        "tags": [
            {
                "name": "latest",
                "annotations": {
                    "description": "Build and run Go applications on CentOS 7 using this builder image",
                    "iconClass": "icon-go-gopher",
                    "openshift.io/display-name": "Go (Latest)",
                    "supports": "golang",
                    "tags": "builder,golang,go"
                },
                "from": {
                    "kind": "DockerImage",
                    "name": "docker.io<your-dockerhub-username>/go_s2i:latest"
                },
                "referencePolicy": {
                    "type": "Local"
                }
            }
        ]
    }
}

第 5 步:在 OpenShift 集群中创建 S2I 条目

在 IBM Cloud 上配置了 OpenShift 集群后,打开 OpenShift Web 控制台,将登录命令复制到终端窗口中。从新创建的 goImageStream.json 文件所在的目录,运行以下命令,以便在 OpenShift 集群中创建自己的 Source-to-Image 条目:

oc apply -n openshift --as system:admin -f goImageStream.json

刷新 OpenShift Web 控制台,您应该会在目录中看到 Go 条目。

第 6 步:使用构建器镜像创建一个 S2I 应用程序

现在,您可以使用这个构建器镜像创建一个 S2I 应用程序。创建一个新项目,并从目录中选择新的 Go 选项。选择新创建的项目,并为应用程序提供一个名称。对于 Git 存储库,使用 https://github.com/sclorg/golang-ex.git

该存储库是一个简单的 Go 应用程序,会在浏览器中显示 Hello OpenShift! 。构建完应用程序后,单击创建的路径,您应该会看到该应用程序正在运行。

结束语

现在,您已在 Docker Hub 上成功创建了构建器镜像,定义了镜像流,并将其应用到了 OpenShift 集群,而且使用自己的 Source-to-Image 条目将应用程序部署到了 OpenShift。您可以通过 Red Hat OpenShift on IBM Cloud 来自行尝试这些操作。

要了解有关 Source-to-Image 的更多信息,可以观看本视频。

参考资源

本文翻译自: Create your own source-to-image entry in an OpenShift cluster (2019-11-07)

相关文章