Podman と Quarkus を一緒に使用する
Podman は、Linux、Windows、Mac上でOCIコンテナを開発、管理、実行するための、オープンソース、デーモンレス、ルートレスのコンテナエンジンです。 Podmanは、Quarkusのコンテナ機能とDev Servicesのサポートに使用できます。
Podman のインストール
Podmanのインストール方法はお使いのオペレーティングシステムによって異なり、必要な手順もPodmanのバージョンによって変化します。MacとWindowsの場合は、Podman Desktopグラフィカルアプリケーションからのインストールを強くお勧めします。最もシンプルで手順が少なく、自動起動などの機能が追加され、将来のアップデートの管理にも役立ちます。CLIのみのオプションもあります。ただし、このセットアップでは、Podman Machine環境の管理、更新、起動に手動タスクが追加されます。
MacのHomebrewパッケージマネージャ (brew) を 使ってPodmanをインストールしてはいけません 。これは、Homebrew がプロジェクト間で依存関係を共有していることと、アップグレード要求の審査が限られていることが原因です。例として、qemu へのアップデートが Apple Silicon 上で壊れ、Podman マシンの VM が起動できなくなることがいくつかありました。 |
Linuxでは、Podmanはオペレーティングシステムの一部として統合され、システムのパッケージャマネージャを通じてインストールされます。MacやWindowsと同様に、Podman CLIを補完するためにPodman Desktopをインストールすることもできます。ただしLinuxでは、Podman DesktopはネイティブPodman統合のクライアントとして動作し、基盤となるPodmanのインストールは管理しません。
See https://podman-desktop.io/downloads/ for the latest version of Podman Desktop.
また、Linuxを使用している場合は、Podman Linuxインストールドキュメント を参照して、Podmanを特定のLinuxディストリビューションにインストールする手順を確認してください。
プラットフォームの差異
コンテナとのやり取りはMac、Windows、Linuxの間でほとんど同じですが、注意すべき重要な環境の違いがあります。特に、「コンテナはLinux」であるため、コンテナの実行方法が異なります。具体的には、コンテナはLinuxカーネル・システムコール・インターフェースに依存するLinuxユーザーランド・バイナリです。そのため、LinuxコンテナはmacOSやWindows上でネイティブに実行できません。代わりに、Linuxを実行する仮想マシン(VM)を使用してコンテナをホストする必要があります。それが必要なシステムのために、PodmanにはこのVMを管理するためのPodman Machineというサブシステムが含まれています。Podman Desktopは、このVMのガイド付き対話型セットアップを行い、あなたの代わりに自動的に起動します。
Rootful vs Rootless
Podmanは2つの動作モードをサポートしています:コンテナがLinuxホスト(Mac/Windowsの場合はVM)上でrootとして実行されるrootfulと、コンテナが標準的なUnixユーザーアカウントで実行されるrootlessです。後者は大幅に強力なセキュリティを提供しますが、一部のコンテナは、強化された制限の下で実行できません。例として、コンテナが新しいデバイスを作成したり、マウントポイントをループバックしたり、その他の高度に制限された操作を実行したりする場合は、rootとして実行する必要があります。これは、Containerfile/Dockerfile で指定される USER 値と混同しないように注意してください。ルートレスでは、USER が「root」であるコンテナ内で実行されているプロセスは、互いに root として表示されますが、pid ネームスペーシングにより、実際にはホストシステム上の標準的な制限付きユーザーアカウントとして実行されます。
WinとMacでの設定
Podmanマシンが管理するVM(MacとWindows)を含むシステムでは、コンテナクライアントとPodmanコマンドはVMを実行しているルートフルまたはルートレスシステムサービスにリモートで通信します。どちらを使用するかは、Podmanマシンの rootful
設定によって決まります。最大限の互換性を実現するため、Podman Desktopのデフォルトでは、新しいマシンインスタンスに対してrootfulを有効にします。VM自体はユーザープロセスで実行されるため、セキュリティへの影響は限定的です。これはpodmanコマンドで変更することもできます:
podman machine set --rootful=true # or false
podman machine stop
podman machine start
その他のLinux設定
イメージの略称
Testcontainers と Quarkus Dev Services も、リクエストするコンテナサービスが非インタラクティブであることを期待しています。Docker または Podman の設定で複数のレジストリを構成している場合、およびイメージの略称を使用している場合、Podman は、どのレジストリを使ってコンテナを引き出すべきかを尋ねるプロンプトで応答します。
略称の使用は避けて、レジストリーを含め常に完全に指定された名前を使うことをお勧めしますが、残念ながら現時点で Testcontainers は内部的に略称に依存しています。もし Testcontainers を直接または Dev Services を通して使用している場合、/etc/containers/registries.conf
で Podman の short-name-mode="disabled"
設定プロパティーを設定して、このプロンプトを無効にする必要があります。