Podmanはじめました

Podman

そろそろ冷やし中華が恋しい季節ですが、DockerからPodmanに乗り換える流れがあるようなので、乗り換え云々は置いといて、まずは使ってみようという試みです。

Podman

Podmanとは

Podmanは、Open Containers Initiative(OCI)コンテナとコンテナイメージを使用して、アプリケーションを簡単に見つけ、実行、ビルド、共有、展開できるように設計されたデーモンレスのLinuxネイティブツールです。 Podmanは、Dockerコンテナエンジンを使用した人に馴染みのあるコマンドラインインターフェイス(CLI)を提供します。ほとんどのユーザーは、問題なくPodman(Alias docker = Podman)にDockerをエイリアスすることができます。他の一般的なコンテナエンジン(Docker、Cri-O、Containd)と同様に、PodmanはOCI準拠のコンテナランタイム(Runc、Crun、Runvなど)に依存して、オペレーティングシステムとインターフェイスし、実行中のコンテナを作成します。これにより、Podmanによって作成された実行中のコンテナが、他の一般的なコンテナエンジンによって作成されたコンテナとほとんど区別できなくなります。

Podmanとは | Podman Documentation

次の5点がセールスポイントのようです。

▼1.速くて軽い:

  デーモンレス、最速の技術を使用、UIがリアクティブで軽い。

▼2.セキュア:

  ルートレスコンテナで機能を損なうことなく権限を含めることが可能。

▼3.オープン:

  オープンソース、Podman Desktopで他のコンテナエンジンのコンテナも管理可能。

▼4.互換性:

  Dockerを含む他のOCI準拠コンテナ形式と互換。PodmanでDockerコンテナ(Docker-Composeファイルを含む)を実行可能。

▼5.Kubernetesレディ:

  ポッドを作成、開始、検査、および管理しKubernetes YAMLをPodmanで直接再生可。PodsからKubernetes YAMLを生成し、既存のKubernetes環境にデプロイ可。

この記事のゴール

  • Podman DesktopをWindows11にインストール
  • Podman Machine (WSL2インスタンス) を作成
  • 既存のUbuntu24.04 (WSL2) 内でPodmanと連携する
  • 目指す構成は下図の通り

既存環境情報

  • Windows11使用
  • Ubuntu24.04 (WSL2)
  • Docker Desktop 4.40

▼使用中のDockerコンテナ

Podman Desktop インストールの要件

前提条件
PodmanはWSLを使用しているため、Windows 10またはWindows 11の最近のリリースが必要です。X64では、WSLには18362以降のビルドが必要であり、ARM64システムには19041以降が必要です。内部的には、WSLは仮想化を使用するため、システムはサポートし、ハードウェア仮想化を有効にする必要があります。 VMでWindowsを実行している場合は、ネストされた仮想化をサポートするVMが必要です。

また、最新の「Windowsターミナル」をインストールすることをお勧めします。これは、標準のPowerShellおよびCMDプロンプトに優れたユーザーエクスペリエンスを提供し、WSLプロンプトが必要な場合はWSLプロンプトを提供します。

Windowsストアを検索するか、次のWingetコマンドを実行してインストールできます。

winget install Microsoft.WindowsTerminal
前提条件 | Podman for Windows

Podman Desktop インストール

https://podman-desktop.io/downloads にアクセスします。

「Download Now」ボタンからダウンロードします。

ダウンロードしたファイルを実行します。

ネットワークへのアクセス許可を求められるので許可します。

すぐにインストールが完了して Podman Desktop が起動します。

今回、上記画面はとりあえず「Skip」してダッシュボードに移動します。

※PowerShellのターミナルから Winget コマンドでもインストールできるようですが、今回はスキップします。

winget install -e --id RedHat.Podman-Desktop

Podman Machine作成

Podman Desktop はGUIと、Podman Machineとの連携機能をもったツールです。

Podman MachineをWSL2インスタンスとして作成する必要があります。

前段階として、Windows上にPodmanをインストールします。

Podman Desktop の「Settings」>「Resouces」を開き、

「Podman」の「Setup」ボタンを押下します。

「Next」ボタンを押下します。

Podmanをインストールするか訊かれるので「Yes」ボタンを押下します。

「Windows Linux Subsystem (WSLv2)」を選択して「Install」ボタンを押下します。

インストールが完了したら「Close」ボタンを押下します。

これでWindows上にPodmanがインストールされました。

続いて、WSL2インスタンスとしてのPodmanを作成していきます。

Podman Desktopの画面に戻ると下図のようになっているので「Next」ボタンを押下します。

「Podman machine」が見つからないと言われるので「Next」ボタンを押下します。

「Podman machine」の作成画面に遷るので、設定変更せずにそのまま画面右下の「Create」ボタンを押下します。

「Podman machine」の作成が完了すると下図の画面になります。

「Next」ボタンを押下すると、「Podman Machine」の稼働状況が表示されます。

Podman Machine動作確認

これでPodman Machineの作成と起動ができました。動作確認してみます。

公式ドキュメントでは「Windows Terminal」の使用が推奨されています。

Microsoft Storeからインストールするか、

またはPowerShellの winget コマンドでインストールすることもできます。

winget install Microsoft.WindowsTerminal

Windows Terminalを開いて、PowerShellのプロンプトからWSL2のインスタンスを確認してみます。

wsl -l

「podman-machine-default」が作成されています。

Windows Terminalのタブの右側にある「∨」をクリックすると「podman-machine-default」が表示されるので、選択するとPodman Machineのターミナルが表示されます。

Fedora上で動いていることがわかります。

では、PowerShellのターミナルからイメージをpullしてコンテナ起動をしてみます。

podman run quay.io/podman/hello

Podman Desktopの「Images」の画面にpullしたイメージが表示されました。

Containersにも表示されています。

では、コンテナとイメージを削除してみます。

podman rm --all
podman rmi --all

Podman Desktopのコンテナ一覧とイメージ一覧から削除されています。

Podman Remote インストール

続いて、Ubuntu24.04側からPodman Machineと連携できるように、

Ubuntu24.04側にPodman Remoteをインストールしていきます。

Podman の GithubリポジトリのReleasesページから

Releases · containers/podman
Podman: A tool for managing OCI containers and pods. - containers/podman

最新版の「podman-remote-static-linux-amd64.tar.gz」をダウンロードします。

Ubuntu24.04のターミナルでwgetコマンドでダウンロードします。

wget https://github.com/containers/podman/releases/download/v5.4.2/podman-remote-static-linux_amd64.tar.gz

tarコマンドで解凍すると、binディレクトリ内に展開されます。

tar xfz podman-remote-static-linux_amd64.tar.gz

展開されたファイルを「/usr/local/bin」に「podman」として移設します。

sudo mv ./bin/podman-remote-static-linux_amd64 /usr/local/bin/podman

一応、解凍時点で実行パーミッションは付与されていますが、

念のため、実行パーミッションを付与しなおしておくと安心です。

sudo chmod +x /usr/local/bin/podman

バージョンを確認してみます。

podman --version

Podman Remote用の設定

Podman Remoteのリモート接続の手段には複数ありますが、

今回は、WSL2のpodman-machineのソケットを使います。

まずはソケットのパーミッションを確認します。

ls -l /mnt/wsl/podman-sockets/podman-machine-default
ソケットパーミッションオーナーグループ備考
podman-root.socksrw-rw—-rootuucproot接続用
podman-user.socksrw-rw—-ubuntulxduser接続用

このままだと、Ubuntuユーザーの読み書き権限が無いので、

Ubuntuユーザーを該当グループに所属させます。

ログインし直すことで設定が反映されるので、一度exitします。

sudo usermod --append --groups lxd $(whoami)
sudo usermod --append --groups uucp $(whoami)
exit

再度Ubuntu24.04のターミナルを開いて確認すると、

所属グループに uucp と lxd が追加されています。

続いて、コネクションの設定をします。

podman system connection list

root接続用のソケットとuser接続用のソケットを設定に追加します。

podman system connection add podman-machine-default-root unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock
podman system connection add podman-machine-default-user unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-user.sock

これで接続の設定は完了です。

Podman Machineへの接続を確認していきます。

まずはバージョンから。

podman version

Server側のバージョンが表示されました。

では、イメージ pull & コンテナ run をしていきます。

podman run quay.io/podman/hello

Podman Desktop側のContainersに追加されました。

Podman Remoteから接続できない場合

Ubuntu24.04側のユーザーの環境変数に

CONTAINER_CONNECTION=podman-machine-default-root

を設定するといけるかもしれません。

「~/.bashrc」に追記しておくと良いかもしれません。

export CONTAINER_CONNECTION=podman-machine-default-root

ログインし直すか、「source」コマンドで反映させます。

source ~/.bashrc

Podman Desktop使用後にDocker Desktopを起動する場合

Podman MachineおよびPodman Desktopが稼働中にDocker Desktopを起動しようとすると、エラーが出て起動しません。

一旦「Quit」ボタンを押下してDocker Desktopを終了します。

次に、Podman Desktopの設定をしておきましょう。

「Settings」>「Preferences」を開いて、

「Exit On Close」を「Enabled」にします。

続いて、「Start on login」を「Disabled」にします。

その後、Podman Machineを停止させます。

Podman Desktopの「Settings」>「Resources」>「Podman extension」の停止ボタンを押下します。

Podman machineの状態が「RUNNING」から「OFF」に変わったら、

Podman Desktopを閉じます。

念のために、PowerShellのプロンプトでpodman-machineが動いていないか確認しましょう。

wslコマンドで稼働中のディストリビューションを確認します。

wsl -l --running

「podman-machine-default」が表示されなければOKです。

「podman-machine-default」が表示されている場合は、

wslコマンドで「podman-machine-default」を強制終了させます。

wsl --terminate podman-machine-default

※Podman MachineをWSLコマンドで強制終了させると、Podman Desktopとの連携が不安定になります。

OSを再起動するか、またはサインアウトしてサインインし直すと

Docker Desktopが起動するようになります。

※シャットダウンやサインアウトは不要です。

WindowsのタスクトレイにPodman Desktopが潜んでいることがあります。

タスクトレイ内のPodman Desktopのアイコンを右クリック > Qtuit を選択することで Podman Machineを安全に停止できます。

コマンドから終了させる場合(恐らくこれが一番確実)は、

podman machine stop

これでDocker Desktopを起動できます。

Docker Desktopの後でPodman Desktopを使う場合

Dockerの全コンテナを停止してからDocker Desktopを閉じます。

タスクトレイのDocker Desktopを右クリックして、

「Quit Docker Desktop」を選択します。

一応、これでdocker-desktopのWSL2インスタンスも停止しますが、

念のため、PowerShellのターミナルで稼働中のインスタンスを確認します。

wsl -l --running

docker-desktopが稼働しているようなら停止させます。

wsl --terminate docker-desktop

直後にDocker Desktopのダイアログが出るので「Quit」を押下します。

Podman Desktopを起動してDashboardの「Run Podman」を押下するとPodman Machineが起動します。

状況によっては、Dashboardの表示が振動することがありますが、

「Settings」>「Resources」からStartさせればOKです。

以上です。

参考サイト

Podman DesktopとWSL2上のPodmanを同期したい
docker desktop の代わりに windows10 wsl2 で podman をつかう - Qiita
docker desktop の有料化に対する猶予期間が終了する、1月31日が近づいてきました。皆様いかがお過ごしでしょうか。さて、今日は windows10 の wsl2 環境で docker …
WSLのLinux側からPodmanを利用する方法(2023)DockerDesktop代替を確立: ポッドマンが倒せない(7)
What is Podman? — Podman documentation

  • 0
  • 0
  • 0
  • 0

コメント

タイトルとURLをコピーしました