WSL2にDocker代替のPodmanを入れてみる: ポッドマンが倒せない(1)
ルートレスの御利用は計画的に
ご承知のようにDocker Desktopのライセンス体形が変わり、
令和4年1月末にて一部有償となる。
Personalライセンス利用の条件は
Docker Desktop remains free for small businesses (fewer than 250 employees AND less than $10 million in annual revenue), personal use, education, and non-commercial open source projects.
スモールビジネス、個人利用、教育機関または非商用のオープンソースプロジェクトなので、
スモールじゃないビジネスでは有償ライセンスとなる。
個人のぶんはまぁいいとしても、
社用PCはそうはいかない。
ということで代替手段を模索することになるわけだが、
先駆者の方々がいろいろやられたようで大体構成はできあがっている。
なのでスムーズに終わる
・・・はずだった (-_-;)
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
事前準備
何はなくともWSLを用意。
今回はUbuntuを使用。
他のOSでもやることは一緒だが、
別途インストールが必要なものがある(後述)
wsl --install ubuntu
ユーザー作成しaptの最新化を済ませておく
sudo apt update && sudo apt upgrade -y
自身の環境をチェックしておく
id
uid=1000(dozo) gid=1000(dozo) ・・・
grep $(whoami): /etc/subuid
dozo:100000:65536
grep $(whoami): /etc/subgid
dozo:100000:65536
podmanのインストール
podmanとはDockerだ。(雑)
コンテナランタイムでDockerの次ぐらいに有名なんだとか。
インストール手順はこちらに書いてあるが、
パッケージの状態が変わったのか全部はやらなくていいっぽい。
source /etc/os-release
echo deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ / | sudo tee -a /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x${NAME}_${VERSION_ID}/Release.key -O Release.key
sudo apt-key add - < Release.key
sudo apt update && sudo apt -y install podman
dockerイメージを触ってみる
podmanコマンドはdockerと互換性があるらしい。
適当にコマンド打ってみよう
podman pull busybox
Resolved "busybox" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/busybox:latest...
・・・
podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest ffe9d497c324 2 weeks ago 1.46 MB
podman run -it --rm alpine sh
/ #
(^_-)-☆ やったぜ
特に違和感ないな。
さて、あとはWSLをまたいだ時にどうするかだが・・・
nerdctlってのがあるのか、
それもちょっとやってみよう。
------------------- ↓ 後書きはここから ↓-------------------
他のOSの場合
Ubuntuだとスムーズにいくのだが、
他のOSだとちょっと躓く。
register.confを調整
pullしたときに以下のエラーが発生
podman pull alpine
Error: short-name "alpine" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
イメージのpull元が登録されていないこともあるようだ。
- # unqualified-search-registries = ["example.com"]
+ unqualified-search-registries = ['docker.io', 'quay.io']
container.confを調整
ログの書き込みとかLinuxで使う前提になっているので、
WSL用に調整する。
- #cgroup_manager = "systemd"
+ cgroup_manager = "cgroupfs"
- #events_logger = "journald"
+ events_logger = "file"
shadowのインストール
newuidmapというコマンドがない場合はこれを入れる必要がある。
パッケージ名はuidmapとかshadow-xxxとかそんな感じ。
パッケージ名はこちらを参照
あと実行権限も調整が必要らしい(理由は知らん)
sudo apt install uidmap
sudo chmod u+s $(which newuidmap)
sudo chmod u+s $(which newgidmap)
/etc/subuid, /etc/subgidの設置
自身のLinux IDとは別にサブIDを作成し、
これをpodmanコンテナの実行ユーザーにする・・・ってことかな?
sudo touch /etc/subuid /etc/subgid
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)
podmanに反映
podman system migrateにて
上記権限設定をpodmanに反映させる。
podman unshare cat /proc/self/uid_map
0 1000 1
podman info
・・・
idMappings:
gidmap:
- container_id: 0
host_id: 1000
size: 1
uidmap:
- container_id: 0
host_id: 1000
size: 1
podman system migrateを実行すると
podman system migrate
podman unshare cat /proc/self/uid_map
0 1000 1
1 100000 65536
podman info
・・・
idMappings:
gidmap:
- container_id: 0
host_id: 1000
size: 1
- container_id: 1
host_id: 100000
size: 65536
uidmap:
- container_id: 0
host_id: 1000
size: 1
- container_id: 1
host_id: 100000
size: 65536
トラブルシューティング
newuidmap問題
podman info
WARN[0000] "/" is not a shared mount, this could cause issues or missing mounts with rootless containers
Error: cannot setup namespace using newuidmap: exit status 1
よくわからんが、
newuidmapのパーミッションの問題らしい
newuidmapとnewgidmapに+sを加える
sudo apt install uidmap
sudo chmod u+s $(which newuidmap)
sudo chmod u+s $(which newgidmap)
subuid問題
podman run -it busybox
✔ docker.io/library/busybox:latest
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 3cb635b06aa2 done
Error: writing blob: adding layer with blob "sha256:3cb635b06aa273034d7080e0242e4b6628c59347d6ddefff019bfd82f45aa7d5": Error processing tar file(exit status 1): potentially insufficient UIDs or GIDs available in user namespace (requested 65534:65534 for /home): Check /etc/subuid and /etc/subgid: lchown /home: invalid argument
何が何だかわからんが、
/etc/subuidと/etc/subgidを設定しろという感じらしい。
とにかく以下を実行
sudo touch /etc/subuid /etc/subgid
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(whoami)
sudo chmod u+s $(which newuidmap)
sudo chmod u+s $(which newgidmap)
podman system migrate
podman info
・・・
その他
podman info
WARN[0000] "/" is not a shared mount, this could cause issues or missing mounts with rootless containers
cannot clone: Operation not permitted
Error: cannot re-exec process
権限周りなのは想像できるが、
どこがどう詰まってるのかはさっぱりわからん。
Discussion