Podman4でDocker Composeを使う方法: ポッドマンが倒せない(8)
Docker Desktop 重くね?
関連記事:
Podman Desktopを試す: ポッドマンが倒せない(4)
Distrodを使ってWSLでsystemdを動かす
ポッドマンが倒せないシリーズ過去記事
Podmanについてまぁまぁ記事化しているが、
個人的にはもうDockerを使っていない。
マイクらですらPodmanで動作させているぐらい。
とはいえ、仕事ではまだまだDockerが主流なので、
仕方がなく使ってはいるのだが。。。
( ゚Д゚) Docker Desktop 重くね?
Docker Desktopの有償化について語ることが多いが、
そもそも重すぎないかと。
起動してからコンテナを起動するわけで、
できるだけ軽いほうがいい。
じゃあバックエンドをPodmanにすればその分軽くなるのではなかろうかと。
Docker DesktopではなくWSL上にDockerを載せる方法もあるけど、
Docker自体が重いのでそこも変えたい。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
準備
今回はUbuntu22.04(jammy)を使用。
Systemdを使うのが前提なのでWindows11で説明しているが、
Windows10でもできるらしい。
クライアント側を用意
以下を参照のこと
Podmanを設置
Ubuntu側にPodmanをインストール。
Podman4を使うためにリポジトリの登録から。
curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/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
続いてPodmanのインストール
sudo apt update
sudo apt install -y podman
podman --version
podman version 4.5.0
sudo chmod u+s $(which newuidmap)
sudo chmod u+s $(which newgidmap)
Docker Composeをインストールする
Docker Composeをインストールする。
docker-composeはPythonスクリプトだと思うが、
パッケージとしてインストールするとdocker自体もインストールされてしまう。
なので、今回はバイナリファイルをそのまま利用する。
インストールパスを $HOME/.local/bin とすると
mkdir -p ~/.local/bin
curl -SL https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64 -o ~/.local/bin/docker-compose
chmod +x ~/.local/bin/docker-compose
sudo cp ~/.local/bin/docker-compose /usr/local/bin/docker-compose
docker-compose --version
Docker Compose version v2.17.3
SystemdにPodmanを登録する
systemctl --user enable --now podman.socket
systemctl --user status podman.socket
● podman.socket - Podman API Socket
Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled; vendor preset: enabled)
Active: active (listening) since Thu 2023-05-04 15:34:28 JST; 45min ago
curl -s --unix-socket /run/user/1000/podman/podman.sock http://d/v4.0.0/libpod/info
{"host":{"arch":"amd64","buildahVersion":"1.30.0","cgroupManager":"cgroupfs"・・・
DOCKER_HOSTを設定
docker-composeはDOCKER_HOST経由でアクセスするので、
DOCKER_HOSTにPodmanのパスを設定する
まずはパスを確認する
podman info --format '{{.Host.RemoteSocket.Path}}'
/run/user/1000/podman/podman.sock
上記値をDOCKER_HOST値を設定する。
いったんコマンドで設定するが、
.profileなどに登録しておく
export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock
docker-compose upしてみる
ではbitnamiのサンプルを使って実行してみる。
適当なディレクトリにdocker-compose.ymlを配置して実行する。
mkdir ~/work
mkdir ~/work/bitnami
cd ~/work/bitnami
curl -LO https://github.com/bitnami/containers/raw/main/bitnami/wordpress/docker-compose.yml
docker-compose up
ttp://localhost へアクセス
WordPressの画面
(^_-)-☆ やったね
------------------- ↓ 後書きはここから ↓-------------------
Docker ComposeをPod化するのが理想ではあるが、
ただ、仕事でdocker-compose.ymlを作成する機会はほぼないので、
郷に入っては郷に従えということで。
トラブルシューティング
rootlessport cannot expose privileged port 80
docker-compose up時にport権限のエラー
docker-compose up -d
Error response from daemon: rootlessport cannot expose privileged port 80, you can add 'net.ipv4.ip_unprivileged_port_start=80' to /etc/sysctl.conf (currently 1024), or choose a larger port number (>= 1024): listen tcp 0.0.0.0:80: bind: permission denied
1024以下のportをルートレスで使うことは許可が必要的な
直し方はよくわかってないが/etc/sysctl.confに書き込めばいいとのこと
+ net.ipv4.ip_unprivileged_port_start=80
sysctlを実行
sudo sysctl -p
cgroupディレクトリにファイルがないと言われる
Docker up中に以下のようなエラーが出る
docker-compose up -d nginx
Error response from daemon: crun: creating cgroup directory `/sys/fs/cgroup/systemd/docker/buildx/libpod-4cf0a633858b01798d639dd57dbadfadbe37a40824e4100eb330f06d916c3416`: No such file or directory: OCI runtime attempted to invoke a command that was not found
正直原因はわからないが、
rootlessモードからrootfulモードに変えたらすんなり通った。
sudo systemctl enable --now podman.socket
export DOCKER_HOST=unix:///run/podman/podman.sock
sudo -E /path/to/docker-compose up -d nginx
dockerコマンドを一度実行すると二度とレスポンスがない
docker composeを一回実行(upなど)し、
次の実行(downなど)をしようとするとなんの動きもなくなる場合がある
いまだに原因不明なので対応のしようがない状態。
podman-composeならば発生しない模様。
また、rootfull運用であれば稼働するので、
どちらかを選ぶことになりそう。
リモートpodmanに接続する方法
ちょっと面白い方法を見つけたので追記。
別の記事にするかも。
ssh -fnNT -L/tmp/podman.sock:/run/user/1000/podman/podman.sock ssh://user@172.21.
235.249:50503
Discussion