Red Hat OpenShift Study / コンテナのデプロイ - (2) Dockerビルド

# はじめに
前回の例では、デプロイしたいDockerイメージをOpenShiftの外の世界で準備しておいて、それをそのままOpenShift上にデプロイする手順を見てみました。
今回は"Dockerビルド"と呼ばれるデプロイのシナリオを試してみます。このシナリオではDockerイメージをビルドする部分をOpenShift上で(oc new-appコマンドの処理の一部として)実行することができます。

今回のシナリオ: **Dockerfile + baseイメージ => OpenShift上のPodとしてデプロイ**

## 関連記事
[Red Hat OpenShift Study / コンテナのデプロイ - (0) Dockerおさらい](https://qiita.com/tomotagwork/items/6b64cb54eaf45c057196)
[Red Hat OpenShift Study / コンテナのデプロイ - (1) Dockerイメージを元にしたデプロイ](https://qiita.com/tomotagwork/items/f7398ac3c71eefe24835)
[Red Hat OpenShift Study / コンテナのデプロイ - (2) Dockerビルド](https://qiita.com/tomotagwork/items/bb5919c27ed53a459d09)
[Red Hat OpenShift Study / コンテナのデプロイ - (3) s2i ビルド](https://qiita.com/tomotagwork/items/a86848e979b98910e4d4)

# 全体像
今回のシナリオでは、OpenShiftにデプロイする前段階として準備するものとしては、元になるDockerイメージ(DockerHub上のgolang:latest)と、新たにDockerイメージを作成するためのDockerfileおよびそこに組み込むソースファイルです。DockerfileとソースはGitHub上に保持しておく想定です。
全体像としては以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3570a268-d82b-be1d-1c6c-22f0f5512835.png)


# 事前準備
まずは上の全体像の図の(1)～(5)の部分を事前準備として実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2b232fc7-7a42-65cf-bce3-616af96071dc.png)

## GitHubリポジトリの準備
今回は簡易的なテストなので、GitHub上の個人アカウントにPrivateリポジトリ"openshift-test"というリポジトリを作成することにします。

GitHubやGitについての詳細はここでは割愛しますが、以下のようにGitHubリポジトリを作成しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2b8994c0-23d5-f1cc-044c-04f0101e9264.png)

## Dockerファイル/ソースの準備
今回のシナリオでは、DockerfileとソースをGitHub上に作成すればよいのですが、当然事前に稼働確認はしておきたいですよね。ここは前回と同じようにPodman環境を整備したLinux環境で動作確認しつつ、Dockerfile, ソースを準備していきます。

### Dockerfileの作成

前回とは少しDockerfile変更したものを用意しました。

```Dockerfile
FROM golang:latest

USER 1001

RUN mkdir test
COPY main.go test/

EXPOSE 8080

#CMD ["sh", "-c", "GOCACHE=off", "go", "run", "/go/test/main.go"]
CMD export GOCACHE=/go/test;go run /go/test/main.go
```

前回はDockerイメージのビルド部分はPodman環境で実施しましたが、今回はビルド部分はOpenShift上で実施する想定です(今回も事前のテストとしてはローカルのPodmanでビルドしますが)。
このビルドをするユーザーもrootではなく任意のユーザー(グループはroot)で実施されることになるので、権限周りは注意が必要です。
元のDockerイメージ"golang"では、ルートディレクトリ"/"のパーミッションが"755"になっていてrootユーザー以外ではルートディレクトリ以下にディレクトリが作れないようになっています。一方WORKDIRとしては/goが指定されていてここはパーミッションが"777"になっているので、ここを使用するように変更しています。

### Go言語ソース作成

これは前回と全く同じものをそのまま使います。

```go:main.go
package main

import (
        "fmt"
        "log"
        "net/http"
)

func main(){
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
                log.Println("received request")
                fmt.Fprintf(w, "Hello Docker!")
        })

        log.Println("start server")
        server := &http.Server{Addr: ":8080"}
        if err := server.ListenAndServe(); err != nil {
                log.Println(err)
        }
}
```

## ローカルでのビルド/稼働のテスト
Podman環境でビルドできるかどうか確認しておきます。

```
# podman build -t gotest .
STEP 1: FROM golang:latest
STEP 2: USER 1001
--> Using cache d854e30178bbe6a7c5e9f63cc9c765190a94fcf0c983b4e6bba083876c2963b9
STEP 3: RUN mkdir test
9bb55922b975bf0c283417867e59c63f6ff3c6e9b7505888d435b613e7ff6272
STEP 4: COPY main.go test/
c5156d6917bd2ae5961e1d9326275564a07d44d4798c504830a869717574dc72
STEP 5: EXPOSE 8080
250d77372cc35152a20d65be50df13090e3a4349e301c5435bc0d75660bd8ba7
STEP 6: CMD export GOCACHE=/go/test;go run /go/test/main.go
STEP 7: COMMIT gotest
fcd2714e7ad9fa306558243e13f1e5e7d3117bdf668d0131bf2e2b6c5bef65fa
```

ローカルでの稼働確認もしておきます。

```
 podman run --rm -d -p 8080:8080 --name gotest gotest
c70499e883948fbcf72c866fbc45cecadfe76c47ea4c5d32abd80d2095624930

# curl localhost:8080
Hello Docker!

# podman stop gotest
c70499e883948fbcf72c866fbc45cecadfe76c47ea4c5d32abd80d2095624930
```

## GitHubへpush
Dockerfileとソースの確認が済んだら、それらをGitHubにプッシュしておきます。
ここでは、mainブランチのgotestフォルダー以下に配置することにします(手順は一般的なgit操作の話なのでここでは割愛)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bc5d0090-76d1-4379-d318-8c992610bf9b.png)

# コンテナのデプロイ
上で準備したDockerfile、ソースを元に、Dockerイメージのビルド、デプロイを実施してみます。全体像の図の(6)～(8)を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7a6c5c4e-303b-537b-0c26-212588b7d065.png)

## プロジェクト作成
ここではtomotag-test02というプロジェクトを作成し、そこにデプロイしてみます。

```
# oc new-project tomotag-test02
Now using project "tomotag-test02" on server "https://xxx.cloud.ibm.com:nnn".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app rails-postgresql-example

to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=k8s.gcr.io/serve_hostname
```

## GitHubアクセス用シークレット作成

以下のマニュアルの記述を参考に。
[OpneShift Container Platform V4.5 - ビルド - 3.4 Gitソース](https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.5/html/builds/builds-source-code_creating-build-inputs#builds-adding-source-clone-secrets_creating-build-inputs)

今回はBasic認証用にユーザーIDとパスワードをLiteralで指定。

```
# oc create secret generic github --from-literal=username=tomotagwork --from-literal=password=xxxxx --type=kubernetes.io/basic-auth
secret/github created
```

アノテーションを付与する。

```
# oc annotate secret github 'build.openshift.io/source-secret-match-uri-1=https://github.com/tomotagwork/*'
secret/github annotated
```

以下のようなシークレットがネームスペースtomotag-test02に作成されました。

```
# oc get secret github -o yaml
apiVersion: v1
data:
  password: xxxxx
  username: dG9tb3RhZ3dvcms=
kind: Secret
metadata:
  annotations:
    build.openshift.io/source-secret-match-uri-1: https://github.com/tomotagwork/*
  creationTimestamp: "2021-07-19T07:59:13Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:password: {}
        f:username: {}
      f:type: {}
    manager: kubectl-create
    operation: Update
    time: "2021-07-19T07:59:13Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:build.openshift.io/source-secret-match-uri-1: {}
    manager: kubectl-annotate
    operation: Update
    time: "2021-07-19T08:00:46Z"
  name: github
  namespace: tomotag-test02
  resourceVersion: "73778391"
  selfLink: /api/v1/namespaces/tomotag-test02/secrets/github
  uid: 51741477-e159-4e85-9404-a312b6d18eb8
```

※今回のシナリオでは元になるDockerイメージ(golang)はDockerHubに公開されているものをそのまま使います。すなわち認証が不要なので、DockerHubに対する認証情報は設定しません。

## ビルド&デプロイ

```
# oc new-app --as-deployment-config --name gotest https://github.com/tomotagwork/openshift-test#main --contex
t-dir gotest
Username for 'https://github.com': tomotagwork
Password for 'https://tomotagwork@github.com':
Username for 'https://github.com': tomotagwork
Password for 'https://tomotagwork@github.com':
warning: Cannot check if git requires authentication.
--> Found image 2b397b4 (2 years old) in image stream "openshift/golang" under tag "latest" for "golang:latest"

    Go 1.11.5
    ---------
    Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.

    Tags: builder, golang, golang111, rh-golang111, go

    * A Docker build using source code from https://github.com/tomotagwork/openshift-test#main will be created
      * The resulting image will be pushed to image stream tag "gotest:latest"
      * Use 'oc start-build' to trigger a new build
      * WARNING: this source repository may require credentials.
                 Create a secret with your git credentials and use 'oc set build-secret' to assign it to the build config.
    * This image will be deployed in deployment config "gotest"
    * Port 8080/tcp will be load balanced by service "gotest"
      * Other containers can access this service through the hostname "gotest"

--> Creating resources ...
    imagestream.image.openshift.io "gotest" created
    buildconfig.build.openshift.io "gotest" created
    deploymentconfig.apps.openshift.io "gotest" created
    service "gotest" created
--> Success
    Build scheduled, use 'oc logs -f buildconfig/gotest' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose service/gotest'
    Run 'oc status' to view your app.
```

先に準備したDockerfileを元に新たなDockerイメージがOpenShiftクラスター上でビルドされ、それがデプロイされました。

```
# oc get all
NAME                  READY   STATUS      RESTARTS   AGE
pod/gotest-1-2g7hz    1/1     Running     0          12m
pod/gotest-1-build    0/1     Completed   0          14m
pod/gotest-1-deploy   0/1     Completed   0          12m

NAME                             DESIRED   CURRENT   READY   AGE
replicationcontroller/gotest-1   1         1         1       12m

NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/gotest   ClusterIP   172.21.xx.xx   <none>        8080/TCP   14m

NAME                                        REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/gotest   1          1         1         config,image(gotest:latest)

NAME                                    TYPE     FROM       LATEST
buildconfig.build.openshift.io/gotest   Docker   Git@main   1

NAME                                TYPE     FROM          STATUS     STARTED          DURATION
build.build.openshift.io/gotest-1   Docker   Git@1062eb6   Complete   14 minutes ago   1m47s

NAME                                    IMAGE REPOSITORY                                                         TAGS     UPDATED
imagestream.image.openshift.io/gotest   image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest   latest   12 minutes ago
```

### oc new-app コマンド補足
上の例では、oc new-app コマンドの --strategyオプションを明示指定していませんが、指定したURLの --context-dir下にDockerfileがあった場合、Dockerビルドと認識されるようです。つまり--strategy=docker を指定したと同じ挙動になります。
ただ、OpenShift V4.5の公式ドキュメントからこの辺りの動きについての詳細な記述を見つけることができませんでした。

例えば、OpenShift V3.11のドキュメントには以下の記述があります。
https://docs.openshift.com/container-platform/3.11/dev_guide/application_lifecycle/new_app.html
>Build Strategy Detection
>If a Jenkinsfile exists in the root or specified context directory of the source repository when creating a new application, OpenShift Container Platform generates a Pipeline build strategy. Otherwise, <font color="red">if a Dockerfile is found, OpenShift Container Platform generates a Docker build strategy. </font>Otherwise, it generates a Source build strategy.
You can override the build strategy by setting the --strategy flag to either docker, pipeline or source.
>`$ oc new-app /home/user/code/myapp --strategy=docker`


OpenShift V4以降はドキュメントの体系も変わってしまっているのですが、Applicationの章に類似の内容が記載されており、以下のような記述に変更されています。
https://docs.openshift.com/container-platform/4.5/applications/application_life_cycle_management/creating-applications-using-cli.html#build-strategy-detection
>Build strategy detection
If a Jenkins file exists in the root or specified context directory of the source repository when creating a new application, OpenShift Container Platform generates a pipeline build strategy. Otherwise, it generates a source build strategy.
Override the build strategy by setting the --strategy flag to either pipeline or source.
>`$ oc new-app /home/user/code/myapp --strategy=docker`

Dockerfileについての記述が無くなっていますが、サンプルとして--strategy=dockerでOverrideする例はそのままというなんとも微妙な書き方になっています。この記述の通りだとすると Dockerビルドのstrategyを使用したければ明示的に--strategyを指定しなければいけないように読み取れますが、実際にはDockerfileを検知してDockerビルドが行われています。
こんな感じで古いドキュメントには記載されていてV4以降も同じ動作をしていそうだけど新しいドキュメントには見当たらないということがいくつかあった気がします。この辺の分かりにくさがイケてないんだよなぁ...
Dockerビルドを行う際は、oc new-appコマンド実行時に--strategy=dockerと明示指定するのが無難なのかもしれません。

# 稼働確認

作成されたserviceをrouteとして公開して実際にアクセスしてみます。

```
# oc get svc
NAME     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
gotest   ClusterIP   172.21.xx.xx   <none>        8080/TCP   15m

# oc expose svc gotest
route.route.openshift.io/gotest exposed

# oc get route
NAME     HOST/PORT                                                                                                            PATH   SERVICES   PORT       TERMINATION   WILDCARD
gotest   gotest-tomotag-test02.xxx.containers.appdomain.cloud          gotest     8080-tcp                 None
```

curlでアクセスしてみる。

```
# curl gotest-tomotag-test02.xxx.appdomain.cloud
Hello Docker!
```

きちんと結果が返されました！

# 生成されたリソースの確認

oc new-appコマンドで生成されたリソースを確認しておきます。

## BuildConfig

<details><summary><font color="blue">oc get bc/gotest -o yaml</font></summary><div>

```yaml
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  creationTimestamp: "2021-07-19T08:02:20Z"
  labels:
    app: gotest
    app.kubernetes.io/component: gotest
    app.kubernetes.io/instance: gotest
  managedFields:
  - apiVersion: build.openshift.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/generated-by: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/instance: {}
      f:spec:
        f:output:
          f:to:
            .: {}
            f:kind: {}
            f:name: {}
        f:runPolicy: {}
        f:source:
          f:contextDir: {}
          f:git:
            .: {}
            f:ref: {}
            f:uri: {}
          f:type: {}
        f:strategy:
          f:dockerStrategy:
            .: {}
            f:from:
              .: {}
              f:kind: {}
              f:name: {}
              f:namespace: {}
          f:type: {}
    manager: oc
    operation: Update
    time: "2021-07-19T08:02:20Z"
  - apiVersion: build.openshift.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:spec:
        f:triggers: {}
      f:status:
        f:lastVersion: {}
    manager: openshift-apiserver
    operation: Update
    time: "2021-07-19T08:02:20Z"
  name: gotest
  namespace: tomotag-test02
  resourceVersion: "73778783"
  selfLink: /apis/build.openshift.io/v1/namespaces/tomotag-test02/buildconfigs/gotest
  uid: 3a39d468-69d0-4d11-b97b-01749f84e27b
spec:
  failedBuildsHistoryLimit: 5
  nodeSelector: null
  output:
    to:
      kind: ImageStreamTag
      name: gotest:latest
  postCommit: {}
  resources: {}
  runPolicy: Serial
  source:
    contextDir: gotest
    git:
      ref: main
      uri: https://github.com/tomotagwork/openshift-test
    sourceSecret:
      name: github
    type: Git
  strategy:
    dockerStrategy:
      from:
        kind: ImageStreamTag
        name: golang:latest
        namespace: openshift
    type: Docker
  successfulBuildsHistoryLimit: 5
  triggers:
  - github:
      secret: 5afitRLb7M5HKYfGdCl2
    type: GitHub
  - generic:
      secret: Vu6c4SNe0vs6E8f_alf5
    type: Generic
  - type: ConfigChange
  - imageChange:
      lastTriggeredImageID: image-registry.openshift-image-registry.svc:5000/openshift/golang@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
    type: ImageChange
status:
  lastVersion: 1
```

</div></details>

<details><summary><font color="blue">oc describe bc/gotest</font></summary><div>

```
Name:           gotest
Namespace:      tomotag-test02
Created:        21 minutes ago
Labels:         app=gotest
                app.kubernetes.io/component=gotest
                app.kubernetes.io/instance=gotest
Annotations:    openshift.io/generated-by=OpenShiftNewApp
Latest Version: 1

Strategy:       Docker
URL:            https://github.com/tomotagwork/openshift-test
Ref:            main
ContextDir:     gotest
Source Secret:  github
From Image:     ImageStreamTag openshift/golang:latest
Output to:      ImageStreamTag gotest:latest

Build Run Policy:       Serial
Triggered by:           Config, ImageChange
Webhook GitHub:
        URL:    https://c100-e.jp-tok.containers.cloud.ibm.com:30549/apis/build.openshift.io/v1/namespaces/tomotag-test02/buildconfigs/gotest/webhooks/<secret>/github
Webhook Generic:
        URL:            https://c100-e.jp-tok.containers.cloud.ibm.com:30549/apis/build.openshift.io/v1/namespaces/tomotag-test02/buildconfigs/gotest/webhooks/<secret>/generic
        AllowEnv:       false
Builds History Limit:
        Successful:     5
        Failed:         5

Build           Status          Duration        Creation Time
gotest-1        complete        1m47s           2021-07-19 17:02:20 +0900 JST

Events: <none>
```

</div></details>


## ImageStream

<details><summary><font color="blue">oc get is/golang -n openshift -o yaml</font></summary><div>

```yaml
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
  annotations:
    openshift.io/display-name: Go
    samples.operator.openshift.io/version: 4.5.40
  creationTimestamp: "2020-12-28T06:53:36Z"
  generation: 2
  labels:
    samples.operator.openshift.io/managed: "true"
  managedFields:
  - apiVersion: image.openshift.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/display-name: {}
          f:samples.operator.openshift.io/version: {}
        f:labels:
          .: {}
          f:samples.operator.openshift.io/managed: {}
      f:spec:
        f:tags:
          .: {}
          k:{"name":"1.11.5"}:
            .: {}
            f:annotations:
              .: {}
              f:description: {}
              f:iconClass: {}
              f:openshift.io/display-name: {}
              f:openshift.io/provider-display-name: {}
              f:sampleRepo: {}
              f:supports: {}
              f:tags: {}
            f:from:
              .: {}
              f:kind: {}
              f:name: {}
            f:generation: {}
            f:importPolicy: {}
            f:name: {}
            f:referencePolicy:
              .: {}
              f:type: {}
          k:{"name":"latest"}:
            .: {}
            f:annotations:
              .: {}
              f:description: {}
              f:iconClass: {}
              f:openshift.io/display-name: {}
              f:openshift.io/provider-display-name: {}
              f:sampleRepo: {}
              f:supports: {}
              f:tags: {}
            f:from:
              .: {}
              f:kind: {}
              f:name: {}
            f:generation: {}
            f:importPolicy: {}
            f:name: {}
            f:referencePolicy:
              .: {}
              f:type: {}
      f:status:
        f:dockerImageRepository: {}
    manager: cluster-samples-operator
    operation: Update
    time: "2021-06-29T16:47:14Z"
  name: golang
  namespace: openshift
  resourceVersion: "67347140"
  selfLink: /apis/image.openshift.io/v1/namespaces/openshift/imagestreams/golang
  uid: 1fb40447-2cfc-45d2-81e2-af312dbce3d4
spec:
  lookupPolicy:
    local: false
  tags:
  - annotations:
      description: |-
        Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

        WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
      iconClass: icon-go-gopher
      openshift.io/display-name: Go (1.11.5)
      openshift.io/provider-display-name: Red Hat, Inc.
      sampleRepo: https://github.com/sclorg/golang-ex.git
      supports: golang
      tags: builder,golang,go
    from:
      kind: DockerImage
      name: registry.redhat.io/devtools/go-toolset-rhel7:1.11.5
    generation: 2
    importPolicy: {}
    name: 1.11.5
    referencePolicy:
      type: Local
  - annotations:
      description: |-
        Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

        WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
      iconClass: icon-go-gopher
      openshift.io/display-name: Go (Latest)
      openshift.io/provider-display-name: Red Hat, Inc.
      sampleRepo: https://github.com/sclorg/golang-ex.git
      supports: golang
      tags: builder,golang,go
    from:
      kind: ImageStreamTag
      name: 1.11.5
    generation: 1
    importPolicy: {}
    name: latest
    referencePolicy:
      type: Local
status:
  dockerImageRepository: image-registry.openshift-image-registry.svc:5000/openshift/golang
  tags:
  - items:
    - created: "2020-12-28T06:54:27Z"
      dockerImageReference: registry.redhat.io/devtools/go-toolset-rhel7@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
      generation: 2
      image: sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
    tag: 1.11.5
  - items:
    - created: "2020-12-28T06:54:27Z"
      dockerImageReference: registry.redhat.io/devtools/go-toolset-rhel7@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
      generation: 2
      image: sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
    tag: latest
```

</div></details>


<details><summary><font color="blue">oc describe is/golang -n openshift</font></summary><div>

```
Name:                   golang
Namespace:              openshift
Created:                6 months ago
Labels:                 samples.operator.openshift.io/managed=true
Annotations:            openshift.io/display-name=Go
                        samples.operator.openshift.io/version=4.5.40
Image Repository:       image-registry.openshift-image-registry.svc:5000/openshift/golang
Image Lookup:           local=false
Unique Images:          1
Tags:                   2

1.11.5 (latest)
  tagged from registry.redhat.io/devtools/go-toolset-rhel7:1.11.5
    prefer registry pullthrough when referencing this tag

  Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
  Tags: builder, golang, go
  Supports: golang
  Example Repo: https://github.com/sclorg/golang-ex.git

  * registry.redhat.io/devtools/go-toolset-rhel7@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
      6 months ago
```

</div></details>

<details><summary><font color="blue">oc get is/gotest -o yaml</font></summary><div>

```yaml
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  creationTimestamp: "2021-07-19T08:02:20Z"
  generation: 1
  labels:
    app: gotest
    app.kubernetes.io/component: gotest
    app.kubernetes.io/instance: gotest
  managedFields:
  - apiVersion: image.openshift.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/generated-by: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/instance: {}
    manager: oc
    operation: Update
    time: "2021-07-19T08:02:20Z"
  name: gotest
  namespace: tomotag-test02
  resourceVersion: "73779201"
  selfLink: /apis/image.openshift.io/v1/namespaces/tomotag-test02/imagestreams/gotest
  uid: 74c902e5-c42d-4be6-aa96-225c146984b8
spec:
  lookupPolicy:
    local: false
status:
  dockerImageRepository: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest
  tags:
  - items:
    - created: "2021-07-19T08:04:08Z"
      dockerImageReference: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
      generation: 1
      image: sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    tag: latest
```

</div></details>


<details><summary><font color="blue">oc describe is/gotest</font></summary><div>

```
Name:                   gotest
Namespace:              tomotag-test02
Created:                31 minutes ago
Labels:                 app=gotest
                        app.kubernetes.io/component=gotest
                        app.kubernetes.io/instance=gotest
Annotations:            openshift.io/generated-by=OpenShiftNewApp
Image Repository:       image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest
Image Lookup:           local=false
Unique Images:          1
Tags:                   1

latest
  no spec tag

  * image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
      29 minutes ago
```

</div></details>

## ImageStreamTag

<details><summary><font color="blue">oc get istag/golang:latest -n openshift -o yaml</font></summary><div>

```yaml
apiVersion: image.openshift.io/v1
generation: 2
image:
  dockerImageLayers:
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606
    size: 75834225
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21
    size: 1576
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58
    size: 262532666
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03
    size: 348855340
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242
    size: 161469112
  dockerImageManifestMediaType: application/vnd.docker.distribution.manifest.v2+json
  dockerImageMetadata:
    Architecture: amd64
    Config:
      Cmd:
      - /bin/sh
      - -c
      - $STI_SCRIPTS_PATH/usage
      Entrypoint:
      - container-entrypoint
      Env:
      - PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      - container=oci
      - SUMMARY=Platform for building and running Go 1.11.5 based applications
      - DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
      - STI_SCRIPTS_URL=image:///usr/libexec/s2i
      - STI_SCRIPTS_PATH=/usr/libexec/s2i
      - APP_ROOT=/opt/app-root
      - HOME=/opt/app-root/src
      - PLATFORM=el7
      - BASH_ENV=/opt/app-root/etc/scl_enable
      - ENV=/opt/app-root/etc/scl_enable
      - PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
      - NODEJS_SCL=rh-nodejs10
      - NAME=golang
      - VERSION=1.11.5
      Hostname: a2986d461f97
      Image: 29f4fcf01d36ee3384d2e6d2cee50842cd62b077e5460291ef456fe4ad8e2c8f
      Labels:
        architecture: x86_64
        authoritative-source-url: registry.access.redhat.com
        build-date: 2019-06-28T17:01:37.424877
        com.redhat.build-host: cpt-1001.osbs.prod.upshift.rdu2.redhat.com
        com.redhat.component: go-toolset-container
        com.redhat.license_terms: https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel
        description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        distribution-scope: public
        io.k8s.description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        io.k8s.display-name: Go 1.11.5
        io.openshift.s2i.scripts-url: image:///usr/libexec/s2i
        io.openshift.tags: builder,golang,golang111,rh-golang111,go
        io.s2i.scripts-url: image:///usr/libexec/s2i
        name: devtools/go-toolset-rhel7
        release: "18.1561731145"
        summary: Platform for building and running Go 1.11.5 based applications
        url: https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145
        vcs-ref: fa805422e711bef17cf49441b80a18a5445e4fda
        vcs-type: git
        vendor: Red Hat, Inc.
        version: 1.11.5
      User: "1001"
      WorkingDir: /opt/app-root/src
    ContainerConfig:
      Cmd:
      - /bin/sh
      - -c
      - '#(nop) '
      - USER [1001]
      Entrypoint:
      - container-entrypoint
      Env:
      - PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      - container=oci
      - SUMMARY=Platform for building and running Go 1.11.5 based applications
      - DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
      - STI_SCRIPTS_URL=image:///usr/libexec/s2i
      - STI_SCRIPTS_PATH=/usr/libexec/s2i
      - APP_ROOT=/opt/app-root
      - HOME=/opt/app-root/src
      - PLATFORM=el7
      - BASH_ENV=/opt/app-root/etc/scl_enable
      - ENV=/opt/app-root/etc/scl_enable
      - PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
      - NODEJS_SCL=rh-nodejs10
      - NAME=golang
      - VERSION=1.11.5
      Hostname: a2986d461f97
      Image: sha256:07f36c322dfa067e4b1e2b8559d57af286f4e7931a124f08f12004dac7061a54
      Labels:
        architecture: x86_64
        authoritative-source-url: registry.access.redhat.com
        build-date: 2019-06-28T17:01:37.424877
        com.redhat.build-host: cpt-1001.osbs.prod.upshift.rdu2.redhat.com
        com.redhat.component: go-toolset-container
        com.redhat.license_terms: https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel
        description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        distribution-scope: public
        io.k8s.description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        io.k8s.display-name: Go 1.11.5
        io.openshift.s2i.scripts-url: image:///usr/libexec/s2i
        io.openshift.tags: builder,golang,golang111,rh-golang111,go
        io.s2i.scripts-url: image:///usr/libexec/s2i
        name: devtools/go-toolset-rhel7
        release: "18.1561731145"
        summary: Platform for building and running Go 1.11.5 based applications
        url: https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145
        vcs-ref: fa805422e711bef17cf49441b80a18a5445e4fda
        vcs-type: git
        vendor: Red Hat, Inc.
        version: 1.11.5
      User: "1001"
      WorkingDir: /opt/app-root/src
    Created: "2019-06-28T17:03:25Z"
    DockerVersion: 1.13.1
    Id: sha256:2b397b46f0d6f8c0703e32687427247b582896d56ec5130c4ddc64871e49e5ac
    Size: 848699400
    apiVersion: "1.0"
    kind: DockerImage
  dockerImageMetadataVersion: "1.0"
  dockerImageReference: image-registry.openshift-image-registry.svc:5000/openshift/golang@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
  metadata:
    annotations:
      description: |-
        Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

        WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
      iconClass: icon-go-gopher
      image.openshift.io/dockerLayersOrder: ascending
      openshift.io/display-name: Go (Latest)
      openshift.io/provider-display-name: Red Hat, Inc.
      sampleRepo: https://github.com/sclorg/golang-ex.git
      supports: golang
      tags: builder,golang,go
    creationTimestamp: "2020-12-28T06:54:27Z"
    name: sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
    resourceVersion: "13461"
    uid: 96c4259d-a557-4be2-8976-351513088e84
kind: ImageStreamTag
lookupPolicy:
  local: false
metadata:
  annotations:
    description: |-
      Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

      WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
    iconClass: icon-go-gopher
    openshift.io/display-name: Go (Latest)
    openshift.io/provider-display-name: Red Hat, Inc.
    sampleRepo: https://github.com/sclorg/golang-ex.git
    supports: golang
    tags: builder,golang,go
  creationTimestamp: "2020-12-28T06:54:27Z"
  labels:
    samples.operator.openshift.io/managed: "true"
  name: golang:latest
  namespace: openshift
  resourceVersion: "67347140"
  selfLink: /apis/image.openshift.io/v1/namespaces/openshift/imagestreamtags/golang:latest
  uid: 1fb40447-2cfc-45d2-81e2-af312dbce3d4
tag:
  annotations:
    description: |-
      Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

      WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
    iconClass: icon-go-gopher
    openshift.io/display-name: Go (Latest)
    openshift.io/provider-display-name: Red Hat, Inc.
    sampleRepo: https://github.com/sclorg/golang-ex.git
    supports: golang
    tags: builder,golang,go
  from:
    kind: ImageStreamTag
    name: 1.11.5
  generation: 1
  importPolicy: {}
  name: latest
  referencePolicy:
    type: Local
```

</div></details>

<details><summary><font color="blue">oc describe istag/golang:latest -n openshift</font></summary><div>

```
Image Name:     sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
Docker Image:   image-registry.openshift-image-registry.svc:5000/openshift/golang@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
Name:           sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
Created:        6 months ago
Description:    Build and run Go applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.

                WARNING: By selecting this tag, your application will automatically update to use the latest version of Go available on OpenShift, including major version updates.
Annotations:    iconClass=icon-go-gopher
                image.openshift.io/dockerLayersOrder=ascending
                openshift.io/display-name=Go (Latest)
                openshift.io/provider-display-name=Red Hat, Inc.
                sampleRepo=https://github.com/sclorg/golang-ex.git
                supports=golang
                tags=builder,golang,go
Image Size:     848.7MB in 5 layers
Layers:         75.83MB sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606
                1.576kB sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21
                262.5MB sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58
                348.9MB sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03
                161.5MB sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242
Image Created:  2 years ago
Author:         <none>
Arch:           amd64
Entrypoint:     container-entrypoint
Command:        /bin/sh -c $STI_SCRIPTS_PATH/usage
Working Dir:    /opt/app-root/src
User:           1001
Exposes Ports:  <none>
Docker Labels:  architecture=x86_64
                authoritative-source-url=registry.access.redhat.com
                build-date=2019-06-28T17:01:37.424877
                com.redhat.build-host=cpt-1001.osbs.prod.upshift.rdu2.redhat.com
                com.redhat.component=go-toolset-container
                com.redhat.license_terms=https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel
                description=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
                distribution-scope=public
                io.k8s.description=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
                io.k8s.display-name=Go 1.11.5
                io.openshift.s2i.scripts-url=image:///usr/libexec/s2i
                io.openshift.tags=builder,golang,golang111,rh-golang111,go
                io.s2i.scripts-url=image:///usr/libexec/s2i
                name=devtools/go-toolset-rhel7
                release=18.1561731145
                summary=Platform for building and running Go 1.11.5 based applications
                url=https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145
                vcs-ref=fa805422e711bef17cf49441b80a18a5445e4fda
                vcs-type=git
                vendor=Red Hat, Inc.
                version=1.11.5
Environment:    PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                container=oci
                SUMMARY=Platform for building and running Go 1.11.5 based applications
                DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
                STI_SCRIPTS_URL=image:///usr/libexec/s2i
                STI_SCRIPTS_PATH=/usr/libexec/s2i
                APP_ROOT=/opt/app-root
                HOME=/opt/app-root/src
                PLATFORM=el7
                BASH_ENV=/opt/app-root/etc/scl_enable
                ENV=/opt/app-root/etc/scl_enable
                PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
                NODEJS_SCL=rh-nodejs10
                NAME=golang
                VERSION=1.11.5
```

</div></details>

<details><summary><font color="blue">oc get istag/gotest:latest -o yaml</font></summary><div>

```yaml
apiVersion: image.openshift.io/v1
generation: 1
image:
  dockerImageLayers:
  - mediaType: application/vnd.docker.image.rootfs.diff.tar
    name: sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606
    size: 75834225
  - mediaType: application/vnd.docker.image.rootfs.diff.tar
    name: sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21
    size: 1576
  - mediaType: application/vnd.docker.image.rootfs.diff.tar
    name: sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58
    size: 262532666
  - mediaType: application/vnd.docker.image.rootfs.diff.tar
    name: sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03
    size: 348855340
  - mediaType: application/vnd.docker.image.rootfs.diff.tar
    name: sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242
    size: 161469112
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:9fc61af83bfaa157a19efd233c8882562d984024898ec5973ffc13cd78ffc411
    size: 229
  - mediaType: application/vnd.docker.image.rootfs.diff.tar.gzip
    name: sha256:bfe65b4d02120f13b2f49e7d477c55628892777cb44938ad8c1f7785e1176aa7
    size: 413
  dockerImageManifestMediaType: application/vnd.docker.distribution.manifest.v2+json
  dockerImageMetadata:
    Architecture: amd64
    Config:
      Cmd:
      - /bin/sh
      - -c
      - export GOCACHE=/go/test;go run /go/test/main.go
      Entrypoint:
      - container-entrypoint
      Env:
      - PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      - container=oci
      - SUMMARY=Platform for building and running Go 1.11.5 based applications
      - DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
      - STI_SCRIPTS_URL=image:///usr/libexec/s2i
      - STI_SCRIPTS_PATH=/usr/libexec/s2i
      - APP_ROOT=/opt/app-root
      - HOME=/opt/app-root/src
      - PLATFORM=el7
      - BASH_ENV=/opt/app-root/etc/scl_enable
      - ENV=/opt/app-root/etc/scl_enable
      - PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
      - NODEJS_SCL=rh-nodejs10
      - NAME=golang
      - VERSION=1.11.5
      - OPENSHIFT_BUILD_NAME=gotest-1
      - OPENSHIFT_BUILD_NAMESPACE=tomotag-test02
      - OPENSHIFT_BUILD_SOURCE=https://github.com/tomotagwork/openshift-test
      - OPENSHIFT_BUILD_REFERENCE=main
      - OPENSHIFT_BUILD_COMMIT=1062eb687855f93d36e957a66f32dd7265fb38d8
      ExposedPorts:
        8080/tcp: {}
      Hostname: a2986d461f97
      Image: 29f4fcf01d36ee3384d2e6d2cee50842cd62b077e5460291ef456fe4ad8e2c8f
      Labels:
        architecture: x86_64
        authoritative-source-url: registry.access.redhat.com
        build-date: 2019-06-28T17:01:37.424877
        com.redhat.build-host: cpt-1001.osbs.prod.upshift.rdu2.redhat.com
        com.redhat.component: go-toolset-container
        com.redhat.license_terms: https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel
        description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        distribution-scope: public
        io.k8s.description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        io.k8s.display-name: Go 1.11.5
        io.openshift.build.commit.author: Tomohiro Taguchi \u003ctomotagwork@gmail.com\u003e
        io.openshift.build.commit.date: Mon Jul 19 13:29:44 2021 +0900
        io.openshift.build.commit.id: 1062eb687855f93d36e957a66f32dd7265fb38d8
        io.openshift.build.commit.message: modify Dockerfile
        io.openshift.build.commit.ref: main
        io.openshift.build.name: gotest-1
        io.openshift.build.namespace: tomotag-test02
        io.openshift.build.source-context-dir: gotest
        io.openshift.s2i.scripts-url: image:///usr/libexec/s2i
        io.openshift.tags: builder,golang,golang111,rh-golang111,go
        io.s2i.scripts-url: image:///usr/libexec/s2i
        name: devtools/go-toolset-rhel7
        release: "18.1561731145"
        summary: Platform for building and running Go 1.11.5 based applications
        url: https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145
        vcs-ref: fa805422e711bef17cf49441b80a18a5445e4fda
        vcs-type: git
        vendor: Red Hat, Inc.
        version: 1.11.5
      User: "1001"
      WorkingDir: /go
    Container: 1e0fc88630a750bbbca502234624e34dbba64b0157e6a555e3fad1df18683072
    ContainerConfig:
      Cmd:
      - /bin/sh
      - -c
      - export GOCACHE=/go/test;go run /go/test/main.go
      Entrypoint:
      - container-entrypoint
      Env:
      - PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      - container=oci
      - SUMMARY=Platform for building and running Go 1.11.5 based applications
      - DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
      - STI_SCRIPTS_URL=image:///usr/libexec/s2i
      - STI_SCRIPTS_PATH=/usr/libexec/s2i
      - APP_ROOT=/opt/app-root
      - HOME=/opt/app-root/src
      - PLATFORM=el7
      - BASH_ENV=/opt/app-root/etc/scl_enable
      - ENV=/opt/app-root/etc/scl_enable
      - PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
      - NODEJS_SCL=rh-nodejs10
      - NAME=golang
      - VERSION=1.11.5
      - OPENSHIFT_BUILD_NAME=gotest-1
      - OPENSHIFT_BUILD_NAMESPACE=tomotag-test02
      - OPENSHIFT_BUILD_SOURCE=https://github.com/tomotagwork/openshift-test
      - OPENSHIFT_BUILD_REFERENCE=main
      - OPENSHIFT_BUILD_COMMIT=1062eb687855f93d36e957a66f32dd7265fb38d8
      ExposedPorts:
        8080/tcp: {}
      Hostname: a2986d461f97
      Image: 29f4fcf01d36ee3384d2e6d2cee50842cd62b077e5460291ef456fe4ad8e2c8f
      Labels:
        architecture: x86_64
        authoritative-source-url: registry.access.redhat.com
        build-date: 2019-06-28T17:01:37.424877
        com.redhat.build-host: cpt-1001.osbs.prod.upshift.rdu2.redhat.com
        com.redhat.component: go-toolset-container
        com.redhat.license_terms: https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel
        description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        distribution-scope: public
        io.k8s.description: Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
        io.k8s.display-name: Go 1.11.5
        io.openshift.build.commit.author: Tomohiro Taguchi \u003ctomotagwork@gmail.com\u003e
        io.openshift.build.commit.date: Mon Jul 19 13:29:44 2021 +0900
        io.openshift.build.commit.id: 1062eb687855f93d36e957a66f32dd7265fb38d8
        io.openshift.build.commit.message: modify Dockerfile
        io.openshift.build.commit.ref: main
        io.openshift.build.name: gotest-1
        io.openshift.build.namespace: tomotag-test02
        io.openshift.build.source-context-dir: gotest
        io.openshift.s2i.scripts-url: image:///usr/libexec/s2i
        io.openshift.tags: builder,golang,golang111,rh-golang111,go
        io.s2i.scripts-url: image:///usr/libexec/s2i
        name: devtools/go-toolset-rhel7
        release: "18.1561731145"
        summary: Platform for building and running Go 1.11.5 based applications
        url: https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145
        vcs-ref: fa805422e711bef17cf49441b80a18a5445e4fda
        vcs-type: git
        vendor: Red Hat, Inc.
        version: 1.11.5
      User: "1001"
      WorkingDir: /go
    Created: "2021-07-19T08:04:05Z"
    Id: sha256:3f6c7a3122f7eca918b1f56884ba5de4b37d4661938aa28475beceae184c32a5
    Parent: sha256:980153227400bd469ca5126830d7b415fa5916979b5fd0a8ce771d25c41bd9f2
    Size: 848703484
    apiVersion: "1.0"
    kind: DockerImage
  dockerImageMetadataVersion: "1.0"
  dockerImageReference: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
  metadata:
    annotations:
      image.openshift.io/dockerLayersOrder: ascending
      image.openshift.io/manifestBlobStored: "true"
      openshift.io/image.managed: "true"
    creationTimestamp: "2021-07-19T08:04:08Z"
    name: sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    resourceVersion: "73779200"
    uid: 9898586e-d439-4e23-b638-3fc11e04d785
kind: ImageStreamTag
lookupPolicy:
  local: false
metadata:
  creationTimestamp: "2021-07-19T08:04:08Z"
  labels:
    app: gotest
    app.kubernetes.io/component: gotest
    app.kubernetes.io/instance: gotest
  name: gotest:latest
  namespace: tomotag-test02
  resourceVersion: "73779201"
  selfLink: /apis/image.openshift.io/v1/namespaces/tomotag-test02/imagestreamtags/gotest:latest
  uid: 74c902e5-c42d-4be6-aa96-225c146984b8
tag: null
```

</div></details>

<details><summary><font color="blue">oc describe istag/gotest:latest</font></summary><div>

```
Image Name:     sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
Docker Image:   image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
Name:           sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
Created:        32 minutes ago
Annotations:    image.openshift.io/dockerLayersOrder=ascending
                image.openshift.io/manifestBlobStored=true
                openshift.io/image.managed=true
Image Size:     848.7MB in 7 layers
Layers:         75.83MB sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606
                1.576kB sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21
                262.5MB sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58
                348.9MB sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03
                161.5MB sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242
                229B    sha256:9fc61af83bfaa157a19efd233c8882562d984024898ec5973ffc13cd78ffc411
                413B    sha256:bfe65b4d02120f13b2f49e7d477c55628892777cb44938ad8c1f7785e1176aa7
Image Created:  32 minutes ago
Author:         <none>
Arch:           amd64
Entrypoint:     container-entrypoint
Command:        /bin/sh -c export GOCACHE=/go/test;go run /go/test/main.go
Working Dir:    /go
User:           1001
Exposes Ports:  8080/tcp
Docker Labels:  architecture=x86_64
                authoritative-source-url=registry.access.redhat.com
                build-date=2019-06-28T17:01:37.424877
                com.redhat.build-host=cpt-1001.osbs.prod.upshift.rdu2.redhat.com
                com.redhat.component=go-toolset-container
                com.redhat.license_terms=https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel
                description=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
                distribution-scope=public
                io.k8s.description=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
                io.k8s.display-name=Go 1.11.5
                io.openshift.build.commit.author=Tomohiro Taguchi \u003ctomotagwork@gmail.com\u003e
                io.openshift.build.commit.date=Mon Jul 19 13:29:44 2021 +0900
                io.openshift.build.commit.id=1062eb687855f93d36e957a66f32dd7265fb38d8
                io.openshift.build.commit.message=modify Dockerfile
                io.openshift.build.commit.ref=main
                io.openshift.build.name=gotest-1
                io.openshift.build.namespace=tomotag-test02
                io.openshift.build.source-context-dir=gotest
                io.openshift.s2i.scripts-url=image:///usr/libexec/s2i
                io.openshift.tags=builder,golang,golang111,rh-golang111,go
                io.s2i.scripts-url=image:///usr/libexec/s2i
                name=devtools/go-toolset-rhel7
                release=18.1561731145
                summary=Platform for building and running Go 1.11.5 based applications
                url=https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145
                vcs-ref=fa805422e711bef17cf49441b80a18a5445e4fda
                vcs-type=git
                vendor=Red Hat, Inc.
                version=1.11.5
Environment:    PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                container=oci
                SUMMARY=Platform for building and running Go 1.11.5 based applications
                DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.
                STI_SCRIPTS_URL=image:///usr/libexec/s2i
                STI_SCRIPTS_PATH=/usr/libexec/s2i
                APP_ROOT=/opt/app-root
                HOME=/opt/app-root/src
                PLATFORM=el7
                BASH_ENV=/opt/app-root/etc/scl_enable
                ENV=/opt/app-root/etc/scl_enable
                PROMPT_COMMAND=. /opt/app-root/etc/scl_enable
                NODEJS_SCL=rh-nodejs10
                NAME=golang
                VERSION=1.11.5
                OPENSHIFT_BUILD_NAME=gotest-1
                OPENSHIFT_BUILD_NAMESPACE=tomotag-test02
                OPENSHIFT_BUILD_SOURCE=https://github.com/tomotagwork/openshift-test
                OPENSHIFT_BUILD_REFERENCE=main
                OPENSHIFT_BUILD_COMMIT=1062eb687855f93d36e957a66f32dd7265fb38d8
```

</div></details>


## DeploymentConfig

<details><summary><font color="blue">oc get dc/gotest -o yaml</font></summary><div>

```yaml
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  creationTimestamp: "2021-07-19T08:02:20Z"
  generation: 2
  labels:
    app: gotest
    app.kubernetes.io/component: gotest
    app.kubernetes.io/instance: gotest
  managedFields:
  - apiVersion: apps.openshift.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/generated-by: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/instance: {}
      f:spec:
        f:replicas: {}
        f:selector:
          .: {}
          f:deploymentconfig: {}
        f:strategy:
          f:activeDeadlineSeconds: {}
          f:rollingParams:
            .: {}
            f:intervalSeconds: {}
            f:maxSurge: {}
            f:maxUnavailable: {}
            f:timeoutSeconds: {}
            f:updatePeriodSeconds: {}
          f:type: {}
        f:template:
          .: {}
          f:metadata:
            .: {}
            f:annotations:
              .: {}
              f:openshift.io/generated-by: {}
            f:creationTimestamp: {}
            f:labels:
              .: {}
              f:deploymentconfig: {}
          f:spec:
            .: {}
            f:containers:
              .: {}
              k:{"name":"gotest"}:
                .: {}
                f:imagePullPolicy: {}
                f:name: {}
                f:ports:
                  .: {}
                  k:{"containerPort":8080,"protocol":"TCP"}:
                    .: {}
                    f:containerPort: {}
                    f:protocol: {}
                f:resources: {}
                f:terminationMessagePath: {}
                f:terminationMessagePolicy: {}
            f:dnsPolicy: {}
            f:restartPolicy: {}
            f:schedulerName: {}
            f:securityContext: {}
            f:terminationGracePeriodSeconds: {}
    manager: oc
    operation: Update
    time: "2021-07-19T08:02:20Z"
  - apiVersion: apps.openshift.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:spec:
        f:template:
          f:spec:
            f:containers:
              k:{"name":"gotest"}:
                f:image: {}
        f:triggers: {}
      f:status:
        f:availableReplicas: {}
        f:conditions:
          .: {}
          k:{"type":"Available"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:status: {}
            f:type: {}
          k:{"type":"Progressing"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
        f:details:
          .: {}
          f:causes: {}
          f:message: {}
        f:latestVersion: {}
        f:observedGeneration: {}
        f:readyReplicas: {}
        f:replicas: {}
        f:unavailableReplicas: {}
        f:updatedReplicas: {}
    manager: openshift-controller-manager
    operation: Update
    time: "2021-07-19T08:04:17Z"
  name: gotest
  namespace: tomotag-test02
  resourceVersion: "73779293"
  selfLink: /apis/apps.openshift.io/v1/namespaces/tomotag-test02/deploymentconfigs/gotest
  uid: 2818a1b2-294a-49d1-8ad5-6d38fac401d5
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    deploymentconfig: gotest
  strategy:
    activeDeadlineSeconds: 21600
    resources: {}
    rollingParams:
      intervalSeconds: 1
      maxSurge: 25%
      maxUnavailable: 25%
      timeoutSeconds: 600
      updatePeriodSeconds: 1
    type: Rolling
  template:
    metadata:
      annotations:
        openshift.io/generated-by: OpenShiftNewApp
      creationTimestamp: null
      labels:
        deploymentconfig: gotest
    spec:
      containers:
      - image: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
        imagePullPolicy: Always
        name: gotest
        ports:
        - containerPort: 8080
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
  test: false
  triggers:
  - type: ConfigChange
  - imageChangeParams:
      automatic: true
      containerNames:
      - gotest
      from:
        kind: ImageStreamTag
        name: gotest:latest
        namespace: tomotag-test02
      lastTriggeredImage: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    type: ImageChange
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2021-07-19T08:04:16Z"
    lastUpdateTime: "2021-07-19T08:04:16Z"
    message: Deployment config has minimum availability.
    status: "True"
    type: Available
  - lastTransitionTime: "2021-07-19T08:04:12Z"
    lastUpdateTime: "2021-07-19T08:04:17Z"
    message: replication controller "gotest-1" successfully rolled out
    reason: NewReplicationControllerAvailable
    status: "True"
    type: Progressing
  details:
    causes:
    - type: ConfigChange
    message: config change
  latestVersion: 1
  observedGeneration: 2
  readyReplicas: 1
  replicas: 1
  unavailableReplicas: 0
  updatedReplicas: 1
```

</div></details>

<details><summary><font color="blue">oc describe dc/gotest</font></summary><div>

```
Name:           gotest
Namespace:      tomotag-test02
Created:        37 minutes ago
Labels:         app=gotest
                app.kubernetes.io/component=gotest
                app.kubernetes.io/instance=gotest
Annotations:    openshift.io/generated-by=OpenShiftNewApp
Latest Version: 1
Selector:       deploymentconfig=gotest
Replicas:       1
Triggers:       Config, Image(gotest@latest, auto=true)
Strategy:       Rolling
Template:
Pod Template:
  Labels:       deploymentconfig=gotest
  Annotations:  openshift.io/generated-by: OpenShiftNewApp
  Containers:
   gotest:
    Image:              image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    Port:               8080/TCP
    Host Port:          0/TCP
    Environment:        <none>
    Mounts:             <none>
  Volumes:              <none>

Deployment #1 (latest):
        Name:           gotest-1
        Created:        35 minutes ago
        Status:         Complete
        Replicas:       1 current / 1 desired
        Selector:       deployment=gotest-1,deploymentconfig=gotest
        Labels:         app.kubernetes.io/component=gotest,app.kubernetes.io/instance=gotest,app=gotest,openshift.io/deployment-config.name=gotest
        Pods Status:    1 Running / 0 Waiting / 0 Succeeded / 0 Failed

Events:
  Type          Reason                  Age     From                            Message
  ----          ------                  ----    ----                            -------
  Normal        DeploymentCreated       35m     deploymentconfig-controller     Created new replication controller "gotest-1" for version 1
```

</div></details>

## ReplicationController

<details><summary><font color="blue">oc get rc/gotest-1 -o yaml</font></summary><div>

```yaml
apiVersion: v1
kind: ReplicationController
metadata:
  annotations:
    openshift.io/deployer-pod.completed-at: 2021-07-19 08:04:16 +0000 UTC
    openshift.io/deployer-pod.created-at: 2021-07-19 08:04:09 +0000 UTC
    openshift.io/deployer-pod.name: gotest-1-deploy
    openshift.io/deployment-config.latest-version: "1"
    openshift.io/deployment-config.name: gotest
    openshift.io/deployment.phase: Complete
    openshift.io/deployment.replicas: "1"
    openshift.io/deployment.status-reason: config change
    openshift.io/encoded-deployment-config: |
      {"kind":"DeploymentConfig","apiVersion":"apps.openshift.io/v1","metadata":{"name":"gotest","namespace":"tomotag-test02","selfLink":"/apis/apps.openshift.io/v1/namespaces/tomotag-test02/deploymentconfigs/gotest","uid":"2818a1b2-294a-49d1-8ad5-6d38fac401d5","resourceVersion":"73779207","generation":2,"creationTimestamp":"2021-07-19T08:02:20Z","labels":{"app":"gotest","app.kubernetes.io/component":"gotest","app.kubernetes.io/instance":"gotest"},"annotations":{"openshift.io/generated-by":"OpenShiftNewApp"},"managedFields":[{"manager":"oc","operation":"Update","apiVersion":"apps.openshift.io/v1","time":"2021-07-19T08:02:20Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:openshift.io/generated-by":{}},"f:labels":{".":{},"f:app":{},"f:app.kubernetes.io/component":{},"f:app.kubernetes.io/instance":{}}},"f:spec":{"f:replicas":{},"f:selector":{".":{},"f:deploymentconfig":{}},"f:strategy":{"f:activeDeadlineSeconds":{},"f:rollingParams":{".":{},"f:intervalSeconds":{},"f:maxSurge":{},"f:maxUnavailable":{},"f:timeoutSeconds":{},"f:updatePeriodSeconds":{}},"f:type":{}},"f:template":{".":{},"f:metadata":{".":{},"f:annotations":{".":{},"f:openshift.io/generated-by":{}},"f:creationTimestamp":{},"f:labels":{".":{},"f:deploymentconfig":{}}},"f:spec":{".":{},"f:containers":{".":{},"k:{\"name\":\"gotest\"}":{".":{},"f:imagePullPolicy":{},"f:name":{},"f:ports":{".":{},"k:{\"containerPort\":8080,\"protocol\":\"TCP\"}":{".":{},"f:containerPort":{},"f:protocol":{}}},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{}}},"f:dnsPolicy":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{}}}}}},{"manager":"openshift-controller-manager","operation":"Update","apiVersion":"apps.openshift.io/v1","time":"2021-07-19T08:04:08Z","fieldsType":"FieldsV1","fieldsV1":{"f:spec":{"f:template":{"f:spec":{"f:containers":{"k:{\"name\":\"gotest\"}":{"f:image":{}}}}},"f:triggers":{}},"f:status":{"f:conditions":{".":{},"k:{\"type\":\"Available\"}":{".":{},"f:lastTransitionTime":{},"f:lastUpdateTime":{},"f:message":{},"f:status":{},"f:type":{}}},"f:details":{".":{},"f:causes":{},"f:message":{}},"f:latestVersion":{},"f:observedGeneration":{}}}}]},"spec":{"strategy":{"type":"Rolling","rollingParams":{"updatePeriodSeconds":1,"intervalSeconds":1,"timeoutSeconds":600,"maxUnavailable":"25%","maxSurge":"25%"},"resources":{},"activeDeadlineSeconds":21600},"triggers":[{"type":"ConfigChange"},{"type":"ImageChange","imageChangeParams":{"automatic":true,"containerNames":["gotest"],"from":{"kind":"ImageStreamTag","namespace":"tomotag-test02","name":"gotest:latest"},"lastTriggeredImage":"image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c"}}],"replicas":1,"revisionHistoryLimit":10,"test":false,"selector":{"deploymentconfig":"gotest"},"template":{"metadata":{"creationTimestamp":null,"labels":{"deploymentconfig":"gotest"},"annotations":{"openshift.io/generated-by":"OpenShiftNewApp"}},"spec":{"containers":[{"name":"gotest","image":"image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c","ports":[{"containerPort":8080,"protocol":"TCP"}],"resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"Always"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","securityContext":{},"schedulerName":"default-scheduler"}}},"status":{"latestVersion":1,"observedGeneration":1,"replicas":0,"updatedReplicas":0,"availableReplicas":0,"unavailableReplicas":0,"details":{"message":"config change","causes":[{"type":"ConfigChange"}]},"conditions":[{"type":"Available","status":"False","lastUpdateTime":"2021-07-19T08:02:20Z","lastTransitionTime":"2021-07-19T08:02:20Z","message":"Deployment config does not have minimum availability."}]}}
  creationTimestamp: "2021-07-19T08:04:08Z"
  generation: 2
  labels:
    app: gotest
    app.kubernetes.io/component: gotest
    app.kubernetes.io/instance: gotest
    openshift.io/deployment-config.name: gotest
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:availableReplicas: {}
        f:fullyLabeledReplicas: {}
        f:observedGeneration: {}
        f:readyReplicas: {}
        f:replicas: {}
    manager: kube-controller-manager
    operation: Update
    time: "2021-07-19T08:04:16Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/deployer-pod.completed-at: {}
          f:openshift.io/deployer-pod.created-at: {}
          f:openshift.io/deployer-pod.name: {}
          f:openshift.io/deployment-config.latest-version: {}
          f:openshift.io/deployment-config.name: {}
          f:openshift.io/deployment.phase: {}
          f:openshift.io/deployment.replicas: {}
          f:openshift.io/deployment.status-reason: {}
          f:openshift.io/encoded-deployment-config: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/instance: {}
          f:openshift.io/deployment-config.name: {}
        f:ownerReferences:
          .: {}
          k:{"uid":"2818a1b2-294a-49d1-8ad5-6d38fac401d5"}:
            .: {}
            f:apiVersion: {}
            f:blockOwnerDeletion: {}
            f:controller: {}
            f:kind: {}
            f:name: {}
            f:uid: {}
      f:spec:
        f:replicas: {}
        f:selector:
          .: {}
          f:deployment: {}
          f:deploymentconfig: {}
        f:template:
          .: {}
          f:metadata:
            .: {}
            f:annotations:
              .: {}
              f:openshift.io/deployment-config.latest-version: {}
              f:openshift.io/deployment-config.name: {}
              f:openshift.io/deployment.name: {}
              f:openshift.io/generated-by: {}
            f:creationTimestamp: {}
            f:labels:
              .: {}
              f:deployment: {}
              f:deploymentconfig: {}
          f:spec:
            .: {}
            f:containers:
              .: {}
              k:{"name":"gotest"}:
                .: {}
                f:image: {}
                f:imagePullPolicy: {}
                f:name: {}
                f:ports:
                  .: {}
                  k:{"containerPort":8080,"protocol":"TCP"}:
                    .: {}
                    f:containerPort: {}
                    f:protocol: {}
                f:resources: {}
                f:terminationMessagePath: {}
                f:terminationMessagePolicy: {}
            f:dnsPolicy: {}
            f:restartPolicy: {}
            f:schedulerName: {}
            f:securityContext: {}
            f:terminationGracePeriodSeconds: {}
    manager: openshift-controller-manager
    operation: Update
    time: "2021-07-19T08:04:17Z"
  name: gotest-1
  namespace: tomotag-test02
  ownerReferences:
  - apiVersion: apps.openshift.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: DeploymentConfig
    name: gotest
    uid: 2818a1b2-294a-49d1-8ad5-6d38fac401d5
  resourceVersion: "73779292"
  selfLink: /api/v1/namespaces/tomotag-test02/replicationcontrollers/gotest-1
  uid: 4fc51573-4601-4439-965a-01720b707bcf
spec:
  replicas: 1
  selector:
    deployment: gotest-1
    deploymentconfig: gotest
  template:
    metadata:
      annotations:
        openshift.io/deployment-config.latest-version: "1"
        openshift.io/deployment-config.name: gotest
        openshift.io/deployment.name: gotest-1
        openshift.io/generated-by: OpenShiftNewApp
      creationTimestamp: null
      labels:
        deployment: gotest-1
        deploymentconfig: gotest
    spec:
      containers:
      - image: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
        imagePullPolicy: Always
        name: gotest
        ports:
        - containerPort: 8080
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  fullyLabeledReplicas: 1
  observedGeneration: 2
  readyReplicas: 1
  replicas: 1
```

</div></details>

<details><summary><font color="blue">oc describe rc/gotest-1</font></summary><div>

```
Name:         gotest-1
Namespace:    tomotag-test02
Selector:     deployment=gotest-1,deploymentconfig=gotest
Labels:       app=gotest
              app.kubernetes.io/component=gotest
              app.kubernetes.io/instance=gotest
              openshift.io/deployment-config.name=gotest
Annotations:  openshift.io/deployer-pod.completed-at: 2021-07-19 08:04:16 +0000 UTC
              openshift.io/deployer-pod.created-at: 2021-07-19 08:04:09 +0000 UTC
              openshift.io/deployer-pod.name: gotest-1-deploy
              openshift.io/deployment-config.latest-version: 1
              openshift.io/deployment-config.name: gotest
              openshift.io/deployment.phase: Complete
              openshift.io/deployment.replicas: 1
              openshift.io/deployment.status-reason: config change
              openshift.io/encoded-deployment-config:
                {"kind":"DeploymentConfig","apiVersion":"apps.openshift.io/v1","metadata":{"name":"gotest","namespace":"tomotag-test02","selfLink":"/apis/...
Replicas:     1 current / 1 desired
Pods Status:  1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:       deployment=gotest-1
                deploymentconfig=gotest
  Annotations:  openshift.io/deployment-config.latest-version: 1
                openshift.io/deployment-config.name: gotest
                openshift.io/deployment.name: gotest-1
                openshift.io/generated-by: OpenShiftNewApp
  Containers:
   gotest:
    Image:        image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                    Message
  ----    ------            ----  ----                    -------
  Normal  SuccessfulCreate  36m   replication-controller  Created pod: gotest-1-2g7hz

```

</div></details>

## Pod


<details><summary><font color="blue">oc get pod/gotest-1-2g7hz -o yaml</font></summary><div>

```yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/podIP: 172.30.xx.xxx/32
    cni.projectcalico.org/podIPs: 172.30.xx.xxx/32
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "k8s-pod-network",
          "ips": [
              "172.30.xx.xxx"
          ],
          "default": true,
          "dns": {}
      }]
    k8s.v1.cni.cncf.io/networks-status: |-
      [{
          "name": "k8s-pod-network",
          "ips": [
              "172.30.xx.xxx"
          ],
          "default": true,
          "dns": {}
      }]
    openshift.io/deployment-config.latest-version: "1"
    openshift.io/deployment-config.name: gotest
    openshift.io/deployment.name: gotest-1
    openshift.io/generated-by: OpenShiftNewApp
    openshift.io/scc: dbb-scc
  creationTimestamp: "2021-07-19T08:04:12Z"
  generateName: gotest-1-
  labels:
    deployment: gotest-1
    deploymentconfig: gotest
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/deployment-config.latest-version: {}
          f:openshift.io/deployment-config.name: {}
          f:openshift.io/deployment.name: {}
          f:openshift.io/generated-by: {}
        f:generateName: {}
        f:labels:
          .: {}
          f:deployment: {}
          f:deploymentconfig: {}
        f:ownerReferences:
          .: {}
          k:{"uid":"4fc51573-4601-4439-965a-01720b707bcf"}:
            .: {}
            f:apiVersion: {}
            f:blockOwnerDeletion: {}
            f:controller: {}
            f:kind: {}
            f:name: {}
            f:uid: {}
      f:spec:
        f:containers:
          k:{"name":"gotest"}:
            .: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:name: {}
            f:ports:
              .: {}
              k:{"containerPort":8080,"protocol":"TCP"}:
                .: {}
                f:containerPort: {}
                f:protocol: {}
            f:resources: {}
            f:terminationMessagePath: {}
            f:terminationMessagePolicy: {}
        f:dnsPolicy: {}
        f:enableServiceLinks: {}
        f:restartPolicy: {}
        f:schedulerName: {}
        f:securityContext: {}
        f:terminationGracePeriodSeconds: {}
    manager: kube-controller-manager
    operation: Update
    time: "2021-07-19T08:04:12Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:cni.projectcalico.org/podIP: {}
          f:cni.projectcalico.org/podIPs: {}
    manager: calico
    operation: Update
    time: "2021-07-19T08:04:14Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:k8s.v1.cni.cncf.io/network-status: {}
          f:k8s.v1.cni.cncf.io/networks-status: {}
    manager: multus
    operation: Update
    time: "2021-07-19T08:04:14Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          k:{"type":"ContainersReady"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Initialized"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Ready"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
        f:containerStatuses: {}
        f:hostIP: {}
        f:phase: {}
        f:podIP: {}
        f:podIPs:
          .: {}
          k:{"ip":"172.30.xx.xxx"}:
            .: {}
            f:ip: {}
        f:startTime: {}
    manager: kubelet
    operation: Update
    time: "2021-07-19T08:04:16Z"
  name: gotest-1-2g7hz
  namespace: tomotag-test02
  ownerReferences:
  - apiVersion: v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicationController
    name: gotest-1
    uid: 4fc51573-4601-4439-965a-01720b707bcf
  resourceVersion: "73779282"
  selfLink: /api/v1/namespaces/tomotag-test02/pods/gotest-1-2g7hz
  uid: b10466ce-bc8b-4359-8188-8f85164cb5d6
spec:
  containers:
  - image: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    imagePullPolicy: Always
    name: gotest
    ports:
    - containerPort: 8080
      protocol: TCP
    resources: {}
    securityContext:
      capabilities:
        drop:
        - KILL
        - MKNOD
        - SETGID
        - SETUID
      runAsUser: 1000710000
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-lpxvp
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  imagePullSecrets:
  - name: default-dockercfg-59mpp
  nodeName: 10.129.xxx.xx
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext:
    fsGroup: 1000710000
    seLinuxOptions:
      level: s0:c27,c4
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-lpxvp
    secret:
      defaultMode: 420
      secretName: default-token-lpxvp
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2021-07-19T08:04:12Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2021-07-19T08:04:16Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2021-07-19T08:04:16Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2021-07-19T08:04:12Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: cri-o://b08987421882fe1cad0ba22df92d6d82e497b5766255200ffd5176939fea7086
    image: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    imageID: image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    lastState: {}
    name: gotest
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2021-07-19T08:04:16Z"
  hostIP: 10.129.xxx.xx
  phase: Running
  podIP: 172.30.xx.xxx
  podIPs:
  - ip: 172.30.xx.xxx
  qosClass: BestEffort
  startTime: "2021-07-19T08:04:12Z"
```

</div></details>


<details><summary><font color="blue">oc describe pod/gotest-1-2g7hz</font></summary><div>

```
Name:         gotest-1-2g7hz
Namespace:    tomotag-test02
Priority:     0
Node:         10.129.xxx.xx/10.129.xxx.xx
Start Time:   Mon, 19 Jul 2021 17:04:12 +0900
Labels:       deployment=gotest-1
              deploymentconfig=gotest
Annotations:  cni.projectcalico.org/podIP: 172.30.xx.xxx/32
              cni.projectcalico.org/podIPs: 172.30.xx.xxx/32
              k8s.v1.cni.cncf.io/network-status:
                [{
                    "name": "k8s-pod-network",
                    "ips": [
                        "172.30.xx.xxx"
                    ],
                    "default": true,
                    "dns": {}
                }]
              k8s.v1.cni.cncf.io/networks-status:
                [{
                    "name": "k8s-pod-network",
                    "ips": [
                        "172.30.xx.xxx"
                    ],
                    "default": true,
                    "dns": {}
                }]
              openshift.io/deployment-config.latest-version: 1
              openshift.io/deployment-config.name: gotest
              openshift.io/deployment.name: gotest-1
              openshift.io/generated-by: OpenShiftNewApp
              openshift.io/scc: dbb-scc
Status:       Running
IP:           172.30.xx.xxx
IPs:
  IP:           172.30.xx.xxx
Controlled By:  ReplicationController/gotest-1
Containers:
  gotest:
    Container ID:   cri-o://b08987421882fe1cad0ba22df92d6d82e497b5766255200ffd5176939fea7086
    Image:          image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    Image ID:       image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Mon, 19 Jul 2021 17:04:16 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-lpxvp (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-lpxvp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-lpxvp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason          Age   From               Message
  ----    ------          ----  ----               -------
  Normal  Scheduled       37m   default-scheduler  Successfully assigned tomotag-test02/gotest-1-2g7hz to 10.129.xxx.xx
  Normal  AddedInterface  37m   multus             Add eth0 [172.30.xx.xxx/32]
  Normal  Pulling         37m   kubelet            Pulling image "image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c"
  Normal  Pulled          37m   kubelet            Successfully pulled image "image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c"
  Normal  Created         37m   kubelet            Created container gotest
  Normal  Started         37m   kubelet            Started container gotest
```

</div></details>

## Service

<details><summary><font color="blue">oc get svc/gotest -o yaml</font></summary><div>

```yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  creationTimestamp: "2021-07-19T08:02:20Z"
  labels:
    app: gotest
    app.kubernetes.io/component: gotest
    app.kubernetes.io/instance: gotest
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:openshift.io/generated-by: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/instance: {}
      f:spec:
        f:ports:
          .: {}
          k:{"port":8080,"protocol":"TCP"}:
            .: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector:
          .: {}
          f:deploymentconfig: {}
        f:sessionAffinity: {}
        f:type: {}
    manager: oc
    operation: Update
    time: "2021-07-19T08:02:20Z"
  name: gotest
  namespace: tomotag-test02
  resourceVersion: "73778780"
  selfLink: /api/v1/namespaces/tomotag-test02/services/gotest
  uid: edef15de-4bc7-4be5-8b34-2c71cc7b0133
spec:
  clusterIP: 172.21.xx.xx
  ports:
  - name: 8080-tcp
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    deploymentconfig: gotest
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

```

</div></details>

<details><summary><font color="blue">oc describe svc/gotest</font></summary><div>

```
Name:              gotest
Namespace:         tomotag-test02
Labels:            app=gotest
                   app.kubernetes.io/component=gotest
                   app.kubernetes.io/instance=gotest
Annotations:       openshift.io/generated-by: OpenShiftNewApp
Selector:          deploymentconfig=gotest
Type:              ClusterIP
IP:                172.21.xx.xx
Port:              8080-tcp  8080/TCP
TargetPort:        8080/TCP
Endpoints:         172.30.xx.xxx:8080
Session Affinity:  None
Events:            <none>
```

</div></details>


# 補足

## BuildConfigについて

今回は "Dockerビルド"と呼ばれるやり方でコンテナをOpenShift上にデプロイしています。このやり方はDockerfileを元にOpneShift上でDockerイメージをビルドして、その結果作成されたイメージからコンテナ(Pod)を作成する流れとなります。
すなわち "ビルド"のプロセスが入ることが前回の記事の例と大きく異なる点です。このビルドの処理を管理するために、OpenShift上にBuildConfigというリソースが作成され、これを元にビルド処理が行われます。

oc new-appコマンド実行直後にBuildConfigのログを確認すると、Dockerイメージがビルドされる様子が確認できます。

<details><summary><font color="blue">Build時のログ</font></summary><div>

```
# oc logs bc/gotest -f
Cloning "https://github.com/tomotagwork/openshift-test" ...
        Commit: 1062eb687855f93d36e957a66f32dd7265fb38d8 (modify Dockerfile)
        Author: Tomohiro Taguchi <tomotagwork@gmail.com>
        Date:   Mon Jul 19 13:29:44 2021 +0900
Replaced Dockerfile FROM image golang:latest
Caching blobs under "/var/cache/blobs".

Pulling image image-registry.openshift-image-registry.svc:5000/openshift/golang@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7 ...
Getting image source signatures
Copying blob sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242
Copying blob sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606
Copying blob sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03
Copying blob sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21
Copying blob sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58
Copying config sha256:2b397b46f0d6f8c0703e32687427247b582896d56ec5130c4ddc64871e49e5ac
Writing manifest to image destination
Storing signatures
Adding transient rw bind mount for /run/secrets/rhsm
STEP 1: FROM image-registry.openshift-image-registry.svc:5000/openshift/golang@sha256:ebfed97ee40d3e38794a12c10587082173e90546d2cb97514d7e42457ec156b7
STEP 2: USER 1001
--> 20a32601c9d
STEP 3: WORKDIR /go
--> ae576cf4be7
STEP 4: RUN mkdir test
--> 4f21b6cf12b
STEP 5: COPY main.go test/
--> fb57df7f07c
STEP 6: EXPOSE 8080
--> 96f4b5cfaad
STEP 7: CMD export GOCACHE=/go/test;go run /go/test/main.go
--> 37e01de498e
STEP 8: ENV "OPENSHIFT_BUILD_NAME"="gotest-1" "OPENSHIFT_BUILD_NAMESPACE"="tomotag-test02" "OPENSHIFT_BUILD_SOURCE"="https://github.com/tomotagwork/openshift-test" "OPENSHIFT_BUILD_REFERENCE"="main" "OPENSHIFT_BUILD_COMMIT"="1062eb687855f93d36e957a66f32dd7265fb38d8"
--> 98015322740
STEP 9: LABEL "io.openshift.build.commit.author"="Tomohiro Taguchi \u003ctomotagwork@gmail.com\u003e" "io.openshift.build.commit.date"="Mon Jul 19 13:29:44 2021 +0900" "io.openshift.build.commit.id"="1062eb687855f93d36e957a66f32dd7265fb38d8" "io.openshift.build.commit.message"="modify Dockerfile" "io.openshift.build.commit.ref"="main" "io.openshift.build.name"="gotest-1" "io.openshift.build.namespace"="tomotag-test02" "io.openshift.build.source-context-dir"="gotest"
STEP 10: COMMIT temp.builder.openshift.io/tomotag-test02/gotest-1:cd5e00d2
--> 3f6c7a3122f
3f6c7a3122f7eca918b1f56884ba5de4b37d4661938aa28475beceae184c32a5

Pushing image image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest:latest ...
Getting image source signatures
Copying blob sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21
Copying blob sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58
Copying blob sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606
Copying blob sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242
Copying blob sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03
Copying blob sha256:62dbd4843ead3d0aed6e22028d28b89684d5d7f7f54077d24d8f4291b3c4d965
Copying blob sha256:21337fe38466c1d0159a08c7a03ceadcb35107202e94d857e7ab39b920d7fe6a
Copying config sha256:3f6c7a3122f7eca918b1f56884ba5de4b37d4661938aa28475beceae184c32a5
Writing manifest to image destination
Storing signatures
Successfully pushed image-registry.openshift-image-registry.svc:5000/tomotag-test02/gotest@sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c
Push successful
```

</div></details>

また、BuildConfigの定義を見てみると、元になるDockerイメージ、ビルド後のDockerイメージがそれぞれImageStreamTagとして管理されることが分かります。

```xxx:BuildConfig抜粋
...
Strategy:       Docker
URL:            https://github.com/tomotagwork/openshift-test
Ref:            main
ContextDir:     gotest
Source Secret:  github
From Image:     ImageStreamTag openshift/golang:latest
Output to:      ImageStreamTag gotest:latest
...
```

元にしているgolangは汎用的なものを使用しているので、元々OpenShift上に取り込まれていたようでネームスペース"openshift"以下のものが参照されています。

## OpenShift内部レジストリについて
ビルドされたDockerイメージは一旦OpenShift内にある内部レジストリに保管され、それを元にデプロイが行われることになります。
以下のようにPodmanコマンドなどで内部レジストリにアクセスしてイメージを確認することができます。

内部レジストリ用のrouteを確認

```
[root@Test05 ~]# oc get route -n openshift-image-registry
NAME             HOST/PORT                                                                PATH   SERVICES         PORT       TERMINATION   WILDCARD
image-registry   image-registry-openshift-image-registry.xxx.containers.appdomain.cloud          image-registry   5000-tcp   passthrough   None
```

ログイン

```
[root@Test05 ~]# podman login -u $(oc whoami) -p $(oc whoami -t) --tls-verify=false image-registry-openshift-image-registry.xxx.containers.appdomain.cloud
Login Succeeded!
```

Seach

```
[root@Test05 ~]# podman search --tls-verify=false image-registry-openshift-image-registry.xxx.containers.appdomain.cloud/tomotag-test02
INDEX             NAME                                                                                           DESCRIPTION   STARS   OFFICIAL   AUTOMATED
appdomain.cloud   image-registry-openshift-image-registry.xxx.containers.appdomain.cloud/tomotag-test02/gotest                 0
```

inspect

```
[root@Test05 ~]# skopeo inspect --tls-verify=false docker://image-registry-openshift-image-registry.xxx.containers.appdomain.cloud/tomotag-test02/gotest
{
    "Name": "image-registry-openshift-image-registry.xxx.containers.appdomain.cloud/tomotag-test02/gotest",
    "Digest": "sha256:599958e2a0f7fd8ca85438f0de258764bd56981d31323fc413be7e7304014f7c",
    "RepoTags": [
        "latest"
    ],
    "Created": "2021-07-19T08:04:05.603799985Z",
    "DockerVersion": "",
    "Labels": {
        "architecture": "x86_64",
        "authoritative-source-url": "registry.access.redhat.com",
        "build-date": "2019-06-28T17:01:37.424877",
        "com.redhat.build-host": "cpt-1001.osbs.prod.upshift.rdu2.redhat.com",
        "com.redhat.component": "go-toolset-container",
        "com.redhat.license_terms": "https://www.redhat.com/en/about/red-hat-end-user-license-agreements#rhel",
        "description": "Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.",
        "distribution-scope": "public",
        "io.k8s.description": "Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.",
        "io.k8s.display-name": "Go 1.11.5",
        "io.openshift.build.commit.author": "Tomohiro Taguchi \\u003ctomotagwork@gmail.com\\u003e",
        "io.openshift.build.commit.date": "Mon Jul 19 13:29:44 2021 +0900",
        "io.openshift.build.commit.id": "1062eb687855f93d36e957a66f32dd7265fb38d8",
        "io.openshift.build.commit.message": "modify Dockerfile",
        "io.openshift.build.commit.ref": "main",
        "io.openshift.build.name": "gotest-1",
        "io.openshift.build.namespace": "tomotag-test02",
        "io.openshift.build.source-context-dir": "gotest",
        "io.openshift.s2i.scripts-url": "image:///usr/libexec/s2i",
        "io.openshift.tags": "builder,golang,golang111,rh-golang111,go",
        "io.s2i.scripts-url": "image:///usr/libexec/s2i",
        "name": "devtools/go-toolset-rhel7",
        "release": "18.1561731145",
        "summary": "Platform for building and running Go 1.11.5 based applications",
        "url": "https://access.redhat.com/containers/#/registry.access.redhat.com/devtools/go-toolset-rhel7/images/1.11.5-18.1561731145",
        "vcs-ref": "fa805422e711bef17cf49441b80a18a5445e4fda",
        "vcs-type": "git",
        "vendor": "Red Hat, Inc.",
        "version": "1.11.5"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:506b188c0abe2ae3c1561bbff7ce50284de2a241eff5da6f528a3a024871c606",
        "sha256:a4d9907173f48ee257a0d6c451d530a2ec4088c38908b2ec48e3bc8dc66c6d21",
        "sha256:1d72f48b3d14f64a70c8eb92dff736969b510ddcf2da89fac058c5c03ba41c58",
        "sha256:dcc691b92f82cdd39913b5e0015b5b648656608e0b9768aa4907a2420a0bcd03",
        "sha256:8a2b38c5dec5b8ce451a3f3a29f9b52803c756a49beb04e04244c66c399ef242",
        "sha256:9fc61af83bfaa157a19efd233c8882562d984024898ec5973ffc13cd78ffc411",
        "sha256:bfe65b4d02120f13b2f49e7d477c55628892777cb44938ad8c1f7785e1176aa7"
    ],
    "Env": [
        "PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "container=oci",
        "SUMMARY=Platform for building and running Go 1.11.5 based applications",
        "DESCRIPTION=Go 1.11.5 available as a container is a base platform for building and running various Go 1.11.5 applications and frameworks. Go is an easy to learn, powerful, statically typed language in the C/C++ tradition with garbage collection, concurrent programming support, and memory safety features.",
        "STI_SCRIPTS_URL=image:///usr/libexec/s2i",
        "STI_SCRIPTS_PATH=/usr/libexec/s2i",
        "APP_ROOT=/opt/app-root",
        "HOME=/opt/app-root/src",
        "PLATFORM=el7",
        "BASH_ENV=/opt/app-root/etc/scl_enable",
        "ENV=/opt/app-root/etc/scl_enable",
        "PROMPT_COMMAND=. /opt/app-root/etc/scl_enable",
        "NODEJS_SCL=rh-nodejs10",
        "NAME=golang",
        "VERSION=1.11.5",
        "OPENSHIFT_BUILD_NAME=gotest-1",
        "OPENSHIFT_BUILD_NAMESPACE=tomotag-test02",
        "OPENSHIFT_BUILD_SOURCE=https://github.com/tomotagwork/openshift-test",
        "OPENSHIFT_BUILD_REFERENCE=main",
        "OPENSHIFT_BUILD_COMMIT=1062eb687855f93d36e957a66f32dd7265fb38d8"
    ]
}
```