はじめに
いろいろなツールを試してみたいと思って探してみるとContainerとして提供されているケースが多くなっていることに気づいた
そこで自分の端末にPodman環境を構築することにしたが、プロキシの配下で構築するといろいろな壁にぶつかったのでその作業ログを記録する
端末のスペック
- OS: Windows 10 Pro 22H2
- RAM: 8.0GB
- SSD: 256GB
Podman Desktopのインストール
インストーラーのダウンロード
公式サイトにアクセスして、Download Nowボタンをクリックする
Windows用のサイトが表示されたら、Download Nowをクリックしてインストーラのexeファイルを保存する
インストーラーの実行
ダウンロードしたexeファイルを実行する
なんかアザラシがロケットに乗っている
インストールが完了すると以下の画面が表示される
右下のGo to Podman DesktopをクリックするとPodman Desktopを起動できる
Podman Desktopの実行
利用している端末にPodmanの環境がある場合はPodman is running
と表示される
Podmanの環境がない場合はPodman Desktop was not able to find an installation of Podman
と表示されるので、右側のInstallボタンをクリックする
Virtual Machine Platform Enabled
がx
になった
Windows PowerShell(管理者)を起動して以下コマンドを実行して、仮想マシンプラットフォーム
オプション機能を有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
実行後に端末を再起動する
今度はWSL2 Installed
がx
になった
Windows PowerShell(管理者)を起動して以下コマンドを実行する
wsl --install
何かが失敗しているようだが実行後に端末を再起動する
(おそらくプロキシの設定をしていないことが原因)
ようやくPodmanをインストールするかを問われるのでYesをクリックする
一応Install WSL if not present
はチェックをいれたままInstallをクリックする
Podman vX.X.X is installed but not ready
の表示に変わった
Windows PowerShell(管理者)を起動して以下コマンドを実行してpodmanがインストールされていることを確認する
PS C:\WINDOWS\system32> podman --help
Manage pods, containers and images
Usage:
podman.exe [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 system 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
--help Help for podman
--identity string path to SSH identity file, (CONTAINER_SSHKEY)
--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 "unix:/run/podman/podman.sock")
-v, --version version for podman.exe
PS C:\WINDOWS\system32>
以下コマンドにてプロキシサーバの設定を行う
PS C:\WINDOWS\system32> $env:http_proxy="http://ユーザ名:パスワード@プロキシホスト名:プロキシポート番号"
PS C:\WINDOWS\system32> $env:https_proxy="http://ユーザ名:パスワード@プロキシホスト名:プロキシポート番号"
変数の確認は以下のコマンド
PS C:\WINDOWS\system32> get-childitem env:
以下コマンドでWSLにpodmanマシンを追加する
PS C:\WINDOWS\system32> podman machine init
Downloading VM image: fedora-podman-amd64-v37.0.36.tar.xz: done
Extracting compressed file
Importing operating system into WSL (this may take a few minutes on a new WSL install)...
インポート中です。この処理には数分かかることがあります。
この操作を正しく終了しました。
Configuring system...
Generating public/private ed25519 key pair.
Your identification has been saved in podman-machine-default
Your public key has been saved in podman-machine-default.pub
...
Machine init complete
To start your machine run:
podman machine start
PS C:\WINDOWS\system32>
以下コマンドにてpodman-machine-default
がデフォルトとなっていることを確認する
PS C:\WINDOWS\system32> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
podman-machine-default (既定)
PS C:\WINDOWS\system32>
Initialize and startをボタンをクリックする
Windows Defenderファイアウォールで通信を許可を求めるポップアップが表示される
ドメインネットワーク
にチェックを入れたままアクセスを許可するをクリックする
Podman Desktopにプロキシサーバの設定が入っていないためインターネットにアクセスできない
以下でPodman Desktopの左下の歯車マーク(Settings) -> Proxy
にてProxyの設定をを行う
認証が必要な場合はhttp://ユーザー:パスワード@ホスト:ポート
という形式で入れる
このままだとプロキシサーバのホスト名が解決できないというエラーが発生するためネームサーバーの設定を入れてあげる必要がある
Windows PowerShell(管理者)にてWSLでpodman-machine-default
を起動する
PS C:\WINDOWS\system32> wsl -d podman-machine-default
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@hostname ~]$
まずはresolv.confが上書きされないようにwsl.confを編集する
これを行わないとpodman-machineを起動するたびに新たにresolv.confが生成されてしまう
[user@hostname ~]$ sudo vi /etc/wsl.conf
[network] generateResolvConf = false
を追加
/etc/wsl.conf
[user]
default=user
[network]
generateResolvConf = false
WSLを再起動する
[user@hostname ~]$ exit
logout
[user@hostname system32]$ exit
logout
PS C:\WINDOWS\system32> wsl -t podman-machnine-default
Windows PowerShell(管理者)にてWSLでpodman-machine-default
を起動する
PS C:\WINDOWS\system32> wsl -d podman-machine-default
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@hostname ~]$
/etc/resolv.conf
がシンボリックリンクとなっているため、シンボリックリンクを解除した上で新規作成する
[user@hostname ~]$ sudo unlink /etc/resolv.conf
[user@hostname ~]$ sudo vi /etc/resolv.conf
nameserver
をプロキシサーバのホスト名解決ができるDNSサーバのIPアドレスに修正する
/etc/resolv.conf
nameserver DNSサーバのIPアドレス
一度WSLから出て再度入りなおしても編集したresolv.confが残っていることを確認しておく
[user@hostname ~]$ exit
logout
[user@hostname system32]$ exit
logout
PS C:\WINDOWS\system32> wsl -t podman-machine-default
PS C:\WINDOWS\system32> wsl -d podman-machine-default
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@hostname ~]$ cat /etc/resolv.conf
nameserver DNSサーバのIPアドレス
[user@hostname ~]$
最後にpodmanのサーバーを再起動してからプロキシサーバ越しにイメージをとってきて実行できるか確認する
dockerをpodmanに読み替えるだけで使える
[user@hostname ~]$ exit
logout
[user@hostname system32]$ exit
logout
PS C:\WINDOWS\system32> podman machine stop
Machine "podman-machine-default" stopped successfully
PS C:\WINDOWS\system32> podman machine start
Starting machine "podman-machine-default"
This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:
podman machine set --rootful
API forwarding listening on: npipe:////./pipe/docker_engine
Docker API clients default to this address. You do not need to set DOCKER_HOST.
Machine "podman-machine-default" started successfully
PS C:\WINDOWS\system32> podman run --rm 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:bc17375ed66b6e5ecaaa7036adab6c0109df47046a65bfba0513c47950a2ef76
Copying config sha256:2b5e8bd0edeb80b3fa42ff2fa872ab00bc8f41802185434e5967ee8d44cf5705
Writing manifest to image destination
Storing signatures
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Project: https://github.com/containers/podman
Website: https://podman.io
Documents: https://docs.podman.io
Twitter: @Podman_io
PS C:\WINDOWS\system32>
podman-composeのインストール(dnf, podmanのプロキシサーバ設定込み)
podman-composeも使うのでインストールしておく
デフォルトでは入っていないのでpodman-machine-default
でdnf
コマンドでインストールしておく必要がある
まずdnfのプロキシサーバ設定を追加する
PS C:\WINDOWS\system32> wsl -d podman-machine-default
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@hostname ~]$ sudo vi /etc/dnf/dnf.conf
...
proxy=http://ユーザー:パスワード@ホスト:ポート
修正後のdnf.conf
を確認する
[user@hostname ~]$ cat /etc/dnf/dnf.conf
# see `man dnf.conf` for defaults and possible options
[main]
gpgcheck=True
installonly_limit=3
clean_requirements_on_remove=True
best=False
skip_if_unavailable=True
tsflags=nodocs
proxy=http://ユーザー:パスワード@ホスト:ポート
[user@hostname ~]$
dnfコマンドでpodman-compose
をインストールする
[user@hostname ~]$ sudo dnf install podman-compose
Fedora 37 - x86_64 8.3 MB/s | 82 MB 00:09
Fedora 37 openh264 (From Cisco) - x86_64 898 B/s | 2.5 kB 00:02
Fedora Modular 37 - x86_64 3.3 MB/s | 3.8 MB 00:01
Fedora 37 - x86_64 - Updates 7.8 MB/s | 36 MB 00:04
Fedora Modular 37 - x86_64 - Updates 1.4 MB/s | 2.9 MB 00:02
Dependencies resolved.
==========================================================================================================================
Package Architecture Version Repository Size
==========================================================================================================================
Installing:
podman-compose noarch 1.0.6-1.fc37 updates 116 k
Installing dependencies:
dbus-libs x86_64 1:1.14.6-1.fc37 updates 155 k
dnsmasq x86_64 2.89-2.fc37 updates 354 k
podman-plugins x86_64 5:4.5.0-1.fc37 updates 1.2 M
python3-click noarch 8.1.3-1.fc37 fedora 239 k
python3-dotenv noarch 0.19.2-4.fc37 fedora 50 k
python3-pyyaml x86_64 6.0-5.fc37 fedora 224 k
Installing weak dependencies:
python3-dotenv+cli noarch 0.19.2-4.fc37 fedora 9.6 k
Transaction Summary
==========================================================================================================================
Install 8 Packages
Total download size: 2.3 M
Installed size: 6.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): python3-dotenv+cli-0.19.2-4.fc37.noarch.rpm 51 kB/s | 9.6 kB 00:00
(2/8): python3-dotenv-0.19.2-4.fc37.noarch.rpm 261 kB/s | 50 kB 00:00
(3/8): python3-click-8.1.3-1.fc37.noarch.rpm 965 kB/s | 239 kB 00:00
(4/8): python3-pyyaml-6.0-5.fc37.x86_64.rpm 2.1 MB/s | 224 kB 00:00
(5/8): dbus-libs-1.14.6-1.fc37.x86_64.rpm 978 kB/s | 155 kB 00:00
(6/8): dnsmasq-2.89-2.fc37.x86_64.rpm 1.9 MB/s | 354 kB 00:00
(7/8): podman-compose-1.0.6-1.fc37.noarch.rpm 594 kB/s | 116 kB 00:00
(8/8): podman-plugins-4.5.0-1.fc37.x86_64.rpm 5.3 MB/s | 1.2 MB 00:00
--------------------------------------------------------------------------------------------------------------------------
Total 1.9 MB/s | 2.3 MB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : dbus-libs-1:1.14.6-1.fc37.x86_64 1/8
Running scriptlet: dnsmasq-2.89-2.fc37.x86_64 2/8
Installing : dnsmasq-2.89-2.fc37.x86_64 2/8
Running scriptlet: dnsmasq-2.89-2.fc37.x86_64 2/8
Installing : podman-plugins-5:4.5.0-1.fc37.x86_64 3/8
Installing : python3-pyyaml-6.0-5.fc37.x86_64 4/8
Installing : python3-click-8.1.3-1.fc37.noarch 5/8
Installing : python3-dotenv-0.19.2-4.fc37.noarch 6/8
Installing : python3-dotenv+cli-0.19.2-4.fc37.noarch 7/8
Installing : podman-compose-1.0.6-1.fc37.noarch 8/8
Running scriptlet: podman-compose-1.0.6-1.fc37.noarch 8/8
Verifying : python3-click-8.1.3-1.fc37.noarch 1/8
Verifying : python3-dotenv+cli-0.19.2-4.fc37.noarch 2/8
Verifying : python3-dotenv-0.19.2-4.fc37.noarch 3/8
Verifying : python3-pyyaml-6.0-5.fc37.x86_64 4/8
Verifying : dbus-libs-1:1.14.6-1.fc37.x86_64 5/8
Verifying : dnsmasq-2.89-2.fc37.x86_64 6/8
Verifying : podman-compose-1.0.6-1.fc37.noarch 7/8
Verifying : podman-plugins-5:4.5.0-1.fc37.x86_64 8/8
Installed:
dbus-libs-1:1.14.6-1.fc37.x86_64 dnsmasq-2.89-2.fc37.x86_64 podman-compose-1.0.6-1.fc37.noarch
podman-plugins-5:4.5.0-1.fc37.x86_64 python3-click-8.1.3-1.fc37.noarch python3-dotenv-0.19.2-4.fc37.noarch
python3-dotenv+cli-0.19.2-4.fc37.noarch python3-pyyaml-6.0-5.fc37.x86_64
Complete!
[user@hostname ~]$
とりあえずWindows10上でPodmanが利用できる環境構築までが完了した
以降は早速Containerを起動していく