本文へPodman、Compose、BuildKitの利用
元記事: 原文(emersion.fr) 概要
- 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-buildx
systemctl --user start podman.socket
docker context create podman --docker host=unix://$XDG_RUNTIME_DIR/podman/podman.sock
docker context use podman
- この設定で docker compose がBuildKitコンテナを自動生成
- 自動生成を避けたい場合はBuildKitデーモンを手動で起動
pacman -S buildkit
systemctl --user start buildkit.service
docker buildx create --name local unix://$XDG_RUNTIME_DIR/buildkit/rootless
docker 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 を開発
- Bakah の特徴
- 依存関係解決、並列ビルド等の基本機能を実装
- HCL・継承・変数等の高度なBake機能は未対応
- 使い方例
docker buildx bake --print >bake.json
bakah --file bake.json
- 複雑なComposeプロジェクトのビルドにも十分対応
今後の展望とsoju-containersへの応用
- soju-containers での複数Dockerfile(バックエンド・フロントエンド分離)管理に活用予定
- CIシェルスクリプトのPodman CLI呼び出し部分の廃止計画
- Bakah の今後の発展と、他ユーザーへの有用性の期待
提供: ハクソク · 要約更新:
AIによる日本語要約です。内容は原文とあわせてご確認ください。
Hacker Newsの議論を読む
数ヶ月前に、まさにこの問題(Podmanでのbuildkitなし)に直面したことがあるよ。諦めてDocker Desktopを使ったけど、君は頑張ったんだね。素晴らしい!