13.2. イメージのタグ付け
OpenShift Online イメージストリームとそのタグを使用する前に、コンテナーイメージのコンテキストにおけるイメージタグ全般について理解しておくと便利です。
コンテナーイメージにはその内容を直感的に判別できるようにする名前 (タグ) を追加できます。タグの一般的な使用例として、イメージに含まれるもののバージョンを指定するために使用できます。ruby という名前のイメージがある場合、Ruby の 2.0 バージョン用に 2.0 という名前のタグを使用したり、リポジトリー全体における最新のビルドされたイメージを示す latest というタグを使用したりすることができます。
docker
CLI を使用してイメージと直接対話する場合、docker tag
コマンドを使用してタグを追加できます。基本的に、この操作は複数の部分で構成されるエイリアスをイメージに追加する操作です。 これらの複数の部分には以下が含まれます。
<registry_server>/<user_name>/<image_name>:<tag>
上記の <user_name>
の部分は、イメージが内部レジストリー (OpenShift Container レジストリー) を使用して OpenShift Online 環境に保存される場合には、プロジェクトまたは namespace も参照することがあります。
OpenShift Online は docker tag
コマンドに似ている oc tag
コマンドを提供しますが、イメージ上で直接動作するのではなくイメージストリーム上で動作します。
docker
CLI を使用してイメージに直接タグ付けする方法についての詳細は、Red Hat Enterprise Linux 7 の『Getting Started with Containers』ドキュメントを参照してください。
13.2.1. タグのイメージストリームへの追加
OpenShift Online のイメージストリームはタグで識別されるゼロまたは 1 つ以上のコンテナーイメージで構成されることに留意した上で、oc tag
コマンドを使用してタグをイメージストリームに追加することができます。
$ oc tag <source> <destination>
たとえば、ruby イメージストリームの static-2.0 タグを ruby イメージストリーム 2.0 タグの現行のイメージを常に参照するように設定するには、以下を実行します。
$ oc tag ruby:2.0 ruby:static-2.0
これにより、ruby イメージストリームに static-2.0 という名前のイメージストリームタグが新たに作成されます。この新規タグは、oc tag
の実行時に ruby:2.0 イメージストリームタグが参照したイメージ ID を直接参照し、これが参照するイメージが変更されることがありません。
各種のタグを利用できます。デフォルト動作では、特定の時点の特定のイメージを参照する 永続 タグを使用します。 ソースが変更されても新規 (宛先) タグは変更されません。
トラッキング タグの場合は、宛先タグのメタデータがソースタグのインポート時に更新されます。宛先タグがソースタグの変更時に常に更新されるようにするには、--alias=true
フラグを使用します。
$ oc tag --alias=true <source> <destination>
永続的なエイリアス (latest
または stable
など) を作成するには トラッキング タグを使用します。このタグは単一イメージストリーム内で のみ 適切に機能します。複数のイメージストリーム間で使用されるエイリアスを作成しようとするとエラーが生じます。
さらに --scheduled=true
フラグを追加して宛先タグが定期的に更新 (再インポートなど) されるようにできます。期間はシステムレベルでグローバルに設定できます。詳細は、「タグおよびイメージメタデータのインポート」を参照してください。
--reference
フラグはインポートされないイメージストリームを作成します。このタグはソースの場所を参照しますが、これを永続的に参照します。
Docker に対して統合レジストリーのタグ付けされたイメージを常にフェッチするよう指示するには、--reference-policy=local
を使用します。レジストリーはプルスルー (pull-through) 機能を使用してイメージをクライアントに提供します。デフォルトで、イメージ Blob はレジストリーによってローカルにミラーリングされます。その結果、それらが次回必要となる場合により迅速にプルされます。またこのフラグは --insecure-registry
を Docker デーモンに指定しなくても、イメージストリームに非セキュアなアノテーションがあるか、またはタグに非セキュアなインポートポリシーがある限り、非セキュアなレジストリーからのプルを許可します。
13.2.2. 推奨されるタグ付け規則
イメージは時間の経過と共に変化するもので、それらのタグはその変化を反映します。イメージタグはビルドされる最新イメージを常に参照します。
タグ名にあまりにも多くの情報が組み込まれる場合 (例: v2.0.1-may-2016
)、タグはイメージの 1 つのリビジョンのみを参照し、更新されることがなくなります。デフォルトのイメージのプルーニングオプションを使用しても、このようなイメージは削除されません。
一方、タグの名前が v2.0
である場合はイメージリビジョンの数が多くなることが予想されます。これにより、タグ履歴が長くなるため、イメージプルーナーが古くなり使われなくなったイメージを削除する可能性が高くなります。
タグの名前付け規則は各自で定めることができますが、ここでは <image_name>:<image_tag>
形式のいくつかの例を見てみましょう。
説明 | 例 |
---|---|
リビジョン |
|
アーキテクチャー |
|
ベースイメージ |
|
最新 (不安定な可能性がある) |
|
最新 (安定性がある) |
|
タグ名に日付を含める必要がある場合、古くなり使用されなくなったイメージおよび istags
を定期的に検査し、これらを削除してください。そうしないと、古いイメージによるリソース使用量が増大する可能性があります。
13.2.3. タグのイメージストリームからの削除
タグをイメージストリームから完全に削除するには、以下を実行します。
$ oc delete istag/ruby:latest
または、以下を実行します。
$ oc tag -d ruby:latest
13.2.4. イメージストリームでのイメージの参照
以下の参照タイプを使用して、イメージをイメージストリームで参照できます。
ImageStreamTag
は、所定のイメージストリームおよびタグのイメージを参照し、取得するために使用されます。この名前は以下の規則に基づいて付けられます。<image_stream_name>:<tag>
ImageStreamImage
は、所定のイメージストリームおよびイメージ名のイメージを参照し、取得するために使用されます。この名前は以下の規則に基づいて付けられます。<image_stream_name>@<id>
<id>
は、ダイジェストとも呼ばれる特定イメージのイミュータブルな ID です。DockerImage
は、所定の外部レジストリーのイメージを参照し、取得するために使用されます。この名前は、以下のような標準の Docker プル仕様 に基づいて付けられます。openshift/ruby-20-centos7:2.0
注記タグが指定されていない場合、latest タグが使用されることが想定されます。
サードパーティーのレジストリーを参照することもできます。
registry.access.redhat.com/rhel7:latest
またはダイジェストでイメージを参照できます。
centos/ruby-22-centos7@sha256:3a335d7d8a452970c5b4054ad7118ff134b3a6b50a2bb6d0c07c746e8986b28e
CentOS イメージストリームのサンプル などのイメージストリーム定義のサンプルを表示する場合、それらには ImageStreamTag
の定義や DockerImage
の参照が含まれる一方で、ImageStreamImage
に関連するものは何も含まれていないことに気づかれることでしょう。
これは、イメージストリームでのイメージのインポートまたはイメージのタグ付けを行う場合は常に ImageStreamImage
オブジェクトが OpenShift Online に自動的に作成されるためです。イメージストリームを作成するために使用するイメージストリーム定義で ImageStreamImage
オブジェクトを明示的に定義する必要はありません。
イメージのオブジェクト定義は、イメージストリーム名および ID を使用し、ImageStreamImage
定義を取得して確認することができます。
$ oc export isimage <image_stream_name>@<id>
以下を実行して所定のイメージストリームの有効な <id>
値を確認することができます。
$ oc describe is <image_stream_name>
たとえば、ruby イメージストリームから ruby@3a335d7 の名前および ID を使って ImageStreamImage
を検索します。
ImageStreamImage
で取得されるイメージオブジェクトの定義
$ oc export isimage ruby@3a335d7 apiVersion: v1 image: dockerImageLayers: - name: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 size: 0 - name: sha256:ee1dd2cb6df21971f4af6de0f1d7782b81fb63156801cfde2bb47b4247c23c29 size: 196634330 - name: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 size: 0 - name: sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 size: 0 - name: sha256:ca062656bff07f18bff46be00f40cfbb069687ec124ac0aa038fd676cfaea092 size: 177723024 - name: sha256:63d529c59c92843c395befd065de516ee9ed4995549f8218eac6ff088bfa6b6e size: 55679776 dockerImageMetadata: Architecture: amd64 Author: SoftwareCollections.org <sclorg@redhat.com> 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 - STI_SCRIPTS_URL=image:///usr/libexec/s2i - STI_SCRIPTS_PATH=/usr/libexec/s2i - HOME=/opt/app-root/src - BASH_ENV=/opt/app-root/etc/scl_enable - ENV=/opt/app-root/etc/scl_enable - PROMPT_COMMAND=. /opt/app-root/etc/scl_enable - RUBY_VERSION=2.2 ExposedPorts: 8080/tcp: {} Image: d9c3abc5456a9461954ff0de8ae25e0e016aad35700594714d42b687564b1f51 Labels: build-date: 2015-12-23 io.k8s.description: Platform for building and running Ruby 2.2 applications io.k8s.display-name: Ruby 2.2 io.openshift.builder-base-version: 8d95148 io.openshift.builder-version: 8847438ba06307f86ac877465eadc835201241df io.openshift.s2i.scripts-url: image:///usr/libexec/s2i io.openshift.tags: builder,ruby,ruby22 io.s2i.scripts-url: image:///usr/libexec/s2i license: GPLv2 name: CentOS Base Image vendor: CentOS User: "1001" WorkingDir: /opt/app-root/src ContainerConfig: {} Created: 2016-01-26T21:07:27Z DockerVersion: 1.8.2-el7 Id: 57b08d979c86f4500dc8cad639c9518744c8dd39447c055a3517dc9c18d6fccd Parent: d9c3abc5456a9461954ff0de8ae25e0e016aad35700594714d42b687564b1f51 Size: 430037130 apiVersion: "1.0" kind: DockerImage dockerImageMetadataVersion: "1.0" dockerImageReference: centos/ruby-22-centos7@sha256:3a335d7d8a452970c5b4054ad7118ff134b3a6b50a2bb6d0c07c746e8986b28e metadata: creationTimestamp: 2016-01-29T13:17:45Z name: sha256:3a335d7d8a452970c5b4054ad7118ff134b3a6b50a2bb6d0c07c746e8986b28e resourceVersion: "352" uid: af2e7a0c-c68a-11e5-8a99-525400f25e34 kind: ImageStreamImage metadata: creationTimestamp: null name: ruby@3a335d7 namespace: openshift selflink: /oapi/v1/namespaces/openshift/imagestreamimages/ruby@3a335d7