HarborにコンテナイメージをPush・Pullしてみた

どうも、Tです。

プライベート用のコンテナレジストリHarborの基本動作を確認してみたので備忘録です。

スポンサーリンク
アドセンス1

環境

Harbor(コンテナレジストリ)

# helm list --namespace harbor-system
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
harbor  harbor-system   1               2025-07-24 13:48:19.749107727 +0900 JST deployed

Podman(コンテナイメージのPush、Pullに利用)

# podman --version
podman version 5.4.0

事前準備

コンテナレジストリHarborをデプロイして使えるようにしておきます。

Harborのデプロイ方法は下記にまとめました。

Helmを使ってK3sにHarborをデプロイしてみた
どうも、Tです。 プライベートコンテナリポジトリとしてHarborをデプロイした備忘録です。 環境 Oracle ...

コンテナイメージのPush・PullはPodmanから行います。

Podmanのインストール方法は下記にまとめました。

Oracle Linux 10(RHEL 10互換)にPodmanをインストールしてみた
どうも、Tです。 Oracle Linux10にPodmanをインストールした備忘録です。 環境 Oracle Linux 10 ...

Harbor設定

コンテナイメージをPush・PullするためにHarborの設定を行っていきます。

ユーザー作成

今回はPrivateレジストリとして作成するためログインのためのユーザーを作成します。

Harborにログインします。

「Administration」->「Users」画面を開き「NEW USER」をクリックします。

下記に任意のユーザー情報を入力し「OK」をクリックします。

検証用ユーザー「test-user」が作成できました。

プロジェクト作成

コンテナレジストリとしてアクセスするプロジェクトを作成します。

「Projects」画面を開き「NEW PROJECT」をクリックします。

「Project Name」に任意の名前を入力して「OK」をクリックします。

 Access LevelのPublicをチェックするとログインすることなくPullが可能になります。

検証用プロジェクト「test-proj」が作成できました。

「test-proj」をクリックします。

メンバー追加

プロジェクトにメンバーを追加します。

プロジェクトの「Members」タブをクリックし「USER」をクリックします。

Nmaeに検証用ユーザー「test-user」を入力、Roleに「Developer」を選択し「OK」をクリックします。

コンテナイメージのPushとPullが行えれば良いのでRoleにDeveloperを選択しています。

プロジェクトとユーザー(メンバー)の概要については下記に記載されています。
https://goharbor.io/docs/2.4.0/administration/managing-users/

Roleの細かい権限内容については下記に記載されています。
https://goharbor.io/docs/2.4.0/administration/managing-users/user-permissions-by-role/

メンバーが追加できました。

PodmanからコンテナイメージのPush・Pull

PodmanからHarborのコンテナレジストリに、コンテナイメージをPush・Pullができるか確認します。

podman設定変更(TLS検証無効)

Harborの証明書は自己証明書のため、podmanからアクセスする際に下記のようなエラーが表示されコンテナレジストリにアクセスできません。

Error: authenticating creds for "192.168.10.208:30003": pinging container registry 192.168.10.208:30003: Get "https://192.168.10.208:30003/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

podmanコマンドに–tls-verify=falseオプションを付けることでも回避できますが、コマンドを打つたびにオプションを付けるのは面倒なため、Harborのコンテナレジストリにアクセスする場合に、TLS検証なしでアクセスできるようにします。

下記の設定ファイルを編集します。

 $ sudo vi /etc/containers/registries.conf

末尾に下記を追記します。locationは、HarborのIPアドレス・ポート番号になります。

[[registry]]
location = "192.168.10.208:30003"
insecure = true

コンテナイメージPush

Pushするためのコンテナイメージを準備します。インターネットからhello-worldコンテナイメージをPullし、イメージが存在することを確認します。

$ podman pull hello-world
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob 81df7ff16254 done | 
Copying config 5dd467fce5 done | 
Writing manifest to image destination
5dd467fce50b56951185da365b5feee75409968cbab5767b9b59e325fb2ecbc0

$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/podman/hello latest 5dd467fce50b 14 months ago 787 kB
 hello-worldコンテナイメージをPullしましたが、保存されるイメージ名はhelloになります。
下記の設定ファイルで短縮名としてマッピングされているため正常な動作です。

 $ cat /etc/containers/registries.conf.d/000-shortnames.conf | grep hello-world
"hello-world" = "quay.io/podman/hello"

Pullしたhello-worldコンテナイメージに、harborに保存する用のタグ名を付けて、イメージが存在することを確認します。

$ podman tag quay.io/podman/hello:latest 192.168.10.208:30003/test-proj/hello:v1

$ podman images
REPOSITORY                            TAG         IMAGE ID      CREATED        SIZE
192.168.10.208:30003/test-proj/hello  v1          5dd467fce50b  14 months ago  787 kB
quay.io/podman/hello                  latest      5dd467fce50b  14 months ago  787 k
 podman特有というわけではなくDockerも同様ですが、コンテイメージには下記のような規則があるためこれらに従ってつけています。
<registryhost>/<username>/<name>:<tag>
4.8. イメージのタグ付け | コンテナーの構築、実行、および管理 | Red Hat Enterprise Linux | 10 | Red Hat Documentation
4.8. イメージのタグ付け | コンテナーの構築、実行、および管理 | Red Hat Enterprise Linux | 10 | Red Hat Documentation

検証用ユーザー「test-user」でHarborにログインします。

$ podman login 192.168.10.208:30003
Username: test-user
Password: 
Login Succeeded!

HarborにタグをつけたコンテナイメージをPushします。

$ podman push 192.168.10.208:30003/test-proj/hello:v1
Getting image source signatures
Copying blob 2114fc8b7058 done | 
Copying config 5dd467fce5 done | 
Writing manifest to image destination

Harborコンテナレジストリにタグをつけたコンテナイメージが保存されていることが確認できます。

$ skopeo list-tags docker://192.168.10.208:30003/test-proj/hello
{
    "Repository": "192.168.10.208:30003/test-proj/hello",
    "Tags": [
        "v1"
    ]
}

skopeoコマンドは、コンテナイメージ操作を行うコマンドですが、今回はタグ情報の取得に利用しています。
「docker://」は「Docker Registry HTTP API V2」に対応しているレジストリであることを指定しています。

GitHub - containers/skopeo: Work with remote images registries - retrieving information, images, signing content
Work with remote images registries - retrieving information, images, signing content - containers/skopeo

docker://docker-reference An image in a registry implementing the “Docker Registry HTTP API V2”. By default, uses the authorization state in $XDG_RUNTIME_DIR/containers/auth.json, which is set using skopeo login.

Harborから見るとhelloリポジトリが作成されていることが確認できます。
「test-proj/hello」をクリックします。

リポジトリの中を確認するとPushしたv1タグが登録されていることが確認できます。

Harborからログアウトします。

$ podman logout 192.168.10.208:30003
Removed login credentials for 192.168.10.208:30003

コンテナイメージPull

HarborコンテナレジストリからコンテナイメージをPullできることを確認します。

ローカルにコンテナイメージがあることを確認します。

$ podman images
REPOSITORY                            TAG         IMAGE ID      CREATED        SIZE
192.168.10.208:30003/test-proj/hello  v1          5dd467fce50b  14 months ago  787 kB
quay.io/podman/hello                  latest      5dd467fce50b  14 months ago  787 k

ローカルにコンテナイメージを削除します。

$ podman rmi 192.168.10.208:30003/test-proj/hello:v1
$ podman rmi quay.io/podman/hello:latest

$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE

検証用ユーザー「test-user」でHarborにログインします。

$ podman login 192.168.10.208:30003
Username: test-user
Password: 
Login Succeeded!

Harborから先ほどPushしたコンテナイメージをPullします。

$ podman pull 192.168.10.208:30003/test-proj/hello:v1
Trying to pull 192.168.10.208:30003/test-proj/hello:v1...
Getting image source signatures
Copying blob ce980a8f5545 done | 
Copying config 5dd467fce5 done | 
Writing manifest to image destination
5dd467fce50b56951185da365b5feee75409968cbab5767b9b59e325fb2ecbc0

ローカルにコンテナイメージが保存されたことを確認します。

$ podman images
REPOSITORY                            TAG         IMAGE ID      CREATED        SIZE
192.168.10.208:30003/test-proj/hello  v1          5dd467fce50b  14 months ago  786 kB

Pullしたコンテナイメージを実行できることを確認します。

$ podman run --rm -it 192.168.10.208:30003/test-proj/hello:v1
!... Hello Podman World ...!

         .--"--.           
       / -     - \         
      / (O)   (O) \        
   ~~~| -=(,Y,)=- |         
    .---. /`  \   |~~      
 ~/  o  o \~~~~.----. ~~   
  | =(X)= |~  / (O (O) \   
   ~~~~~~~  ~| =(Y_)=-  |   
  ~~~~    ~~~|   U      |~~ 

Project:   https://github.com/containers/podman
Website:   https://podman.io
Desktop:   https://podman-desktop.io
Documents: https://docs.podman.io
YouTube:   https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon:  @Podman_io@fosstodon.org

Pullしたイメージを削除します。

$ podman rmi 192.168.10.208:30003/test-proj/hello:v1

$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE

Harborからログアウトします。

$ podman logout 192.168.10.208:30003
Removed login credentials for 192.168.10.208:30003

コンテナイメージ・プロジェクト削除

Harborから検証で利用したコンテナイメージとプロジェクトを削除します。

コンテナイメージ削除

「Projects」->「test-proj」の「Repositories」タブを開き「test-proj/hello」ににチェックを入れ「DELETE」をクリックします。

確認画面で「DELETE」をクリックします。

コンテナイメージ(レジストリ)を削除できました。

プロジェクト削除

「Projects」画面で「test-proj」にチェックを入れ「ACTION」->「Delete」をクリックします。

確認画面で「DELETE」をクリックします。

プロジェクトを削除できました。

参考

Harbor の docker registry 機能と helm chart repo 機能を使ってみる - Qiita
Docker Registry Harbor の主要なユースケースである private docker registry を試してみます。 まずは Harbor にログイン admin ユーザでログインし、まずは Project を作ります。 Harbor の Regi...

まとめ

他にもいろいろ機能ありますが、プライベート用としてこれだけ使えれば十分かなぁ。Harbor思ったより使いやすいです。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする