🚀

WSLのLinux側からPodmanを利用する方法(2023)DockerDesktop代替を確立: ポッドマンが倒せない(7)

2023/02/27に公開

もっと簡単な方法があった

関連記事:
Podman Desktopを試す: ポッドマンが倒せない(4)
Distrodを使ってWSLでsystemdを動かす

ポッドマンが倒せないシリーズ過去記事

前回mDNS経由でPodmanにアクセスする方法を書いた。のだが。。。
改めてやってみると上手くいかなかったので記事を取り下げた。
(No.6は欠番行き)
そして、そこまで複雑にしなくてもいいことが分かったので、
記事化することにした。

構成は以下の通り(これは取り下げた記事と同じ)
メインで使うWSLクライアントを Ubuntu instance
podmanが生成するインスタンスを Podman instanceとすると

Ubuntu instancePodman instanceが別サーバーっぽい感覚になるのだが、
実はIPアドレスは共通。
(振り分けはポートでやってる?)
なので自身に割り当てられてるIPアドレスを設定すればリモートアクセスできるということになる。

( ゚Д゚;) な… 何を言ってるのか わからねーと思うが

一度以下のコマンド打ってみてほしい。
(ポート番号は本編を参照)

bash
ssh user@$(hostname -I|tr -d " ") -P [port]

sshアクセスできるはず。

例によってインストールから行うので記事は長いが適当に読み飛ばしてほしい。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

準備

WindowsにPodmanとPodman Desktopをインストール

アプリインストーラーを使って
PodmanおよびPodman Desktopをインストールし、
Podmanを起動しておく。

powershell
winget install -e --id RedHat.Podman
winget install -e --id RedHat.Podman-Desktop
podman machine init
podman machine start
wsl -l -v
  NAME                      STATE           VERSION
  podman-machine-default    Running         2

ポートを確認しておく

podman system connection list
  Name URI Identity Default podman-machine-default ssh://user@localhost:50626/run/user/1000/podman/podman.sock  C:\Users\dozo\.ssh\podman-machine-default  true

(._.)φ ポート番号は50626

クライアント側を用意

以下を参照のこと

https://zenn.dev/dozo/articles/a633794f6d7575

Podmanを設置

Ubuntu側にPodmanをインストール。
Podman4を使うためにリポジトリの登録から。

bash
curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_22.04/Release.key| gpg --dearmor | sudo tee /etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg] https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list > /dev/null

上記はUbuntu用だが、
その他のdistroの場合はマニュアルを参照

続いてPodmanのインストール

bash
sudo apt update
sudo apt install -y podman
podman --version
 podman version 4.3.1

SSHリモート接続

Podmanインスタンスとリモート接続するためにSSHで接続する
SSH経由のためSSHの設定も必要でキー RSAではなく ED25519を使用する。

bash
ssh-keygen -t ed25519
  Generating public/private ed25519 key pair.
  ・・・
  |       +.*B..=.. |
  |       .+E++.++  |
  +----[SHA256]-----+
cat ~/.ssh/id_ed25519.pub | wsl.exe -d podman-machine-default -u user --cd /home/user -e tee -a .ssh/authorized_keys
  ssh-ed25519 AAAAC3Nza.....9y/fp2KM dozo@ubuntu

リモートログイン確認

bash
ssh user@$(hostname -I|tr -d " ") -p 50626
 Last failed login: Wed Nov 23 13:38:28 JST 2022 from 172.20.43.74 on ssh:notty
 There were 3 failed login attempts since the last successful login.
 [user@podmanhost ~]$ exit

(・∀・) SSH接続ヨシ!

Podmanクライアント接続

あとはPodmanの設定にSSH接続情報を加える

bash
podman system connection add podman -d --identity ~/.ssh/id_ed25519 ssh://user@$(hostname -I|tr -d " "):50626/run/user/1000/podman/podman.sock
podman system connection list
  Name URI Identity Default
  podman ssh://user@172.19.203.129:50626/run/user/1000/podman/podman.sock /home/dozo/.ssh/id_ed25519 true

(・∀・)(・∀・) Podman接続ヨシ!

Podmanにアクセス

さて、長々と書いたがいよいよPodmanを使ってみよう。

bash
podman -r run quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
・・・
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

さてPodman Desktopで確認してみよう。


Podman Desktop

(^_^)b 同期取れてる!

------------------- ↓ 後書はここから ↓-------------------

これでDocker Desktop代替は完成した気がする。

  • Podmanインスタンスによる管理
  • Windowsおよび各種インスタンスでのpodmanコマンド使用
  • 各種インスタンスとの同期
  • Windows GUI

すべて実現できている
docker composeはむしろPodを利用する感じになるかなと。

ログインシェルに登録

毎回接続情報を追加するのは面倒なので、
ログインシェルにコネクション情報を追加する。
addコマンドは毎回上書きするっぽいので助かる

.bashrc
podman system connection add podman -d --identity ~/.ssh/id_ed25519 ssh://user@$(hostname -I|tr -d " "):50626/run/user/1000/podman/podman.sock

Discussion