【OpenShift入門】コンテナ、イメージ、イメージストリームの仕組みをマスターしよう
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: 各イメージに関連付けられたタグのリスト。
oc image extract
コマンド)
4.おまけ:イメージ抽出(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