はじめに
久々にコンテナ環境が必要になったので、podman 環境をセットアップすることにしました。せっかくなので、ついでに初心者向けに、コンテナ操作のハンズオン含めまとめ直したメモとなります。
前提知識
コンテナ仮想化とは
コンテナ仮想化は、ホストOS上でアプリケーションを独立して実行するための軽量な仮想化技術です。
従来の仮想マシン(VM)は、ハイパーバイザー上でハードウェア環境を仮想的に再現し、その上でOSやアプリケーションを動かします。コンテナ仮想化はOSレベルでの仮想化を行うため、どうしてもオーバーヘッドが大きくなりがちです。対してコンテナ仮想化は、ホストOS上で名前空間を分離することで、ホストOSとカーネルを共有しながらも、他のコンテナと分離された環境でアプリケーションを動かせるため、VMに比べてリソース効率が高く、起動時間も短くなるメリットがあります。
VMと比べ軽量であることから、可搬性にも優れ、特に開発環境と本番環境の一貫性を保ちやすい点もポイントです。
Dockerとは
Dockerは、コンテナ仮想化を実現するためのプラットフォームで、コンテナの作成、管理、配布を行うためのツールです。2013年にDocker, Inc.によって発表され、アプリケーションを実行環境ごとパッケージ化する技術として急速に普及しました。
コンテナとDockerの歴史については、以下の記事が参考になりますので、興味があれば読んでみてください。
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.インストーラのダウンロード
公式サイトからインストーラを入手します。
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 のインストールを通して、コンテナの基本的な動作イメージまで確認してみました。役に立ったなという方はビール一杯奢ってください!