The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

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のインストールは管理しません。

Podman Desktopの最新バージョンは https://podman-desktop.io/downloads/ 、または以下のリストからお使いのオペレーティングシステムに合ったバージョンをお選びください:

また、Linuxを使用している場合は、Podman Linuxインストールドキュメント を参照して、Podmanを特定のLinuxディストリビューションにインストールする手順を確認してください。

Docker互換モード

MacまたはWindowsにPodman Desktopをインストールする際、プロンプトが表示されたらDocker互換モードを有効にすることが重要です。これにより、/var/run/docker.sock(特権ロケーション)をサポートするために必要なPodman-Mac-helperがあなたの代わりにセットアップされます(通常は起動後に手動で行うよう促されます)。また、Docker Compose のサポートもインストールされます。

プラットフォームの差異

コンテナとのやり取りは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での設定

Linux システムでは、ユーザー systemd サービスを使ってルートレス構成でクライアントアクセスを設定することをお勧めします。

これは以下のコマンドで有効にできます:

systemctl --user enable podman.socket --now

Linux での DOCKER_HOST の設定

Linux 上で上記のルートレスセットアップを行う場合、Quarkus や testcontainers などのクライアントを設定する必要があります。この場合、 DOCKER_HOST 環境変数を設定して、ユーザーサービスの podman ソケットを指すようにします。パスは、podmanコマンドを使用してパスをクエリする式を使用して設定します:

export DOCKER_HOST=$(podman info --format '{{.Host.RemoteSocket.Path}}')

その他のLinux設定

イメージの略称

Testcontainers と Quarkus Dev Services も、リクエストするコンテナサービスが非インタラクティブであることを期待しています。Docker または Podman の設定で複数のレジストリを構成している場合、およびイメージの略称を使用している場合、Podman は、どのレジストリを使ってコンテナを引き出すべきかを尋ねるプロンプトで応答します。

略称の使用は避けて、レジストリーを含め常に完全に指定された名前を使うことをお勧めしますが、残念ながら現時点で Testcontainers は内部的に略称に依存しています。もし Testcontainers を直接または Dev Services を通して使用している場合、/etc/containers/registries.conf で Podman の short-name-mode="disabled" 設定プロパティーを設定して、このプロンプトを無効にする必要があります。

関連コンテンツ