おれさまラボ

実際に手を動かして理解を深めるブログ。

PodmanをWindows環境に構築する

はじめに

久々にコンテナ環境が必要になったので、podman 環境をセットアップすることにしました。せっかくなので、ついでに初心者向けに、コンテナ操作のハンズオン含めまとめ直したメモとなります。

前提知識

コンテナ仮想化とは

コンテナ仮想化は、ホストOS上でアプリケーションを独立して実行するための軽量な仮想化技術です。

従来の仮想マシンVM)は、ハイパーバイザー上でハードウェア環境を仮想的に再現し、その上でOSやアプリケーションを動かします。コンテナ仮想化はOSレベルでの仮想化を行うため、どうしてもオーバーヘッドが大きくなりがちです。対してコンテナ仮想化は、ホストOS上で名前空間を分離することで、ホストOSとカーネルを共有しながらも、他のコンテナと分離された環境でアプリケーションを動かせるため、VMに比べてリソース効率が高く、起動時間も短くなるメリットがあります。

VMと比べ軽量であることから、可搬性にも優れ、特に開発環境と本番環境の一貫性を保ちやすい点もポイントです。

Dockerとは

Dockerは、コンテナ仮想化を実現するためのプラットフォームで、コンテナの作成、管理、配布を行うためのツールです。2013年にDocker, Inc.によって発表され、アプリケーションを実行環境ごとパッケージ化する技術として急速に普及しました。

コンテナとDockerの歴史については、以下の記事が参考になりますので、興味があれば読んでみてください。

zenn.dev

Podmanとは

Podman(Pod Managerの略)は、Dockerに代わるコンテナ管理ツールで、Red Hatにより開発されました。Dockerと同様にコンテナを管理できますが、デーモンレスアーキテクチャを採用している点が特徴です。

具体的には、Dockerがバックグラウンドでデーモン(サーバープロセス)を起動して操作を行うのに対し、Podmanはデーモンを持たず、CLIコマンドで直接コンテナを管理します。

一方で、Dockerとコマンド互換性があるため、Dockerを使ってきた人からすると移行しやすい環境と言えます。

Podman環境の構築

Podmanでは、Podman Desktopと呼ばれるPodmanをGUIで操作するためのツールが提供されています。Windows環境の場合は、WSL(Windows Subsystem for Linux)をバックエンドに使用するのが便利です。

Hyper-Vをバックエンドにすることもできます。

WSLのセットアップ

1.Hyper-VとWSLの有効化

コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化 から以下を有効化します。

2.PCの再起動

WSLを有効化するために、PCを再起動します。

3.WSLの最新化

以下のコマンドを実行して、WSLを最新化します。

> wsl --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。

インストールされたバージョンを確認したい場合は、--version オプションをつけて wsl コマンドを実行します。

> wsl --version
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4169

Podman Desktopのセットアップ

1.インストーラのダウンロード

公式サイトからインストーラを入手します。

podman-desktop.io

2.インストールの実行

CompiseとPodmanのインストールを行います。それぞれ、システム要件を満たしているか確認されますので、必要に応じて対処してください。

※Kubernates 環境はコンテナオーケストレーションを行いたい場合のみインストールすればよいです。

3.Podman machineの作成

CompiseとPodmanのインストールが終わると、仮想マシンの作成を促されます。 デフォルトでは podman-machine-default という名前で作成されますが、特に気にせずデフォルト値のまま作成してOKです。

PowerShell から以下のコマンドを実行すると、Podman machineが作成されていることがわかります。

> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
podman-machine-default (既定)

4.動作確認

インストールが完了すると、かわいいアザラシ?がお出迎えしてくれるので、指示に従って podman ps コマンドを実行して動作確認をしましょう。

ロゴのモチーフはSelkieというアイルランドの人魚のような神話上の生き物だそうです。(参考:https://rheb.hatenablog.com/entry/podman-in-podman

なお、パスが通っていない場合、以下のように失敗します。

# 失敗した場合の表示
> podman ps
podman : 用語 'podman' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されま
せん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく
ださい。
発生場所 行:1 文字:1
+ podman ps
+ ~~~~~~
    + CategoryInfo          : ObjectNotFound: (podman:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

podman コマンドが実行できるようパスを通すには、設定>システム>バージョン情報>システムの詳細設定 をクリックして開く システムのプロパティ 画面から、詳細設定タブ>環境変数 を開き、ユーザー環境変数の Path に以下を登録してください。

C:\Program Files\RedHat\Podman

登録後、PowerShellを再起動して、podman ps コマンドが実行できることを確認してください。

# 成功した場合の表示
> podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

ついでにバージョンも確認しておきましょう。

> podman --version
podman.exe version 5.2.5

Hello World

コンテナの起動確認のために、hello-world というコンテナイメージを起動します。

> podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
PS C:\Users\ITS10313.JPN\Downloads> podman --version
podman.exe version 5.2.5

# hello-world というコンテナイメージを起動
> podman run hello-world
# コンテナイメージの取得
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob sha256:81df7ff16254ed9756e27c8de9ceb02a9568228fccadbf080f41cc5eb5118a44
Copying config sha256:5dd467fce50b56951185da365b5feee75409968cbab5767b9b59e325fb2ecbc0
Writing manifest to image destination
# コンテナが実行した出力
!... Hello Podman World ...!

         .--"--.
       / -     - \
      / (O)   (O) \
   ~~~| -=(,Y,)=- |
    .---. /`  \   |~~
 ~/  o  o \~~~~.----. ~~
  | =(X)= |~  / (O (O) \
   ~~~~~~~  ~| =(Y_)=-  |
  ~~~~    ~~~|   U      |~~

Project:   https://github.com/containers/podman
Website:   https://podman.io
Desktop:   https://podman-desktop.io
Documents: https://docs.podman.io
YouTube:   https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon:  @Podman_io@fosstodon.org

!... Hello Podman World ...! という出力を返すだけのコンテナなので、出力したらコンテナの寿命は終わります。終了したコンテナを確認するには podman ps -a コマンドを実行してください。

# 終了したプロセスを確認
> podman ps -a
CONTAINER ID  IMAGE                        COMMAND               CREATED         STATUS                     PORTS       NAMES
eeeedfb8d6cc  quay.io/podman/hello:latest  /usr/local/bin/po...  10 seconds ago  Exited (0) 10 seconds ago
infallible_ritchie

hello-world というコンテナイメージがダウンロードされたことは podman images コマンドで確認できます。

> podman images
REPOSITORY            TAG         IMAGE ID      CREATED       SIZE
quay.io/podman/hello  latest      5dd467fce50b  5 months ago  787 kB

おわりに

podman のインストールを通して、コンテナの基本的な動作イメージまで確認してみました。役に立ったなという方はビール一杯奢ってください!

この続きはcodocで購入