プロキシ(認証あり)の配下でWin10+PodmanDesktopを構築する

# はじめに
いろいろなツールを試してみたいと思って探してみるとContainerとして提供されているケースが多くなっていることに気づいた
そこで自分の端末にPodman環境を構築することにしたが、プロキシの配下で構築するといろいろな壁にぶつかったのでその作業ログを記録する

# 端末のスペック
- OS: Windows 10 Pro 22H2
- RAM: 8.0GB
- SSD: 256GB

# Podman Desktopのインストール
## インストーラーのダウンロード
[公式サイト](https://podman-desktop.io/)にアクセスして、**Download Now**ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/923beb4f-d8e7-55bb-8b15-0d726e4c7c37.png)

Windows用のサイトが表示されたら、**Download Now**をクリックしてインストーラのexeファイルを保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/0144e6ca-8353-e7e5-68eb-3a98c04986cb.png)

## インストーラーの実行
ダウンロードしたexeファイルを実行する
なんかアザラシがロケットに乗っている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/3c205b47-a33b-0ca9-f1dd-1ec782bf14b6.png)

インストールが完了すると以下の画面が表示される
右下の**Go to Podman Desktop**をクリックするとPodman Desktopを起動できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/1fc79f76-85d0-2c62-d5ea-a872cf69b7bc.png)

## Podman Desktopの実行
利用している端末にPodmanの環境がある場合は`Podman is running`と表示される
Podmanの環境がない場合は`Podman Desktop was not able to find an installation of Podman`と表示されるので、右側の**Install**ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/03fc0459-5a07-9615-5e38-a078ec0455f3.png)

`Virtual Machine Platform Enabled`が`x`になった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/e06daa3b-47c6-ff08-9d3f-b58c84cde188.png)

Windows PowerShell(管理者)を起動して以下コマンドを実行して、`仮想マシンプラットフォーム`オプション機能を有効にする
```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/2a0963b3-a174-280e-10a2-b13b89e36939.png)

実行後に端末を再起動する

再度右側の**Install**ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/20a16fe9-0da0-3523-dccc-9e2cc77dab63.png)

今度は`WSL2 Installed`が`x`になった

Windows PowerShell(管理者)を起動して以下コマンドを実行する
```
wsl --install
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/cda517a0-5ec6-e6c2-e2e2-275e1fd6766d.png)

何かが失敗しているようだが実行後に端末を再起動する
(おそらくプロキシの設定をしていないことが原因)

再度右側の**Install**ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/20a16fe9-0da0-3523-dccc-9e2cc77dab63.png)

ようやくPodmanをインストールするかを問われるので**Yes**をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/ee75bc67-713c-c1eb-a945-6e3867e8cc05.png)

一応`Install WSL if not present`はチェックをいれたまま**Install**をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/c4f972ac-6f39-38c2-8752-7c58276a8d1f.png)

インストール完了したので**Close**をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/385ee2c6-f8d0-e4eb-6df1-940cac207e19.png)

`Podman vX.X.X is installed but not ready`の表示に変わった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/a857cdd0-7664-0c60-6110-09518dcfd519.png)

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**をボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/a857cdd0-7664-0c60-6110-09518dcfd519.png)

Windows Defenderファイアウォールで通信を許可を求めるポップアップが表示される
`ドメインネットワーク`にチェックを入れたまま**アクセスを許可する**をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/cb55efd7-7b0a-2b0b-903c-bdeca00a6620.png)

`Podman is running`となった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/b5eb92c1-33ff-0058-0725-8176aa5acaae.png)

Podman Desktopにプロキシサーバの設定が入っていないためインターネットにアクセスできない
以下でPodman Desktopの左下の`歯車マーク(Settings) -> Proxy`にてProxyの設定をを行う
認証が必要な場合は`http://ユーザー:パスワード@ホスト:ポート`という形式で入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472468/339ad385-8363-2717-38db-0f906ce56c9d.png)

このままだとプロキシサーバのホスト名が解決できないというエラーが発生するためネームサーバーの設定を入れてあげる必要がある
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を起動していく

# 参考ページ
- [Podman Desktop のインストール(for Windows)](https://qiita.com/youn0810/items/4e7ca4050413f3c6df08)
- [【Windows】Podman Desktop を使ってみた](https://note.com/shift_tech/n/nc82148d4db7f)
- [GitHub ](https://github.com/containers/podman/blob/main/docs/tutorials/podman-for-windows.md)
- [会社のプロキシの裏でPodman Desktopを実行する](https://future-architect.github.io/articles/20221227a/)
- [Redmine packaged by Bitnami](https://bitnami.com/stack/redmine/containers)
- [GitHub Redmine packaged by Bitnami how-to-use-this-image](https://github.com/bitnami/containers/tree/main/bitnami/redmine#how-to-use-this-image)
- [VPN に接続されると、WSL からネットワークに接続できない](https://docs.microsoft.com/ja-jp/windows/wsl/troubleshooting#bash-loses-network-connectivity-once-connected-to-a-vpn)