コンテナイメージのレジストリ検索方法(Podman編)
- 1 はじめに
- 2 検証環境
- 3 レジストリとリポジトリについて
- 4 イメージの名前(短縮名およびFQIN)について
- 5 レジストリの検索について
- 6 認証が必要なレジストリからイメージをダウンロードする方法
- Y 参考図書
- Z 参考情報
1 はじめに
以下の項目について、コンテナに関する記事を作成しました。
2 検証環境
ホストのAlmaLinux版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release AlmaLinux release 9.2 (Turquoise Kodkod)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 5.14.0-284.11.1.el9_2.x86_64
3 レジストリとリポジトリについて
レジストリは、コンテナイメージを保存し配布する場所です。レジストリの中には複数のリポジトリがあり、それぞれのリポジトリでコンテナイメージを管理します。
レジストリ | 概要 |
---|---|
registry.access.redhat.com | Red Hat社が提供するレジストリです。レジストリを利用するさい、認証は不要です |
registry.redhat.io | Red Hat社が提供するレジストリです。レジストリを利用するさい、認証が必要です。あらかじめRedHatのアカウントを持っている必要があります。Red Hat社 の配布するコンテナーイメージは registry.redhat.io に移行しつつあるようです |
registry.connect.redhat.com | Red Hat社が提供するサードパーティ製品のレジストリです。レジストリを利用するさい、認証が必要です。あらかじめRedHatのアカウントを持っている必要があります |
docker.io | Docker社が提供するレジストリです |
quay.io | CoreOSによって開発されました。CoreOSは後にRed Hatによって買収され、現在はRed Hatが運営されています |
4 イメージの名前(短縮名およびFQIN)について
コンテナのイメージ名は以下の呼び方があります。
名前 | 概要 |
---|---|
FQIN(Fully Qualified Image Name) | レジストリ名/リポジトリ名/イメージ名で指定する名前です |
短縮名 | イメージ名で指定する名前です |
短縮名は以下のファイルに定義されています。例えば、短縮名 "almalinux" は、FQINでは "docker.io/library/almalinux" となります。
[root@server ~]# cat /etc/containers/registries.conf.d/000-shortnames.conf [aliases] # almalinux "almalinux" = "docker.io/library/almalinux" "almalinux-minimal" = "docker.io/library/almalinux-minimal" -snip-
短縮名(almalinux)を使ってイメージをダウンロードしてみます。ダウンロード中の様子を確認すると、1行目で短縮名をFQINに変換している旨が表示されているのがわかります。そして、2行目でFQINを指定してイメージをダウンロードしていることがわかります。
[root@server ~]# podman pull almalinux Resolved "almalinux" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) Trying to pull docker.io/library/almalinux:latest... Getting image source signatures Copying blob 5f50a3278457 skipped: already exists Copying config ac7ec62599 done | Writing manifest to image destination ac7ec6259981906060844582e873ea43f41c6045fdbd8969d22bb6f0ec044219
ダウンロードしたイメージを確認すると、イメージの名前が FQIN であることがわかります。
[root@server ~]# podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/almalinux latest ac7ec6259981 3 weeks ago 191 MB
registries.conf の注意事項には、短縮名を使用すると偽装されたイメージをダウンロードする可能性があることが述べられています。そのため、短縮名ではなくFQINの使用が推奨されています。さらに、イメージをハッシュ値でダウンロードすることで、偽装されたイメージではなく、意図したイメージを確実にダウンロードすることができます。
[root@server ~]# cat /etc/containers/registries.conf # NOTE: RISK OF USING UNQUALIFIED IMAGE NAMES # We recommend always using fully qualified image names including the registry # server (full dns name), namespace, image name, and tag # (e.g., registry.redhat.io/ubi8/ubi:latest). Pulling by digest (i.e., # quay.io/repository/name@digest) further eliminates the ambiguity of tags. # When using short names, there is always an inherent risk that the image being # pulled could be spoofed. For example, a user wants to pull an image named -snip
5 レジストリの検索について
Podmanには、イメージの格納場所を検索する際のデフォルトのレジストリが定義されています。ただし、この定義はPodmanをパッケージ化したディストリビューションによって異なります。Podman infoコマンドを使用すると、以下の3つのレジストリがイメージの検索対象であることがわかります。
[root@server ~]# podman info -snip- registries: search: - registry.access.redhat.com - registry.redhat.io - docker.io
jqコマンドを使用して、Podmanに設定されているレジストリのリストを表示してみます。
[root@server ~]# podman info --format json | jq '.registries' { "search": [ "registry.access.redhat.com", "registry.redhat.io", "docker.io" ] }
なお、デフォルトで検索するレジストリは、registries.confに定義されていることが確認できます。
[root@server ~]# cat /etc/containers/registries.conf -snip- unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"]
6 認証が必要なレジストリからイメージをダウンロードする方法
registry.redhat.ioからイメージをダウンロードする場合、ID/パスワードによるユーザ認証が必要になります。
6.1 アカウントの作成
以下のページにアクセスしてアカウントを作成します。ここで作成したアカウントは、registry.redhat.ioとregistry.connect.redhat.comの両方に使用できます。
https://sso.redhat.com/auth/realms/redhat-external/login-actions/registration?client_id=customer-portal&tab_id=c1freLsJpuA
6.2 イメージのダウンロード
レジストリ(registry.redhat.io)に存在するrsyslogイメージを検索してみます。この中から、rhel9リポジトリのrsyslogイメージをダウンロードしてみます(下記1行目のイメージ)。
[root@server ~]# podman search registry.redhat.io/rsyslog NAME DESCRIPTION registry.redhat.io/rhel9/rsyslog rhcc_registry.access.redhat.com_rhel9/rsyslo... registry.redhat.io/rhel7/rsyslog A containerized version of the rsyslog utili... registry.redhat.io/rhel8/rsyslog Rocket Fast System For Log Processing (rsysl... registry.redhat.io/rhosp-rhel8/openstack-rsyslog openstack-rsyslog registry.redhat.io/rhosp-beta/openstack-rsyslog openstack-rsyslog registry.redhat.io/rhosp-rhel8/openstack-rsyslog-base openstack-rsyslog-base registry.redhat.io/rhosp-dev-preview/openstack-rsyslog-rhel9 Red Hat Red Hat OpenStack image for openstac... registry.redhat.io/rhosp-rhel9/openstack-rsyslog rhcc_registry.access.redhat.com_rhosp-rhel9/... registry.redhat.io/rhoso-beta/openstack-rsyslog-rhel9 Red Hat Red Hat OpenStack Services on OpenSh...
rhel9のリポジトリからrsyslogイメージをダウンロードしようとしましたが、レジストリ(registry.redhat.io)にログインしていないため、認証に失敗し、イメージをダウンロードできませんでした。
[root@server ~]# podman pull registry.redhat.io/rhel9/rsyslog Trying to pull registry.redhat.io/rhel9/rsyslog:latest... Error: initializing source docker://registry.redhat.io/rhel9/rsyslog:latest: unable to retrieve auth token: invalid username/password: unauthorized: Please login to the Red Hat Registry using your Customer Portal credentials. Further instructions can be found here: https://access.redhat.com/RegistryAuthentication
レジストリ(registry.redhat.io)にログインします。
[root@server ~]# podman login registry.redhat.io Username: test_user Password: Login Succeeded!
rhel9リポジトリからrsyslogイメージをダウンロードします。今回は、イメージをダウンロードすることができました。
[root@server ~]# podman pull registry.redhat.io/rhel9/rsyslog Trying to pull registry.redhat.io/rhel9/rsyslog:latest... Getting image source signatures Checking if image destination supports signatures Copying blob 7de73bed2a9f done | Copying blob edab65b863ae done | Copying config e3197b3b88 done | Writing manifest to image destination Storing signatures e3197b3b884c5cd6b32a39801f1c21965cbbee63adc46df86ec8a56553a20f14
ダウンロードしたイメージを確認します。rhel9リポジトリからrsyslogイメージの最新版がダウンロードされたことが確認できます。
[root@server ~]# podman images rsyslog REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/rhel9/rsyslog latest e3197b3b884c 2 weeks ago 243 MB
レジストリ(registry.redhat.io)からログアウトします。
[root@server ~]# podman logout registry.redhat.io Removed login credentials for registry.redhat.io
Y 参考図書
今回の記事執筆にあたり参考にした図書は以下のものです。
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ
コンテナーの構築、実行、および管理 | Red Hat Product Documentation
Podman Networkをやってみる | Reafnex
The tale of a single register value