🖇️

【OpenShift入門】コンテナ、イメージ、イメージストリームの仕組みをマスターしよう

2024/10/13に公開

0.はじめに

OpenShift Container Platform(以下、OCP)入門者向けに、OpenShiftで使用されるコンテナイメージ、およびイメージストリームについて解説します。

これらを適切に理解することで、アプリケーションのビルド、デプロイ、管理がより効率的に行えます。

  • コンテナの役割
  • イメージの役割
  • イメージストリームの役割

では、次の章から具体的な解説を進めます!

1. コンテナ(Container)

コンテナは、アプリケーションとその依存関係をパッケージ化したもので、実行可能な単位です。OpenShiftはKubernetesの上に構築されており、コンテナをPodとして実行します。

  • コンテナの役割: イメージに基づいて、アプリケーションを実行するプロセスです。OpenShiftでは、複数のコンテナを1つのPodとして管理します。


引用元:Digital Business Sherpa『Kubernetesとは?仕組みや特徴を詳しく解説』

このコンテナは、イメージから作成され、実行されます。

2. イメージ(Image)

イメージは、アプリケーションの実行に必要なコード、依存関係、環境設定が含まれている読み取り専用のテンプレートです。イメージは、DockerイメージOCI(Open Container Initiative)イメージの形式で保存されます。


引用元:しいたけLOG 『Docker初心者がDockerfile,Image,Containerの関係を感覚的に理解する』

oc get imagesコマンドを使って、イメージの一覧をリストアップすることができます。

oc get imagesコマンドの例:

$ oc get images
NAME                                                                      IMAGE REFERENCE
sha256:00cf28cf9a6c427962f922855a6cc32692c760764ce2ce7411cf605dd510367f   registry.access.redhat.com/ubi8/openjdk-8-runtime@sha256:00cf28cf9a6c427962f922855a6cc32692c760764ce2ce7411cf605dd510367f
sha256:01920073bbd480bd34e2d8e17dced64d342257fa9a263d1843edf1cc45a50a7c   registry.redhat.io/jboss-datagrid-7/datagrid73-openshift@sha256:01920073bbd480bd34e2d8e17dced64d342257fa9a263d1843edf1cc45a50a7c
sha256:022488b1bf697b7dd8c393171a3247bef4ea545a9ab828501e72168f2aac9415   registry.access.redhat.com/ubi8/openjdk-8@sha256:022488b1bf697b7dd8c393171a3247bef4ea545a9ab828501e72168f2aac9415
sha256:04fa74e53b79abdbb20d5a1cf42b523ce3b6554d411053e48c405ea749454263   registry.redhat.io/ubi8/perl-526@sha256:04fa74e53b79abdbb20d5a1cf42b523ce3b6554d411053e48c405ea749454263
sha256:0521e541e013293e41c30af335cca2a87a2f54d3d26ca29b90a8236b11ef6379   registry.redhat.io/rhel9/redis-7@sha256:0521e541e013293e41c30af335cca2a87a2f54d3d26ca29b90a8236b11ef6379

特定のイメージに関する詳細な情報を調査した場合はoc describe image コマンドを実行します。

oc describe image コマンドの例:

oc describe image sha256:<image-hash>

sha256:<image-hash>は、イメージのハッシュ値で特定のイメージを識別します。

実行結果の例:

$ oc describe image sha256:00cf28cf9a6c427962f922855a6cc32692c760764ce2ce7411cf605dd510367f                                                       ○ project-2/api-crc-testing:6443/kubeadmin/project-2 10:01:30 AM
Docker Image:	registry.access.redhat.com/ubi8/openjdk-8-runtime@sha256:00cf28cf9a6c427962f922855a6cc32692c760764ce2ce7411cf605dd510367f
Name:		sha256:00cf28cf9a6c427962f922855a6cc32692c760764ce2ce7411cf605dd510367f
Created:	7 weeks ago
Annotations:	image.openshift.io/dockerLayersOrder=ascending
Image Size:	112MB in 3 layers
Layers:		39.62MB	sha256:54e56e6f85721741ee7bf0336de8ad3bf138a56769a6d0097b600a0e361be58d
		1.745kB	sha256:4f8ddd7f5a755f537dd9d5f553c8c78171dcf3018c5fc96676a07380d3e14e20
		72.4MB	sha256:fa8e7ec856879c5c416f30aeaca26473064c725889c4a66f9f664909c5657afb
Image Created:	2 years ago
Author:		<none>
Arch:		amd64
Command:	/opt/jboss/container/java/run/run-java.sh
Working Dir:	/home/jboss
User:		185
Exposes Ports:	8080/tcp, 8443/tcp
Docker Labels:	architecture=x86_64
		build-date=2022-04-29T13:49:43.606616
		com.redhat.build-host=cpt-1003.osbs.prod.upshift.rdu2.redhat.com
		com.redhat.component=openjdk-8-runtime-ubi8-container
		com.redhat.license_terms=https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI
		description=Image for Red Hat OpenShift providing OpenJDK 1.8 runtime
		distribution-scope=public
		io.cekit.version=3.11.0
		io.k8s.description=Platform for running plain Java applications (fat-jar and flat classpath)
		io.k8s.display-name=Java Applications
		io.openshift.expose-services=
		io.openshift.tags=java
		maintainer=Red Hat OpenJDK <openjdk@redhat.com>
		name=ubi8/openjdk-8-runtime
		org.jboss.product=openjdk
		org.jboss.product.openjdk.version=1.8.0
		org.jboss.product.version=1.8.0
		release=1.1651233090
		summary=Image for Red Hat OpenShift providing OpenJDK 1.8 runtime
		url=https://access.redhat.com/containers/#/registry.access.redhat.com/ubi8/openjdk-8-runtime/images/1.12-1.1651233090
		vcs-ref=d68a2b1f3342c920689ae6f7c0a9614570f9b9a0
		vcs-type=git
		vendor=Red Hat, Inc.
		version=1.12
Environment:	PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
		container=oci
		HOME=/home/jboss
		JAVA_HOME=/usr/lib/jvm/jre
		JAVA_VENDOR=openjdk
		JAVA_VERSION=1.8.0
		JBOSS_CONTAINER_OPENJDK_JRE_MODULE=/opt/jboss/container/openjdk/jre
		JBOSS_CONTAINER_JAVA_PROXY_MODULE=/opt/jboss/container/java/proxy
		JBOSS_CONTAINER_JAVA_JVM_MODULE=/opt/jboss/container/java/jvm
		JBOSS_CONTAINER_UTIL_LOGGING_MODULE=/opt/jboss/container/util/logging/
		JAVA_DATA_DIR=/deployments/data
		JBOSS_CONTAINER_JAVA_RUN_MODULE=/opt/jboss/container/java/run
		JBOSS_IMAGE_NAME=ubi8/openjdk-8-runtime
		JBOSS_IMAGE_VERSION=1.12
		LANG=C.utf8
各項目の意味
  • Docker Image: イメージのリポジトリ名とハッシュ。
  • Name: イメージのハッシュ値(識別子)。
  • Created: イメージ作成日。
  • Annotations: イメージに付加されたメタデータ。
  • Image Size: イメージ全体のサイズ。
  • Layers: 各レイヤーのサイズとハッシュ値。
  • Image Created: イメージ元データの作成日。
  • Author: イメージ作成者。
  • Arch: 対応するアーキテクチャ。
  • Command: 実行時のデフォルトコマンド。
  • Working Dir: 作業ディレクトリ。
  • User: 実行時のユーザーID。
  • Exposes Ports: 公開されるポート。
  • Docker Labels: イメージのメタデータ。
  • Environment: 実行時の環境変数。

イメージのバージョン管理をするために、次に紹介するイメージストリームが必要となってきます。

3. イメージストリーム(ImageStream)

イメージストリームは、OpenShiftが提供する独自のリソースで、イメージのバージョン管理更新の追跡に使われます。複数のイメージを管理し、バージョンやタグを追跡できるため、アプリケーションのデプロイやCI/CDパイプラインに便利です。

イメージストリームの機能:

  • 複数のイメージのバージョンを管理

    引用元:『CTC 第84回 OpenShiftの機能紹介 ―― Dockerイメージのバージョン管理 (中井悦司)』

  • 新しいイメージのバージョンがプッシュされると、自動的に通知され、デプロイメントがトリガーされる。

    引用元:『CTC 第84回 OpenShiftの機能紹介 ―― Dockerイメージのバージョン管理 (中井悦司)』

oc get imagestream コマンドを使って、現在のNamespaceに存在するすべてのイメージストリームを一覧表示することができます。

oc get imagestream コマンドの例:

$ oc get imagestream -n openshift                                                                                                                 ○ project-2/api-crc-testing:6443/kubeadmin/project-2 10:47:12 AM
NAME                                                 IMAGE REPOSITORY                                                                                                       TAGS                                                     UPDATED
cli                                                  default-route-openshift-image-registry.apps-crc.testing/openshift/cli                                                  latest                                                   7 weeks ago
cli-artifacts                                        default-route-openshift-image-registry.apps-crc.testing/openshift/cli-artifacts                                        latest                                                   7 weeks ago
dotnet                                               default-route-openshift-image-registry.apps-crc.testing/openshift/dotnet                                               6.0,6.0-ubi8,7.0,7.0-ubi8,8.0,8.0-ubi8 + 1 more...       7 weeks ago
dotnet-runtime                                       default-route-openshift-image-registry.apps-crc.testing/openshift/dotnet-runtime                                       6.0,6.0-ubi8,7.0,7.0-ubi8,8.0,8.0-ubi8 + 1 more...       7 weeks ago
driver-toolkit                                       default-route-openshift-image-registry.apps-crc.testing/openshift/driver-toolkit                                       416.94.202408062045-0,latest                             7 weeks ago
fuse7-eap-openshift                                  default-route-openshift-image-registry.apps-crc.testing/openshift/fuse7-eap-openshift                                  1.0,1.1,1.10,1.11,1.12,1.2,1.3,1.4,1.5 + 3 more...       7 weeks ago
fuse7-eap-openshift-java11                           default-route-openshift-image-registry.apps-crc.testing/openshift/fuse7-eap-openshift-java11                           1.11,1.12                                                7 weeks ago
fuse7-java-openshift                                 default-route-openshift-image-registry.apps-crc.testing/openshift/fuse7-java-openshift                                 1.0,1.1,1.10,1.11,1.12,1.2,1.3,1.4,1.5 + 3 more...       7 weeks ago
fuse7-java11-openshift                               default-route-openshift-image-registry.apps-crc.testing/openshift/fuse7-java11-openshift                               1.11,1.12                                                7 weeks ago
fuse7-karaf-openshift                                default-route-openshift-image-registry.apps-crc.testing/openshift/fuse7-karaf-openshift                                1.0,1.1,1.10,1.11,1.12,1.2,1.3,1.4,1.5 + 3 more...       7 weeks ago
fuse7-karaf-openshift-jdk11                          default-route-openshift-image-registry.apps-crc.testing/openshift/fuse7-karaf-openshift-jdk11                          1.12                                                     7 weeks ago
golang                                               default-route-openshift-image-registry.apps-crc.testing/openshift/golang                                               1.18-ubi7,1.18-ubi8,1.18-ubi9,latest                     7 weeks ago
httpd                                                default-route-openshift-image-registry.apps-crc.testing/openshift/httpd                                                2.4-el7,2.4-el8,2.4-ubi8,2.4-ubi9 + 1 more...            7 weeks ago
installer                                            default-route-openshift-image-registry.apps-crc.testing/openshift/installer                                            latest                                                   7 weeks ago
installer-artifacts                                  default-route-openshift-image-registry.apps-crc.testing/openshift/installer-artifacts                                  latest                                                   7 weeks ago
java                                                 default-route-openshift-image-registry.apps-crc.testing/openshift/java                                                 11,8,latest,openjdk-11-el7,openjdk-11-ubi8 + 3 more...   7 weeks ago
java-runtime                                         default-route-openshift-image-registry.apps-crc.testing/openshift/java-runtime                                         latest,openjdk-11-ubi8,openjdk-17-ubi8 + 1 more...       7 weeks ago

特定のイメージストリームの詳細を調査したい場合は、oc describe is <imagestreamname> コマンドを使います。

oc describe is <imagestreamname> コマンドの例:

$ oc describe is java-runtime -n openshift
Name:			java-runtime
Namespace:		openshift
Created:		7 weeks ago
Labels:			samples.operator.openshift.io/managed=true
Annotations:		openshift.io/display-name=Red Hat OpenJDK Runtime
			openshift.io/image.dockerRepositoryCheck=2024-08-19T06:11:59Z
			openshift.io/provider-display-name=Red Hat, Inc.
			samples.operator.openshift.io/version=4.16.7
Image Repository:	default-route-openshift-image-registry.apps-crc.testing/openshift/java-runtime
Image Lookup:		local=false
Unique Images:		3
Tags:			4

openjdk-11-ubi8
  tagged from registry.access.redhat.com/ubi8/openjdk-11-runtime:latest
    prefer registry pullthrough when referencing this tag

  Run Java applications using OpenJDK 11 upon UBI8.
  Tags: java:11, openjdk, ubi8

  * registry.access.redhat.com/ubi8/openjdk-11-runtime@sha256:65d66079338d42133d658a708caa543684f970d660cdfaf7a250010dc78c7473
      7 weeks ago

openjdk-17-ubi8 (latest)
  tagged from registry.access.redhat.com/ubi8/openjdk-17-runtime:latest
    prefer registry pullthrough when referencing this tag

  Run Java applications using OpenJDK 17 upon RHEL8.
  Tags: java:17, openjdk, ubi8
  Example Repo: https://github.com/jboss-openshift/openshift-quickstarts

  * registry.access.redhat.com/ubi8/openjdk-17-runtime@sha256:0c7f7f74765c475e8a5746f40a7f8c3dd13e288c0649f99196f8b85d7272489b
      7 weeks ago

openjdk-8-ubi8
  tagged from registry.access.redhat.com/ubi8/openjdk-8-runtime:latest
    prefer registry pullthrough when referencing this tag

  Run Java applications using OpenJDK 1.8 upon UBI8.
  Tags: java:8, openjdk, ubi8

  * registry.access.redhat.com/ubi8/openjdk-8-runtime@sha256:be7c48c934c064a59f57b0ba58b625f0f35e258da044e39d6333d6908fe4196b
      7 weeks ago
各項目の意味
  • Name: イメージストリームの名前。
  • Namespace: イメージストリームが存在するプロジェクト(ネームスペース)。
  • Created: 作成日時。
  • Labels: イメージに付けられた識別用ラベル。
  • Annotations: イメージに関する追加情報やメタデータ。
  • Image Repository: イメージが保存されているレポジトリの場所。
  • Image Lookup: ローカルでイメージを参照するかどうか。
  • Unique Images: ユニークなイメージの数。
  • Tags: 各イメージに関連付けられたタグのリスト。

4.おまけ:イメージ抽出(oc image extract コマンド)

oc image extract コマンドは、イメージ内に含まれているファイルやデータを抽出するために使用されます。これは、イメージの内容を確認したり、必要なファイルを取得する場合に役立ちます。

oc image extract コマンドの例:

oc image extract default-route-openshift-image-registry.apps-crc.testing/myapp:latest --path /path/in/container:/local/path

このコマンドは、myapp イメージの中の /path/in/container にあるファイルをローカルの /local/path に抽出します。

5.おわりに

今回はOpenShiftで使用されるコンテナ、イメージ、およびイメージストリームを理解するために、以下を学びました。

  • コンテナ: イメージに基づいて実行されるアプリケーションのインスタンス。Pod内で動作し、実行されます。
  • イメージ: アプリケーションとその依存関係を含む、コンテナの実行テンプレート。イメージは固定のバージョンであり、必要に応じて複数のイメージを持つことができます。
  • イメージストリーム: 複数のイメージを管理し、バージョンやタグを追跡するOpenShiftのリソース。CI/CDやデプロイメントのトリガーに役立ちます。

これらの概念を理解することで、OpenShiftでのコンテナ、イメージ、およびイメージストリームの管理を効果的に行うことができます。

1回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。

今後もOpenShiftについて解説していきます。

おわりっ!

参考サイト

Discussion