機械翻訳について

14 プライベート・コンテナ・レジストリ

ローカルのプライベート・コンテナ・レジストリ・サーバーを設定して、組織内のコンテナ・イメージをホストします。 プライベート・レジストリは、Oracle Container Registryのミラー化にも使用できます。

このレジストリ・サーバーは、コンテナ・アプリケーションです。 Docker Hubからレジストリ・イメージをダウンロードしたり、サポートが必要な場合はOracle Container Registryからレジストリ・イメージをダウンロードするには、ホストにインターネット接続が必要です。

TLSを設定する必要があるセキュアなプライベート・レジストリを作成できます。 TLSを設定する場合、自己署名認証局(CA)証明書またはCAによって署名された証明書を使用できます。 それ以外の場合、レジストリはテストおよび開発の目的で安全でないレジストリとして作成できます。

ノート:

Docker Hubのレジストリ・イメージを使用して、セキュアでないレジストリとセキュア・レジストリの両方を設定できます。 Oracle Container Registryのレジストリ・イメージは、セキュアなレジストリの設定にのみ使用できます。

安全でないレジストリの作成

TLSを使用せずにローカル・コンテナ・レジストリを作成します。 これは、テストまたは開発に使用できます。 本番システムでは、TLSを使用するセキュアなレジストリをお薦めします。

安全でないレジストリを作成する場合は、それをPodmanレジストリ構成ファイルに追加して、レジストリの使用時に--tls-verify=falseオプションを使用しないようにできます。 詳細は、「セキュアでないレジストリの追加」を参照してください。

  1. レジストリを作成します。

    podman createコマンドを使用して、レジストリを作成します。 たとえば:

    sudo podman run -d -p 5000:5000 --name registry --restart always registry:2

    または、標準ユーザーの場合:

    podman run -d -p 5000:5000 --name registry --restart always registry:2

    -dオプションは、コンテナをバックグラウンドで実行します。

    -pオプションは、ポートマッピングを公開します。 デフォルト・ポートを使用している場合は、これを5000:5000に設定します。 ポート5000がすでに使用されている場合は、別のポートを割り当てます。たとえば、5001:5000を使用します。

    --nameオプションは、レジストリ・コンテナの名前を設定します。 通常、これはregistryに設定されます。

    コンテナ・レジストリ・イメージは、registry:2の短縮名を使用してDocker Hubからプルされますが、docker.io/library/registry:2のフル・イメージの場所を使用することもできます。

    オプションの詳細は、podman run --helpコマンドを使用します。

  2. レジストリ・コンテナが実行されていることを確認します。

    podman psコマンドを使用して、レジストリ・コンテナが実行中であることを確認します。

    sudo podman ps

    または、標準ユーザーの場合:

    podman ps

セキュア・レジストリの作成

TLSを使用してローカル・コンテナ・レジストリを作成します。 本番システムでは、TLSを使用するセキュアなレジストリをお薦めします。

開始する前に、前提条件を検討していることを確認してください。

  • レジストリ・サーバーでは、レジストリ・データを/opt/registry/に格納するために、15 GB以上の使用可能なディスク領域が必要です。

  • レジストリ用に別のファイル・システム(できればbtrfs形式のファイル・システム)を作成することをお薦めします。 Btrfsファイル・システムを使用すると、レジストリ・ファイル・システムを簡単にスケーリングし、ファイル・システムのスナップショットなどのbtrfs機能を利用できます。 btrfsの設定の詳細は、次のドキュメントを参照してください。

  • WebサーバーにTLSを使用する場合と同様に、レジストリ・ホストは、レジストリでトランスポート層セキュリティ(TLS)を有効にするために、有効なX.509証明書と秘密キーを要求します。 信頼できる認証局(CA)によって署名された証明書または自己署名証明書を使用できます。 自己署名証明書は、テスト目的で使用できます。 自己署名証明書および秘密キーの作成の詳細は、Oracle Linux: 証明書および公開キー・インフラストラクチャの管理を参照してください。

    ホストにX.509証明書がすでにある場合は、Podmanとともに使用してプライベート・レジストリを作成できます。 ホストのX.509証明書を使用していて、中間CAによって発行された場合は、ホストの証明書を中間CAの証明書と組み合せて、連鎖証明書を作成します。 これにより、ホストと中間CA証明書の両方を含む証明書が作成され、Podmanで検証できます。 catコマンドを使用して、次の形式を使用します。

    sudo cat host_certificate.crt intermediate_certificate.pem > chained_certificate.crt

    たとえば:

    sudo cat myregistry.example.com.crt intermediate-ca.pem > domain.crt
  1. 必要なディレクトリを作成します。

    /opt/registry/ディレクトリは、レジストリ・データの格納に使用されます。 certsディレクトリには証明書と秘密キーが格納され、dataディレクトリを使用してレジストリにプッシュされたイメージが格納されます。

    sudo mkdir -p /opt/registry/{certs,data}
  2. 証明書とキーを/opt/registry/certs/ディレクトリにコピーします。

    次の形式を使用します。

    sudo cp certfile /opt/registry/certs/domain.crt
    sudo cp keyfile /opt/registry/certs/domain.key

    certfileをホストのX.509証明書へのフルパス、または連鎖証明書に置き換えます。 keyfileをホストの秘密鍵のフルパスに置き換えます。 たとえば:

    sudo cp /etc/pki/tls/certs/registry.example.com.crt /opt/registry/certs/domain.crt
    sudo cp /etc/pki/tls/private/registry.example.com.key /opt/registry/certs/domain.key
  3. 秘密キーの権限を設定します。

    秘密鍵の正しいファイルアクセス権を設定します。

    sudo chmod 600 /opt/registry/certs/domain.key
  4. レジストリを作成します。

    podman createコマンドを使用して、レジストリを作成します。 たとえば:

    sudo podman run --name registry \
    -d \
    -p 5000:5000 \
    -v /opt/registry/data:/var/lib/registry:z \
    -v /opt/registry/certs:/certs:z \
    -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \
    -e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \
    -e REGISTRY_AUTH="" \
    registry:2

    --nameオプションは、レジストリ・コンテナの名前を設定します。 通常、これはregistryに設定されます。

    -dオプションは、コンテナをバックグラウンドで実行します。

    -pオプションは、ポートマッピングを公開します。 デフォルト・ポートを使用している場合は、これを5000:5000に設定します。 ポート5000がすでに使用されている場合は、別のポートを割り当てます。たとえば、5001:5000を使用します。

    -vオプションは、コンテナ内のローカル・ディレクトリをマウントします。

    -eオプションを使用して、レジストリ・コンテナで使用する環境変数を設定します。 X.509証明書と鍵情報の場所を設定するには、このオプションを使用します。

    コンテナ・レジストリ・イメージは、registry:2の短縮名を使用してDocker Hubからプルされますが、docker.io/library/registry:2のフル・イメージの場所を使用することもできます。 コンテナをcontainer-registry.oracle.com/os/registry:latestに設定することで、Oracle Container Registryからプルするようにこれを設定することもできます。

    オプションの詳細は、podman run --helpコマンドを使用します。

  5. レジストリ・コンテナが実行されていることを確認します。

    podman psコマンドを使用して、レジストリ・コンテナが実行中であることを確認します。

    sudo podman ps
  6. ファイアウォールのレジストリ・ポートを開きます。

    ファイアウォールを実行している場合は、コンテナ・レジストリでリスニングするTCPポートにアクセスできることを確認してください。 たとえば:

    sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
    sudo firewall-cmd --zone=internal --permanent --add-port=5000/tcp

    firewalld構成を再ロードします。

    sudo firewall-cmd --reload
  7. Podmanでレジストリを構成します。

    レジストリにアクセスする必要がある各ホスト上のPodman構成ファイルにコンテナ・レジストリを追加します。 レジストリの構成の詳細は、「レジストリの構成」を参照してください。

X.509証明書の配布

レジストリ・ホストが自己署名X.509証明書を使用する場合は、ローカルのコンテナ・レジストリを使用する予定のすべてのホストに証明書を配布する必要があります。

rootユーザーの場合、各レジストリの証明書は/etc/containers/certs.d/registry_hostname:port/に格納されます。 標準ユーザーの場合、証明書は$HOME/.config/containers/certs.d/registry_hostname:port/に格納できます。 registry_hostnameをレジストリ・ホストの名前に変更し、portをコンテナ・レジストリ・サーバーのポート番号(デフォルトでは5000)に変更します。

レジストリと相互作用するPodman、BuildahおよびSkopeoコマンドには、多くの場合、これらの証明書の代替の場所を指定する--cert-dirオプションが用意されています。

  1. certs.dディレクトリを作成します。

    レジストリ・ホストおよびユーザーの適切なcerts.dの場所を作成します。 rootユーザーの場合は、次の形式を使用します。

    sudo mkdir -p /etc/containers/certs.d/registry_hostname:port

    標準ユーザーの場合は、次の形式を使用します。

    mkdir -p $HOME/.config/containers/certs.d/registry_hostname:port

    registry_hostnameを、コンテナ・レジストリを実行しているサーバーの名前に置き換えます。 portを、レジストリにアクセスするためのポート番号に置き換えます。 たとえば:

    sudo mkdir -p /etc/containers/certs.d/myregistry.example.com:5000

    または、標準ユーザーの場合:

    mkdir -p $HOME/.config/containers/certs.d/myregistry.example.com:5000
  2. レジストリ・ホストからX.509証明書をコピーします。
    sudo scp user@registry_hostname:/opt/registry/certs/domain.crt \
    /etc/containers/certs.d/registry_hostname:port/ca.crt

    または、標準ユーザーの場合:

    scp user@registry_hostname:/opt/registry/certs/domain.crt \
    $HOME/.config/containers/certs.d/registry_hostname:port/ca.crt

レジストリへのイメージのインポート

プライベート・コンテナ・レジストリを設定したら、イメージをレジストリにインポートして、コンテナのデプロイに使用できます。 Oracle Container Registryなどのレジストリからイメージをプルして、ローカル・レジストリにコミットできます。 または、アップストリーム・イメージに基づいて独自のイメージを作成することもできます。

  1. レジストリからイメージをプルします。

    たとえば、Oracle Container Registryからイメージをプルします。

    podman pull container-registry.oracle.com/os/oraclelinux:9-slim
  2. イメージをタグ付けします。

    ローカル・レジストリをポイントするようにイメージにタグを付けます。 たとえば:

    podman tag container-registry.oracle.com/os/oraclelinux:9-slim myregistry.example.com:5000/ol9image:v1

    この例では、myregistry.example.com:5000はプライベート・レジストリの場所です。 これをプライベート・レジストリの場所に変更します。 同じホストで安全でないレジストリを使用している場合は、レジストリの場所にlocalhost:5000を使用できます。 この例のリポジトリおよびタグ名ol9image:v1は、有効なタグになるにはすべて小文字にする必要があります。

  3. イメージをレジストリにプッシュします。

    イメージをレジストリにプッシュします。次に例を示します。

    podman push myregistry.example.com:5000/ol9image:v1 

    セキュアでないレジストリにプッシュする場合は、--tls-verify=falseオプションを含めます。

  4. イメージがロードされていることを確認します。

    イメージをプルして、イメージがコンテナ・レジストリにロードされていることを確認します。

    まず、前のステップでプッシュされた既存のローカル・イメージを削除します。

    podman image rm ol9image:v1

    レジストリからイメージをプルします。

    podman pull myregistry.example.com:5000/ol9image:v1

    レジストリから取得されたローカル・イメージを確認します。

    podman images

イメージの作成方法の詳細は、「Buildah」を参照してください。 カスタマイズしたイメージをコミットしていた場合は、タグを付けてローカル・レジストリにプッシュできます。