概要
- Podman で Docker Compose プロジェクトを扱う課題と解決策の解説
- BuildKit 利用のための設定手順と注意点
- Bake を活用したビルドプロセスの簡略化
- Bakah ツールによるComposeビルドの効率化
- 今後の活用例と soju-containers への応用計画
PodmanでDocker Composeプロジェクトを運用する課題
- Docker は nftables との相性や rootless/daemonless 運用に制約
- Podman はDocker Compose互換を2方式で提供
- 公式 Docker Compose CLI をPodmanソケットへ接続
- 独自の podman-compose ラッパーを利用
- 公式CLI利用時は BuildKit が無効化され、追加コンテキスト等の機能が未対応
- podman-compose 利用時は一部Compose機能(!reset, configs, サービス参照等)が未実装
- podman-compose の機能追加は追従作業が多く、Python実装のためモチベーション低下
BuildKitをPodmanと連携させる方法
- Docker Compose CLI をPodmanソケットに直結し、 BuildKit を有効化する手順
- podman-compose ラッパーはBuildKitを強制的に無効化
- Arch Linuxの場合の設定例
pacman -S docker-compose docker-buildxsystemctl --user start podman.socketdocker context create podman --docker host=unix://$XDG_RUNTIME_DIR/podman/podman.sockdocker context use podman
- この設定で docker compose がBuildKitコンテナを自動生成
- 自動生成を避けたい場合はBuildKitデーモンを手動で起動
pacman -S buildkitsystemctl --user start buildkit.servicedocker buildx create --name local unix://$XDG_RUNTIME_DIR/buildkit/rootlessdocker buildx use local
- これで docker compose がsystemd管理のBuildKitサービスを利用
デーモンレス・BuildKit非依存ビルドの工夫
- Podman の魅力は デーモンレス 運用
- BuildKitデーモン常駐は理想ではないため、ビルドを Bake で記述
docker buildx bake --printでComposeプロジェクトをJSON形式のBakeファイルに変換- COMPOSE_BAKE=true 設定でDocker Compose CLIがBakeファイルを利用(v2.33以降対応)
- BakeはHCLファイル等も扱えるが、JSON変換で十分
Bakahツールによるビルドプロセスの簡略化
- Bake JSON ファイルと podman build コマンドの引数は類似
- Bake JSONを Buildah で直接ビルドするツール Bakah を開発
- BuildahはPodmanのビルド基盤
- Bakah の特徴
- 依存関係解決、並列ビルド等の基本機能を実装
- HCL・継承・変数等の高度なBake機能は未対応
- 使い方例
docker buildx bake --print >bake.jsonbakah --file bake.json
- 複雑なComposeプロジェクトのビルドにも十分対応
今後の展望とsoju-containersへの応用
- soju-containers での複数Dockerfile(バックエンド・フロントエンド分離)管理に活用予定
- CIシェルスクリプトのPodman CLI呼び出し部分の廃止計画
- Bakah の今後の発展と、他ユーザーへの有用性の期待