Podman 4.3 on Windows 10: インストール
Tags: podman, docker, kubernetes, virtualization
Published: 2023-01-21 09:34:28

## はじめに

[Podman](https://podman.io/) は仮想化環境を構築するためのコンテナ管理ツールです。[Red Hat 社](https://www.redhat.com/ja) によって開発され、[Apache ライセンス v2.0](https://www.apache.org/licenses/LICENSE-2.0.html) の下、オープンソースソフトウェア (OSS) として [公開](https://github.com/containers/podman) されています。[Go 言語](https://go.dev/) で実装されています。

クロスプラットフォームに対応しており、[Windows](https://www.microsoft.com/ja-jp/windows/) / [Mac](https://support.apple.com/ja-jp/macos) / [Linux](https://www.linux.org/) いずれにもインストールできます。
これは大きな利点です。というのも、仮想マシンの定義、あるいは複数の仮想マシンを束ねる [Pod](https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-overview/) ([Kubernetes](https://kubernetes.io/ja/)) の定義を配布することで、異なる端末上で同じ条件下での開発が可能になるからです。

コンテナ管理ツールと言うと [Docker](https://www.docker.com/) を思い浮かべる方も多いのでは無いでしょうか。
Docker は非常に広く使われているすばらしいソフトウェアです。Podman はこちらとの互換性を意識して開発されています。特に v3 以降は高い互換性を備えるようになりました。既存の [`Dockerfile`](https://docs.docker.com/engine/reference/builder/) や [Docker Hub](https://hub.docker.com/) のイメージを利用することも可能です。そのため Docker からの移行を試みる場合でも、ハードルはそんなに高く無いかもしれません。

Windows にインストールする場合、[WSL](https://learn.microsoft.com/ja-jp/windows/wsl/) (Windows Subsystem for Linux) v2 を有効化する必要があるのですが、ありがたいことにその設定を半自動化してくれています。

Windows 10 に Podman をインストールする流れをご紹介します。

### 環境

- OS: Windows 10
- 仮想化: Podman [4.3.1](https://github.com/containers/podman/releases/tag/v4.3.1)

## チュートリアル

### パッケージ・マネージャーのインストール (利用する場合のみ)

私は [Scoop](https://scoop.sh/) を使いました。Windows のサード・パーティ製のパッケージ・マネージャーです。クリーンなインストールとアンインストールが可能です。

代わりに [winget](https://learn.microsoft.com/ja-jp/windows/package-manager/winget/) を使うことも可能です。Podman のパッケージが公式から [配布](https://winget.run/pkg/RedHat/Podman) されています。

### Podman のインストール

Scoop の場合、下記を実行します:

```console
$ scoop install podman
```

出力は以下の通りでした:

```console
Installing 'podman' (4.3.1) [64bit] from main bucket
podman-4.3.1-setup.exe (30.3 MB) [============================================================================] 100%
Checking hash of podman-4.3.1-setup.exe ... ok.
Running installer script...
Linking ~\scoop\apps\podman\current => ~\scoop\apps\podman\4.3.1
Creating shim for 'podman'.
'podman' (4.3.1) was installed successfully!
```

winget の場合 `winget install -e --id RedHat.Podman` を実行します。

パッケージ・マネージャーが無い場合、Windows 用インストーラーを使うことも可能です。[Github](https://github.com/) の [リリースページ](https://github.com/containers/podman/releases/tag/v4.3.1) からダウンロードできます。`podman-#.#.#-setup.exe` という名前のファイルです。

### Podman 向け OS 初期化

Podman のインストールができたら、初期化を行います。
本来は Podman の仮想マシンの初期化ですが、WSL v2 の準備ができていない場合、その初期環境構築から実施してくれます。

下記コマンドを実行します:

```console
$ podman machine init
```

まず Windows Defender ファイアウォール の警告が表示されます。Podman のネットワーク通信の許可について確認されます。

![windows defender ファイアウォールからの警告](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t6fsu8zcc59qpxyq42u3.png)

以下は WSL v2 の準備ができていない場合です。

WSL がインストールされていないことを検出した旨が表示されます。「OK」を押すとインストールが始まります。

![podman からの確認メッセージ - wsl をインストールするか](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dpfxvomb4fpysglztpcn.png)

Windows の「ユーザー アカウント制御」の確認が表示されます。以下は表示内容です。

```
ユーザー アカウント制御
このアプリがデバイスに変更を加えることを許可しますか?

podman.exe

確認済みの発行元: Red Hat, Inc
ファイルの入手先: このコンピューター上のハード ドライブ

詳細を表示
はい いいえ
```

「はい」を押して進みます。

以下のようにインストールが開始されます。

![wsl インストール - OS 再起動前](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/61pxnj1zjxbz10cmw4lx.png)

#### 推奨ターミナルに関する補足

[コマンドプロンプト](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/cmd) が標準になっている場合、上のように文字化けします。
公式チュートリアルで [Windows ターミナル](https://learn.microsoft.com/ja-jp/windows/terminal/) を使うと便利だと [推奨されています](https://github.com/containers/podman/blob/main/docs/tutorials/podman-for-windows.md#prerequisites)。(無くても、致命的な問題は起こりません。) [Windows Store](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701) からインストールできます。

さて、インストールが進むと、再起動の確認メッセージが表示されます:

![os 再起動の確認](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qptw1fp0xb8uvhwebqip.png)

「OK」を押すと端末が再起動されます。

再起動した OS にサインインします。1-2 分、待ちます。(Windows の遅延スタートアップ項目が完了した後に、WSL のインストールの続きが始まるためです。)

コマンドプロンプトが自動で 3 回起動して終了します。その後に [PowerShell](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/powershell) が起動されます:

![wsl インストール - カーネル インストール](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nkeb5osbqjswuqc0589e.png)

それが終わると、次はコマンドプロンプトが起動されます:

![wsl インストール - カーネル 更新](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zm9mfj01cd5g54icci2w.png)

それが終わると、ふたたび `podman.exe` に関する「ユーザー アカウント制御」の確認メッセージが表示されます。
「はい」を押して進みます。

すると今度は「Windows サービスのホスト プロセス」に関する「ユーザー アカウント制御」確認が表示されます:

```
ユーザー アカウント制御
このアプリがデバイスに変更を加えることを許可しますか?

Windows サービスのホスト プロセス

確認済みの発行元: Microsoft Windows

詳細を表示
はい いいえ
```

こちらも「はい」を押します。

### Podman インストールの完了

WSL のカーネル・インストールが行われ、完了します。

![podman on windows - 準備完了](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9fjm7hf61xfhnav1wfdj.png)

## おわりに

Podman の準備ができました !!

`podman machine start` というコマンドを実行すると、Podman の仮想マシンが動き始めます。(初回実行時だけ初期化処理も動きます。) そこからは Docker とほぼ同じコマンド体系でコンテナやコンテナイメージを操作することができます。

Podman にはセキュリティや安定性の観点からの配慮が施されています。まず Podman はデーモンを使用しません。そのため仮想マシン上のあるコンテナが他のコンテナに悪影響を及ぼすことが、起こりにくくなっています。またルート権限を必要としないコンテナがデフォルトになっています。そのためコンテナの実行がより安全に行えるようになっています。

Podman で再利用性と独立性の高い環境を築いて、開発生産性の向上や運用環境の改善につなげられると良いですね。