0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ubuntuのpodman-composeについて

Last updated at Posted at 2024-07-22

ubuntuのpodman-composeがクセ強いので、注意

環境について

こちらの環境で確認しております

PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

インストール方法

apt-get install -y podman podman-compose

とりあえず使ってみる

podman compose up -d

デバッグ情報が流れ込んでくるが、とりあえず動く

ユーザー空間で使ってみる

sudoでユーザーを移動するならDBUS_SESSION_BUS_ADDRESS環境変数をいい感じにセットしてあげる必要がある。

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"

bashrcに登録するといいかもね

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus" >> ~/.bashrc

あと、ログイン設定を変更してあげないといけない。
systemd環境における通常のログインプロセスは、ユーザーがログインと同時にユーザー空間用systemdが動作する。
これにより、systemctl --user関連のコマンド、つまりはユーザー専用サービスが起動する。
しかし、sudoなどはログインプロセスを実施してくれない。

そこで、systemdにユーザーが常時ログインしている状態を維持するよう指示しないといけない
それがlingerと呼ばれるもの

まず、rootか通常sudoでこれを実行

sudo loginctl enable-linger <ユーザー名>

これで常時起動させられる。 また、ユーザー空間のサーバーが常時起動するようになるため、
ユーザー空間で動作させたいサーバーなどには最適解だったりする

composeを自動起動させる

ユーザー空間のcomposeやpodmanのpodは自動起動をしない。
なので、systemdなどで起こしてやる必要がある。 この際にもlingerが役に立つ。

まず、rootかsudoで

sudo podman compose systemd -a create-unit

ubuntu版の場合、どういうわけかコンテナ起動時にpodman startをするが、
コンテナの名前解決がふつーにできないのでユニットファイルを改造する。

sudoedit /etc/systemd/user/podman-compose\@.service
# /etc/systemd/user/podman-compose@.service

[Unit]
Description=%i rootless pod (podman-compose)

[Service]
Type=simple
EnvironmentFile=%h/.config/containers/compose/projects/%i.env
ExecStart=/usr/bin/podman-compose -f ${COMPOSE_PROJECT_DIR}/${COMPOSE_FILE} up
ExecStop=/usr/bin/podman-compose -f ${COMPOSE_PROJECT_DIR}/${COMPOSE_FILE} down

[Install]
WantedBy=default.target

これができてたら

podman compose systemd
systemctl --user enable podman-compose@

(@の先にcompose名)
で動くはず

なぜStop時にdownさせるの?

まずdownの挙動が、コンテナを停止させ、削除するというものなんだけど
コンテナを削除するという理由が、コンテナ内に不要物(ログとか)がたまっていく恐れがあるというもの、
あとは、コンテナが永久的に存在する保証がないというところから、思い切って消去してます

なので、コンテナ設計時もそれを意識するのがいいと思います。
(イメージをビルドしたら半永久的に使えるようになります)

個人的な疑問

  • machinectl使えって公式が言ってるが、環境変数などで解決できるから問題ないんじゃないか?

どういうわけかコンテナ起動時にpodman startをするが、

  • などといったが、実際元コードがどうしてそうなったのか理解してない(...いやな予感がする
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?