機械翻訳について

11 ビルマ

Buildahユーティリティを使用して、Podmanで使用するカスタムOpen Container Initiative準拠のコンテナ・イメージを作成します。

Buildahユーティリティは、機能的にはPodmanと似ていますが、Open Container Initiative準拠のイメージを構築するためにPodmanから独立性を維持しています。 BuildahとPodmanの主な違いは、runコマンドの処理方法にあります。 Buildahの目的はイメージを構築することであるため、runコマンドは、コンテナ・イメージの作成を自動化するための設定を含む構成ファイルであるコンテナ・ファイル内のRUN文と同じように動作します。 この違いにより、Podmanで実行されている本番レベルのコンテナ・インフラストラクチャからイメージ・ビルドを分離し、既存のContainerfileビルド手順を簡単に処理できます。

Buildahを使用して、既存のレジストリからイメージをプルし、それらを変更して、より特殊な機能を備えた新しいイメージを作成します。 Buildahを既存のContainerfileとともに使用してイメージを作成するか、イメージを直接プルして、Buildah環境内で実行されているコンテナ内でイメージを変更できます。

PodmanとBuildahは同じローカル・イメージ・ストアを使用します。つまり、Buildahで構築したイメージからPodmanのコンテナを起動できます。 また、Buildahを使用した新しいイメージの構築のために使用するベース・イメージとして、Podmanでローカルにプルしていたイメージを使用することもできます。 ローカル・イメージは共有されますが、コンテナ自体はBuildahとPodmanで個別に実行されます。 PodmanはBuildahで実行しているコンテナにアクセスできません。また、BuildahはPodmanで実行しているコンテナにアクセスできません。 これは、Buildahで実行するコンテナは、新しいイメージを構築するコマンドの実行対象に使用されるためです。

Buildahでビルドしたイメージを格納するプライベート・コンテナ・レジストリを作成すると役立つ場合があります。 プライベート・レジストリを使用して、作成したイメージをプッシュし、イメージを使用してコンテナを構築する必要がある可能性がある他のPodmanクライアントからプルできます。 レジストリの作成の詳細は、プライベート・コンテナ・レジストリを参照してください。

Containerfile形式およびビルド手順の詳細は、containerfile(5)マニュアル・ページを参照してください。

Buildahコマンドの完全なリストについては、buildah --helpコマンドを使用するか、buildah(1)マニュアル・ページを参照してください。

ノート:

ほとんどのBuildah操作では、sudoを使用する必要はありません。 Buildahを標準ユーザーとして使用することをお薦めします。 特権アクセスが必要な場合、buildah unshareコマンドを使用して、特権Buildahシェルに入ります。 詳細は、buildah-unshare(1)マニュアル・ページを参照してください。

コンテナファイルからのイメージの作成

buildah buildコマンドを使用して、コンテナ・ファイルからコンテナ・イメージを構築します。

Buildahは、既存のContainerfileと直接連携するように設計されており、buildah buildコマンド(buildah build-using-dockerfileおよびbuildah budコマンドの別名)を使用してファイルを処理してコンテナ・イメージを構築します。 buildah buildコマンドは、docker buildコマンドと同様に動作します。

ContainerfileまたはDockerfileのデフォルトのファイル名を使用して、コンテナ・イメージを指定できます。 別のファイル名またはファイル拡張子を持つ名前を使用する場合、buildah buildコマンドに-fオプションを指定しないかぎり、これらは認識されません。

buildah commitコマンドの使用方法の詳細は、buildah-commit(1)マニュアル・ページを参照してください。

  1. コンテナファイルを作成します。

    コンテナ・イメージの内容を指定するContainerfileを検索または作成します。 たとえば、次のものを含むContainerfileという名前のファイルを作成します。

    # This image is based on the latest Oracle Linux 9 image
    FROM container-registry.oracle.com/os/oraclelinux:9
    
    # Install OS updates and the httpd software package
    RUN echo "Updating all Oracle packages"; dnf -y update; dnf -y clean all
    RUN echo "Installing the httpd software package"; dnf -y install httpd && dnf -y clean all
    
    # Expose the default httpd server port 80
    EXPOSE 80
    
    # Run the httpd server
    CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
  2. Containerfileからイメージを作成します。

    buildah buildコマンドを使用して、コンテナ・ファイルをビルドします。 イメージにタグを付けるには、--tagオプションを含めます。 --fileオプションを含めて、ファイルがデフォルトのネーミングを使用しない場合、またはファイル拡張子を含む場合は、コンテナ・ファイル名を指定します。 たとえば:

    buildah build --tag myimage .

    イメージはビルドされ、タグ付けされ、ローカル・イメージ・リストに追加されます。

  3. イメージを検証します。

    新しいイメージが使用可能であることを確認するには、buildah imagesコマンドを使用します。 たとえば:

    buildah images

    この例では、イメージはローカルPodmanストレージ(BuildahとPodmanの両方で使用)にあり、出力は次のようになります。

    REPOSITORY                      TAG                IMAGE ID       CREATED          SIZE
    localhost/myimage               latest             761c8f4b4f98   6 minutes ago    279 MB
  4. コンテナでイメージを起動できることを確認します。

    buildah fromコマンドを使用すると、イメージを使用するコンテナを起動できます。 たとえば:

    buildah from myimage
  5. コンテナが起動していることを確認します。

    buildah containersコマンドを使用して、コンテナが実行中であることを示します。 たとえば:

    buildah containers 

    出力は次のようになります:

    CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME
    076b44920a9a     *     761c8f4b4f98 localhost/myimage:latest         myimage-working-container

イメージからのBuildahコンテナの作成

コンテナ・レジストリからイメージをプルし、それを使用してBuildahコンテナを作成します。

Buildahは、Podmanを使用してイメージをプルする場合と同様に、buildah pullコマンドを使用してコンテナ・レジストリからイメージをプルできます。 buildah fromコマンドを使用して、イメージからBuildahコンテナを起動します。 これらのコマンドは個別に実行することも、結合することもできます。

  1. イメージをプルします。

    buildah pullコマンドを使用して、コンテナ・レジストリからイメージをプルします。 たとえば:

    buildah pull container-registry.oracle.com/os/oraclelinux:9-slim
  2. イメージからBuildahコンテナを起動します。

    buildah fromコマンドを使用して、イメージからBuildahコンテナを起動します。 たとえば:

    buildah from oraclelinux:9-slim

    ヒント:

    buildah pullコマンドとbuildah fromコマンドを組み合せて、リモート・レジストリでホストされているイメージからコンテナを起動できます。 たとえば:

    buildah from container-registry.oracle.com/os/oraclelinux:9-slim
  3. コンテナが起動していることを確認します。

    buildah containersコマンドを使用して、コンテナが実行中であることを示します。 たとえば:

    buildah containers 

    出力は次のようになります:

    CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME
    ea27cc0312ba     *     bc1c39bd670d localhost:5000/ol9image:v1       oraclelinux-working-container

イメージの変更

Buildahコンテナと対話して、ソフトウェアのインストール、ファイルの追加、およびコンテナのボリュームのマウントを行います。

イメージを変更するには、Buildah内でコンテナ・インスタンスとして実行し、buildah runコマンドを使用します。 このコマンドは、ContainerfileRUN文と同様に機能します。 たとえば、buildah runコマンドを使用して、パッケージのインストールやOSの変更など、Buildahコンテナのシェル・コマンドを実行できます。

buildah copybuildah mountなどの他のコマンドを使用して、Buildahコンテナと対話することもできます。

この例の多くは、Oracle Linux 9イメージを含むBuildahコンテナがすでに作成および実行されていることを前提としています。 このコンテナを作成するコマンドは次のとおりです。

container=$(buildah from container-registry.oracle.com/os/oraclelinux:9)

Buildahコンテナ名は$container変数として設定され、例を簡単に試すことができます。

例11-1 Buildahコンテナへのパッケージのインストール

buildah runコマンドを使用して、コンテナにソフトウェア・パッケージをインストールします。 この例では、nginxをインストールします。

buildah run $container dnf -y install nginx

例11-2 Buildahコンテナでのシェル・コマンドの実行

buildah runコマンドを使用して、Oracle LinuxリリースをBuildahコンテナに表示します。

buildah run $container cat /etc/oracle-release

出力は次のようになります:

Oracle Linux Server release 9.6

例11-3 Buildahコンテナへのファイルのコピー

buildah copyコマンドを使用して、Buildahコンテナにファイルをコピーします。

コンテンツを含むmytext.txtという名前のファイルを作成します。 たとえば:

This is some text.

mytext.txtファイルをコンテナの/tmpディレクトリにコピーします。

buildah copy $container mytext.txt /tmp 

buildah runコマンドを使用して、catコマンドを使用してファイルの内容を表示します。

buildah run $container cat /tmp/mytext.txt

出力は次のようになります:

This is some text.

例11-4 Buildahコンテナのボリュームのマウント

ローカル・ホストにルート・ファイル・システムをマウントすることで、作業コンテナ内でファイルを変更できます。

まず、昇格された権限を持つBuildahネームスペースに入る必要があります。 これは、ルートレスモードでオーバーレイドライバを使用し、Buildah unshareセッションと呼ばれます。 詳細は、buildah-unshare(1)マニュアル・ページを参照してください。

buildah unshare

コマンドライン・ユーザーがユーザーを表示するように変更すると、rootになります。

共有解除セッションにコンテナを作成し、コンテナのボリュームをマウントします。

container=$(buildah from oraclelinux:9)
mnt=$(buildah mount $container)

これで、ボリューム・マウントを操作できます。 たとえば、コンテナのボリュームにソフトウェア・パッケージをインストールします。

dnf install --installroot $mnt httpd

終了したら、コンテナをアンマウントします。

buildah unmount $container

exitコマンドを使用して元のシェルに戻ります。

イメージへのBuildahコンテナのコミット

コンテナへの変更が完了したら、buildah commitコマンドを使用して、Buildahコンテナの現在のステータスに基づいて新しいイメージを生成します。

Buildahコンテナへの変更は、イメージにコミットされるまで一時的です。 Buildahイメージをローカル・ストレージにコミットして、Podmanですぐに使用できるようにします。 Buildahには、イメージをコンテナ・レジストリにプッシュするオプションも用意されており、ユーザー認証や証明書検証など、レジストリで認証するオプションもあります。 レジストリへの書込みアクセス権を持っている必要があるため、この目的でプライベート・レジストリを作成すると役立つ場合があります。 プライベート・レジストリの作成と使用の詳細は、プライベート・コンテナ・レジストリを参照してください。

Buildahコンテナに対する変更をイメージに永続的に格納するには、buildah commitコマンドを使用します。 buildah commitコマンドの使用方法の詳細は、buildah-commit(1)マニュアル・ページを参照してください。

例11-5ローカル・ストレージへのBuildahイメージのコミット

Buildahコンテナをローカル・ストレージのイメージにコミットします。 --rmオプションを含めて、Buildah環境から作業用コンテナを同時に削除します。

buildah commit --rm oraclelinux-working-container myol9:v1

イメージが作成されたことを確認するには、次を使用します。

buildah images

出力は次のようになります:

REPOSITORY                     TAG                IMAGE ID       CREATED         SIZE
localhost/myol9                v1                 6afd745ed1cf   8 seconds ago   519 MB

例11-6プライベート・セキュア・レジストリへのBuildahイメージのコミット

Buildahコンテナをコミットし、イメージをプライベート・セキュア・レジストリにプッシュします。

buildah commit --rm oraclelinux-working-container docker://myregistry.example.com:5000/myol9:v1

レジストリに直接コミットすることは、ローカル・コミットを実行してから、後でbuildah pushコマンドを使用してレジストリにプッシュすることと同じです。

Buildahを使用してイメージをプルできることを確認します。

buildah pull myregistry.example.com:5000/myol9:v1

例11-7セキュアでないプライベート・レジストリへのBuildahイメージのコミット

Buildahコンテナをコミットし、イメージをローカルの安全でないレジストリにプッシュします。

buildah commit --tls-verify=false --rm oraclelinux-working-container docker://localhost:5000/myol9:v1

Buildahを使用してイメージをプルできることを確認します。

buildah pull --tls-verify=false localhost:5000/myol9:v1

レジストリへのイメージのプッシュ

buildah pushコマンドを使用して、コンテナ・イメージをローカル・ストレージからコンテナ・レジストリにプッシュします。

BuildahとPodmanはイメージを同じように処理するため、イメージの操作に使用するコマンドのほとんどは、これらのツール間でレプリケートされ、同じ操作を実行します。 たとえば、buildah pushコマンドとpodman pushコマンドは同じように動作します。 これらのコマンドのいずれかを使用して、書込みアクセス権があるコンテナ・レジストリにイメージをプッシュできます。 レジストリへの書込みアクセス権がまだない場合は、イメージをプッシュおよび共有するプライベート・レジストリを作成できます。 レジストリの作成の詳細は、プライベート・コンテナ・レジストリを参照してください。

BuildahとPodmanは、画像を他のフォーマットにプッシュすることもできます。 つまり、レジストリへのアクセス権がない場合は、共有および再利用できるアーカイブ形式を作成できます。 たとえば、Docker互換のアーカイブを作成して、docker saveコマンドの使用と同様のアーカイブ・ファイルを作成できます。 次の形式を使用します。

buildah push imagename docker-archive:/path/to/archive-file:image:tag

コマンドのdocker-archiveoci-archiveに変更して、Open Container Initiativeの仕様に準拠したアーカイブを生成します。

buildah pushコマンドの詳細は、buildah-push(1)マニュアル・ページを参照してください。

例11-8セキュアなプライベート・レジストリへのイメージのプッシュ

buildah push ol9image:v1 docker://myregistry.example.com:5000/myol9:v1

Buildahを使用してイメージをプルできることを確認します。

buildah pull myregistry.example.com:5000/myol9:v1

例11-9セキュアでないプライベート・レジストリへのイメージのコミット

buildah push --tls-verify=false ol9image:v1 docker://localhost:5000/myol9:v1

Buildahを使用してイメージをプルできることを確認します。

buildah pull --tls-verify=false localhost:5000/myol9:v1

例11-10 Docker互換アーカイブ・ファイルの作成

buildah push ol9image:v1 docker-archive:/tmp/ol9image.tar:myol9:v1

アーカイブ・ファイルは、イメージを含む/tmp/ol9image.tarに作成されます。

Buildahコンテナの削除

buildah rmコマンドを使用して、Buildahコンテナを削除します。 このコマンドは、Podmanコンテナには影響しません。

buildah rmコマンドは、コンテナを停止し、Buildahコンテナ・リストから削除します。 作業中のコンテナを削除し、設定されている可能性のあるボリューム・マウントをアンマウントします。 コンテナが削除されると、作業コンテナに加えた変更は失われ、コンテナを削除する前にそのコンテナのイメージを作成していないかぎり取得できません。

buildah rmは、Buildah環境から作業用コンテナのみを削除します。 Podmanで実行されているコンテナ、または既存のイメージは影響を受けません。

buildah rmコマンドの使用方法の詳細は、buildah-rm(1)マニュアル・ページを参照してください。

また、buildah commitコマンドに--rmオプションを指定して作業中のコンテナをコミットし、Buildahコンテナ・リストから同時に削除することで、イメージへのコミット時にコンテナを削除することもできます。 イメージへのBuildahコンテナのコミットを参照してください。

例11-11 Buildahコンテナの削除

buildah rm oraclelinux-working-container

例11-12すべてのBuildahコンテナの削除

buildah rm --all

イメージの削除

buildah rmiコマンドを使用してイメージを削除します。 これにより、Podman内のイメージも削除されます。

buildah rmiコマンドは、BuildahおよびPodmanイメージ・リストからイメージを削除します。 イメージはPodmanとBuildahの間で共有されるため、このコマンドでイメージを削除すると、Podmanでも削除されます。

buildah rmiコマンドの使用方法の詳細は、buildah-rmi(1)マニュアル・ページを参照してください。

例11-13イメージの削除

buildah rmi localhost/myimage:latest

例11-14すべてのイメージの削除

buildah rmi --all

イメージまたはコンテナの検査

buildah inspectコマンドは、Buildahで作成されたイメージまたはコンテナのメタデータおよび履歴を出力します。 出力はJSON配列であり、イメージまたはコンテナに関する履歴変更およびその他の情報を識別するのに役立ちます。

buildah inspectコマンドの使用方法の詳細は、buildah-inspect(1)マニュアル・ページを参照してください。

例11-15コンテナの検査

buildah inspectコマンドを使用して、コンテナを検査します。

buildah inspect image --type container oraclelinux-working-container

例11-16イメージの検査

buildah inspectコマンドを使用して、イメージを検査します。

buildah inspect --type image myol9:v1