【Windows】Podman Desktop を使ってみた
システムアイに出向中の松野です。Docker Desktopに代わるツールとして注目されている「Podman Desktop」というツールがあります。少し前にこれをWindowsにインストールして、コンテナ起動など基本操作を試してみましたので、今回はその様子を書いてみたいと思います。
Podman Desktopのインストール
公式サイトからダウンロードできます。
WSLのインストールも必要ですが、インストールされていなければ途中でダイアログが出て、WSLのリンクを教えてくれます。
インストールが完了したら、Podman Desktopを起動してみましょう。すると、下のようなウィンドウが立ち上がります。
また、コマンドプロンプトから podman コマンドが使えるようになっているので、確認します。
C:\Users\systemi>podman --help
Manage pods, containers and images
Usage:
podman [options] [command]
Available Commands:
attach Attach to a running container
build Build an image using instructions from Containerfiles
commit Create new image based on the changed container
container Manage containers
cp Copy files/folders between a container and the local filesystem
create Create but do not start a container
diff Display the changes to the object's file system
events Show podman events
exec Run a process in a running container
export Export container's filesystem contents as a tar archive
generate Generate structured data based on containers, pods or volumes
healthcheck Manage health checks on containers
help Help about any command
history Show history of a specified image
image Manage images
images List images in local storage
import Import a tarball to create a filesystem image
info Display podman system information
init Initialize one or more containers
inspect Display the configuration of object denoted by ID
kill Kill one or more running containers with a specific signal
kube Play containers, pods or volumes from a structured file
load Load image(s) from a tar archive
login Login to a container registry
logout Logout of a container registry
logs Fetch the logs of one or more containers
machine Manage a virtual machine
manifest Manipulate manifest lists and image indexes
network Manage networks
pause Pause all the processes in one or more containers
pod Manage pods
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image from a registry
push Push an image to a specified destination
rename Rename an existing container
restart Restart one or more containers
rm Remove one or more containers
rmi Removes one or more images from local storage
run Run a command in a new container
save Save image(s) to an archive
search Search registry for image
secret Manage secrets
start Start one or more containers
stats Display a live stream of container resource usage statistics
stop Stop one or more containers
system Manage podman
tag Add an additional name to a local image
top Display the running processes of a container
unpause Unpause the processes in one or more containers
untag Remove a name from a local image
update update an existing container
version Display the Podman version information
volume Manage volumes
wait Block on one or more containers
Options:
-c, --connection string Connection to use for remote Podman service (default "podman-machine-default")
--help Help for podman
--identity string path to SSH identity file, (CONTAINER_SSHKEY) (default "C:\\Users\\systemi\\.ssh\\podman-machine-default")
--log-level string Log messages above specified level (trace, debug, info, warn, warning, error, fatal, panic) (default "warn")
--noout do not output to stdout
--ssh string define the ssh mode (default "golang")
--storage-opt stringArray Used to pass an option to the storage driver
--url string URL to access Podman service (CONTAINER_HOST) (default "ssh://user@localhost:50664/run/user/1000/podman/podman.sock")
-v, --version version for podman
問題なく動作しているようですね。
Podman Desktopをインストールすると、WSLにPodmanのマシンが追加されるので、これをデフォルトに切り替えておきましょう。
C:\Users\systemi>wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
podman-machine-default
C:\Users\systemi>wsl --set-default podman-machine-default
C:\Users\systemi>wsl --list
Linux 用 Windows サブシステム ディストリビューション:
podman-machine-default (既定)
Ubuntu
C:\Users\systemi>
切り替えたらWSL(で、デフォルトに設定した podman-machine-default)を起動して、同様にPodmanコマンドが使えることを確認します。
ちなみに、この podman-machine-default という名でインストールされたOSは実際には「Fedora」なので、パッケージのインストールする際は yum や dnf を使うことになりそうです。
You will be automatically entered into a nested process namespace where
systemd is running. If you need to access the parent namespace, hit ctrl-d
or type exit. This also means to log out you need to exit twice.
[user@PC853 ~]$ podman pull busybox
Resolved "busybox" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 405fecb6a2fa done
Copying config 9d5226e6ce done
Writing manifest to image destination
Storing signatures
9d5226e6ce3fb6aee2822206a5ef85f38c303d2b37bfc894b419fca2c0501269
[user@PC853 ~]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest 9d5226e6ce3f 2 weeks ago 1.46 MB
[user@PC853 ~]$ podman run -it busybox echo "busybox!"
busybox!
[user@PC853 ~]$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc61cd254efb docker.io/library/busybox:latest echo busybox! 7 seconds ago Exited (0) 7 seconds ago practical_cerf
[user@PC853 ~]$ podman rm fc61cd254efb
fc61cd254efb
# OSの確認
[user@PC853 ~]$ cat /etc/os-release
NAME="Fedora Linux"
VERSION="36 (Container Image)"
ID=fedora
VERSION_ID=36
VERSION_CODENAME=""
PLATFORM_ID="platform:f36"
PRETTY_NAME="Fedora Linux 36 (Container Image)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:36"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=36
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=36
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
VARIANT="Container Image"
VARIANT_ID=container
[user@PC853 ~]$
podman-compose
podman-compose も試してみます。
デフォルトではインストールされていませんので、dnfコマンドを使ってインストールします。
[user@PC853 ~]$ sudo dnf install podman-compose
Waiting for process with pid 234 to finish.
Fedora 36 - x86_64 - Updates 3.6 kB/s | 4.1 kB 00:01
Fedora 36 - x86_64 - Updates 36 kB/s | 5.1 MB 02:25
Fedora Modular 36 - x86_64 - Updates 3.9 kB/s | 3.9 kB 00:00
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
podman-compose noarch 1.0.3-6.fc36 updates 64 k
Installing dependencies:
dbus-libs x86_64 1:1.14.4-1.fc36 updates 155 k
dnsmasq x86_64 2.86-10.fc36 updates 339 k
podman-plugins x86_64 4:4.3.1-1.fc36 updates 1.2 M
python3-click noarch 8.0.4-2.fc36 fedora 177 k
python3-dotenv noarch 0.19.2-2.fc36 fedora 38 k
python3-pyyaml x86_64 6.0-3.fc36 fedora 192 k
Installing weak dependencies:
python3-dotenv+cli noarch 0.19.2-2.fc36 fedora 9.9 k
Transaction Summary
========================================================================================================================
Install 8 Packages
...
Complete!
[user@PC853 ~]$ podman-compose --help
usage: podman-compose [-h] [-v] [-f file] [-p PROJECT_NAME] [--podman-path PODMAN_PATH] [--podman-args args]
[--podman-pull-args args] [--podman-push-args args] [--podman-build-args args]
[--podman-inspect-args args] [--podman-run-args args] [--podman-start-args args]
[--podman-stop-args args] [--podman-rm-args args] [--podman-volume-args args] [--no-ansi]
[--no-cleanup] [--dry-run]
{help,version,pull,push,build,up,down,ps,run,exec,start,stop,restart,logs} ...
options:
-h, --help show this help message and exit
-v, --version show version
-f file, --file file Specify an alternate compose file (default: docker-compose.yml)
-p PROJECT_NAME, --project-name PROJECT_NAME
Specify an alternate project name (default: directory name)
--podman-path PODMAN_PATH
Specify an alternate path to podman (default: use location in $PATH variable)
--podman-args args custom global arguments to be passed to `podman`
--podman-pull-args args
custom arguments to be passed to `podman pull`
--podman-push-args args
custom arguments to be passed to `podman push`
--podman-build-args args
custom arguments to be passed to `podman build`
--podman-inspect-args args
custom arguments to be passed to `podman inspect`
--podman-run-args args
custom arguments to be passed to `podman run`
--podman-start-args args
custom arguments to be passed to `podman start`
--podman-stop-args args
custom arguments to be passed to `podman stop`
--podman-rm-args args
custom arguments to be passed to `podman rm`
--podman-volume-args args
custom arguments to be passed to `podman volume`
--no-ansi Do not print ANSI control characters
--no-cleanup Do not stop and remove existing pod & containers
--dry-run No action; perform a simulation of commands
command:
{help,version,pull,push,build,up,down,ps,run,exec,start,stop,restart,logs}
help show help
version show version
pull pull stack images
push push stack images
build build stack images
up Create and start the entire stack or some of its services
down tear down entire stack
ps show status of containers
run create a container similar to a service to run a one-off command
exec execute a command in a running container
start start specific services
stop stop specific services
restart restart specific services
logs show logs from services
ということで podman-compose のインストールが完了しました。試しにWordpressとMySQLのコンテナを起動してみます。yamlファイルはdocker-compose用のものをそのまま使ってみます。
[user@PC853 ~]$ vi compose.yml
[user@PC853 ~]$ cat compose.yml
version: '3'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: my-secret-pw
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: user
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
MYSQL_PASSWORD: my-secret-pw
MYSQL_DATABASE: wordpress_db
MYSQL_USER: user
[user@PC853 ~]$ podman-compose up -d
['podman', '--version', '']
using podman version: 4.3.0
** excluding: set()
['podman', 'network', 'exists', 'user_default']
...
exit code: 0
"podman-compose up -d" を実行し、各コンテナが起動するのを待ち、http://localhost:8080 にアクセスすると、Wordpressの画面が表示されます。
docker-composeのyamlをそのまま利用できるようですね。
Podman DesktopのGUIの方にも、コンテナが表示されていました。
Roadmap
Podman Desktop のロードマップも公開されています。
Kubernetesレイヤの機能等が今後追加予定のようです。
まとめ
お手軽にPodmanの環境構築ができる Podman Desktop の紹介記事でした。
まだリリースされたばかりですが、コンテナは特に不自由なく実行できました。今後の機能実装にも期待したいですね!
――――――――――――――――――――――――――――――――――
【ご案内】
ITシステム開発やITインフラ運用の効率化、高速化、品質向上、その他、情シス部門の働き方改革など、IT自動化導入がもたらすメリットは様々ございます。
IT業務の自動化にご興味・ご関心ございましたら、まずは一度、IT自動化の専門家リアルグローブ・オートメーティッド(RGA)にご相談ください!
お問合せは以下の窓口までお願いいたします。
【お問い合わせ窓口】
窓口:rga@systemi.co.jp
URL:https://rg-automated.jp