7.11. オフライン環境およびエアギャップ環境でイメージモード更新をデプロイする


Image Mode for Red Hat Enterprise Linux を使用すると、コンテナーイメージを外部ストレージで転送することで、オフライン環境やエアギャップ環境の RHEL システムに対しても更新をデプロイできます。

イメージモードの更新をホストマシンにデプロイするには、レジストリーにアクセスして更新を取得するためのネットワーク接続が必要です。ただし、ハードウェア仕様、厳格なセキュリティー要件、場所に基づくネットワーク制限、リモートアクセスが利用できない場合のスケジュールされた更新など、運用環境で特定のアーキテクチャー要素が求められる場合は、システム更新を完全にオフラインかつエアギャップで実行できます。

注記

オフライン更新を多数のデバイスに対して実行する場合、多大な時間を要する可能性があります。また、更新のデプロイにはオンサイト対応が必要になる場合があります。

前提条件

  • システムに対して行いたい更新が実行中の RHEL システムに含まれている。
  • 対象ハードウェア上に、Red Hat Enterprise Linux 10 がデプロイされた稼働中の RHEL システム。
  • container-tools メタパッケージがインストールされている。meta-package には、Podman、Buildah、Skopeo などのすべてのコンテナーツールが含まれます。
  • レジストリーまたはローカルに保存されたコンテナーへのアクセス。
  • 更新が必要なコンテナー用の外部ストレージデバイス。

手順

  1. システムにすでに接続されているストレージデバイスを確認します。

    $ lsblk
    NAME          MAJ:MIN     SIZE   RO TYPE  MOUNTPOINTS
    zram0           251:0       8G    0 disk  [SWAP]
    nvme0n1         259:0   476.9G    0 disk
    ├─nvme0n1p1    259:1     600M    0 part  /boot/efi
    ├─nvme0n1p2    259:2       1G    0 part  /boot
    └─nvme0n1p3    259:3   475.4G    0 part
  2. 外部ストレージを接続して、同じコマンドを実行します。2 つの出力結果を比較して、システム上の外部ストレージデバイスの名前を確認します。

    $ lsblk
    NAME        MAJ:MIN   SIZE   RO TYPE  MOUNTPOINTS
    sda             8:0   28.9G    0 disk
    └─sda1         8:1   28.9G    0 part
    zram0         251:0      8G    0 disk  [SWAP]
    nvme0n1       259:0  476.9G    0 disk
    ├─nvme0n1p1  259:1    600M    0 part  /boot/efi
    ├─nvme0n1p2  259:2      1G    0 part  /boot
    └─nvme0n1p3  259:3  475.4G    0 part

    この場合、sda という名前の USB ドライブには sda1 パーティションがあります。

    MOUNTPOINTS 列には、外部ストレージ上のパーティションのマウントポイントがリスト表示されます。システムが外部ストレージを自動的にマウントする場合、有効なマウントポイントはすでに存在します。ただし、マウントポイントがない場合は、デバイスに保存する前に、自身分でマウントする必要があります。

  3. パーティションをマウントするには、空のディレクトリーを作成するか、既存のディレクトリーを使用します。

    $ sudo mkdir /mnt/usb/
    1. デバイスのパーティションをマウントします。

      $ sudo mount /dev/sda1 /mnt/usb
    2. オプション: パーティションが正しく作成されたか確認します。

      $ lsblk
      NAME         MAJ:MIN    SIZE   RO TYPE  MOUNTPOINTS
      sda              8:0   28.9G    0 disk
      └─sda1          8:1   28.9G    0 part  /mnt/usb
      [...]

      外部ストレージデバイスにファイルをコピーする準備が整いました。

  4. skopeo コマンドを使用して、ローカルに保存されているコンテナーをマウントされたデバイスにコピーし、コンテナーのパスと名前を自身の環境に合わせて変更します。

    • ローカルストレージの場合:

      $ sudo skopeo copy --preserve-digests --all \
        containers-storage:localhost/rhel-container:latest \
        oci://mnt/usb/
    • リモートレジストリーに保存されているコンテナーの場合:

      $ sudo skopeo copy --preserve-digests --all \
        docker://quay.io/example:latest \
        oci://mnt/usb/
      注記

      コンテナーのサイズによっては、これらのコマンドが完了するまで数分かかる場合があります。

  5. 外部ストレージをアンマウントし、取り出します。

    $ sudo umount /dev/sda1
    $ sudo eject /dev/sda1
  6. オフラインシステムのコンテナーに更新を適用します。
  7. 外部ストレージデバイスをオフラインシステムに接続します。ストレージデバイスが自動的にマウントされない場合は、mkdirmount コマンドを使用して外部ストレージの場所を特定し、マウントします。
  8. コンテナーを外部デバイスからオフラインシステムのローカルコンテナーレジストリーにコピーします。コンテナーをオフラインマシンのローカルコンテナーストレージにコピーします。

    $ skopeo copy --preserve-digests --all \
      oci://mnt/usb \
      containers-storage:rhel-update:latest

    この場合、外部ストレージのマウントポイントが OCI セクションへのパスとなります。containers-storage セクションの内容は、コンテナーに付ける名前やタグによって異なります。

  9. Podman を使用して、コンテナーがローカルに存在することを確認します。

    $ podman images
    REPOSITORY			        TAG     IMAGE ID  CREATED  SIZE
    example.io/library/rhel-update   latest  cdb6d...  1 min    1.48 GB
  10. bootc を使用して、オフラインシステムのコンテナーに更新をデプロイします。

    $ bootc switch --transport containers-storage \
    example.io/library/rhel-update:latest
    1. コンテナーをローカルストレージにコピーできない場合は、代わりに oci transport フラグとストレージデバイスへのパスを使用します。

      $ bootc switch --transport oci /mnt/usb

      bootc switch コマンドの --transport フラグを使用すると、コンテナーの代替ソースを指定できます。

      デフォルトでは、bootc はレジストリーからイメージをプルしようとします。これは、bootc-image-builder がレジストリーを使用して元のイメージをビルドするためです。bootc upgrade を使用する場合、更新の場所を指定できません。bootc switch を使用し、ローカルコンテナーストレージを使用することを指定することで、リモートレジストリーの必要性を排除できるだけでなく、将来的にこのローカルコンテナーを使用して更新をデプロイすることも可能になります。

      ローカルのコンテナーと更新が同じ場所に配置されている場合、bootc upgrade を正常に実行できるようになりました。今後、リモートリポジトリーの更新に切り替えたい場合は、再度 bootc switch を使用する必要があります。

検証

  1. 更新が正しくデプロイされたことを確認します。

    $ bootc status
    Staged image: containers-storage:example.io/library/rhel-update:latest
      Digest: sha256: 05b1dfa791...
      Version: 10.0 (2025-07-07 18:33:19.380715153 UTC)
    Booted Image: localhost/rhel-intel:base
      Digest: sha256: 7d6f312e09...
      Version: 10.0 (2025-06-23 15:58:12.228704562 UTC)

    出力には、現在起動中のイメージと、適用が予定されているステージングされた変更内容が表示されます。以前使用したコンテナーは表示されますが、ステージングされた変更は次回の再起動まで反映されません。出力結果から、更新がコンテナーストレージからプルされることも確認できます。

  2. システムを再起動します。

    $ bootc status
    Booted image: containers-storage:example.io/library/rhel-update:latest
    	Digest: sha256: 05b1dfa791...
    	Version: 10.0 (2025-07-07 18:33:19.380715153 UTC)
    Rollback image: localhost/rhel-intel:base
    	Digest: sha256: 7d6f312e09...
    	Version: 10.0 (2025-06-23 15:58:12.228704562 UTC)

    正しいイメージで起動したか確認できます。

    • 起動したイメージは、更新されたイメージです。
    • ロールバックイメージは、以前のイメージです。オフラインイメージモードの更新が正常に完了しました。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る