単一ブランチ + docker-bake 構成へ刷新し PHP 8.0-8.5 に対応#7
Merged
Conversation
# Conflicts: # Dockerfile
ブランチごとに Dockerfile を分ける方式から、単一ブランチ + docker-bake.hcl (PHP_VERSIONS が唯一の版一覧)+ 引数化した 1 枚の Dockerfile へ移行。 wpdev-docker-images の構成を参考にした。 - 対応 PHP: 8.0/8.1/8.2/8.3/8.4/8.5(マルチアーキ amd64/arm64) - xdebug/pcov を同梱し実行時トグル(ACMS_XDEBUG / -d pcov.enabled=1)。 -xdebug 専用イメージを廃止 - exif 追加・imagick 復活・Node(nvm) 削除 - PHP 8.5 の OPcache 静的組込みに対応(未ロード時のみ enable) - Composer をハッシュ検証してインストール、pecl 拡張を版固定、set -eux - 非 root 実行の UID/GID 実行時マッピング(ACMS_UID/ACMS_GID)、HEALTHCHECK - CI: build.yml(Docker Hub 公開/provenance/SBOM) / pr-preview.yml(GHCR) / lint.yml(actionlint)。Actions は commit SHA でピン留め、dependabot 追加 - 公開先 appleple/acms-dev(実行環境)。appleple/acms は将来の同梱版に予約 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ACMS_XDEBUG → XDEBUG - ACMS_UID / ACMS_GID → PUID / PGID (UID/GID は bash の読み取り専用特殊変数のため無印不可。PUID/PGID は Docker コミュニティの事実上の標準) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- docker-bake.hcl の PHP_VERSIONS に 7.2/7.3/7.4 を追加(計 7.2〜8.5) - Dockerfile に 7.x 向けの条件分岐を追加 - 旧 Debian(buster/stretch) は apt ソースを archive.debian.org へ切替 - gd の configure フラグを PHP 7.4 未満で切替 - redis を PHP<7.4 で 5.3.7、xdebug を PHP<8.0 で 3.1.6 にフォールバック - imagick 3.8.1 / apcu 5.1.28 / pcov 1.0.12 は全バージョン共通 - README の名前空間説明(将来の同梱版)を削除(別リポジトリで公開予定のため) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- docker-bake.hcl: PHP_LATEST 8.3 → 8.5 - README: 提供イメージ表の latest 表記を 8.5 に更新 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- pr-preview.yml: 全部入り multi-arch 1 runner → バージョン別 matrix で並列化。
PR は amd64 のみ(QEMU を廃止)。arm64 は本番 build.yml で維持。
対象バージョンは docker-bake.hcl から動的取得(二重管理しない)。
- GHCR 名前空間を ghcr.io/${{ github.repository }} に(リポジトリ改名へ自動追従)。
- OCI ラベル image.source / README を appleple/acms-development-docker-images に更新。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- build.yml: バージョン別 matrix で並列化(各ジョブが amd64+arm64 を担当)。
対象は docker-bake.hcl から動的取得。
- matrix を {version, target} のペアにし、ジョブ表示名を acms-dev:8.5 の形に
(bake のターゲット名は . 不可のため内部的には acms-dev-8-5)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
指摘: entrypoint.sh の usermod -o -u "${PUID}" www-data は、www-data の
ホームディレクトリが /var/www(README 推奨のマウント先 /var/www/html の
親)であるため、一部の shadow-utils 実装では UID 変更時にホーム配下を
自動で再帰 chown する。マウントしたプロジェクト全体が巻き込まれ得る。
検証: 実機で shadow-utils バージョンごとの挙動を確認したところ、本リポジトリ
の対応バージョン中では PHP 7.2(Debian buster, shadow 1:4.5-1.1)でのみ
実際に発生し、/var/www/html 配下のファイルが再帰的に chown されることを
再現した。7.3 以降(bullseye/trixie 系)では発生しない。
対応: Dockerfile で www-data のホームを /nonexistent に切り離す
(usermod -d /nonexistent www-data)。entrypoint.sh は変更不要。
DocumentRoot は Apache 設定ファイルで定義され $HOME に依存しないため、
配信・PUID/PGID マッピングへの影響がないことを実機(HTTP 200 応答、
uid/gid 反映)で確認済み。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- bake失敗の可視化: shell:bash明示・エラー抑制解除・空値チェックを追加 (pipefailで実害はなかったが、エラーメッセージを残すため改善) - lint.yml: reviewdog(github-check)が要求するchecks:write権限を追加 - entrypoint.sh: DocumentRoot反映をinit.txtガード方式から、ビルド時に退避した オリジナル設定(*.orig)からの冪等な再生成方式に変更。再起動のたびに APACHE_DOCUMENT_ROOTの最新値が反映される - 上記sed置換で、値に含まれる sed メタ文字(/ & \)を事前エスケープしクラッシュ ・意図しない展開を防止 - build.yml: concurrency グループのキーを github.sha から github.ref に変更 (push毎に一意なshaでは cancel-in-progress が機能しなかった) - Dockerfile: --no-install-recommends 化で失われていた openssh-client を追加 (git+ssh clone がコンテナ内で失敗する問題を修正) - entrypoint.sh: apache2 を entrypoint プロセスの exec で置き換え、PID1にする。 apache がクラッシュ/OOM-killされた場合にコンテナ自体が終了し、 restart ポリシーで正しく自動復旧できるようになる - README: compose 例から不要な privileged: true を削除 - pr-preview.yml 用に GHCR プレビュータグの自動削除ワークフロー (pr-cleanup.yml) を追加。削除には delete:packages 権限の PAT (GHCR_DELETE_TOKEN) が必要なため、未設定時は警告のみで安全にスキップ - README: pcov.ini がビルド時にイメージへ焼き込まれ、取得済みイメージには 反映されない旨を明記 - docker-bake.hcl: PR プレビュー時に未文書化の latest-<PR番号> タグが 公開されてしまう問題を修正(本番公開時のみ latest を付与) - README: 443番ポートはSSL未設定のため動作しない旨を明記し、compose例から削除 - Dockerfile: 全対応バージョンで静的組込み済みの mbstring の再ビルドと、 docker-php-ext-install が内部で自動実行する enable の重複呼び出しを削除 - Dockerfile: 公式PHPイメージと同じ apt-mark パターンでビルド専用パッケージ (build-essential・*-dev ヘッダ)を除去。自前ビルドした拡張(.so)が実際に リンクする共有ライブラリは ldd で検出し保護(Debian の /lib→/usr/lib symlinkを readlink -f で解決してから dpkg-query に渡す)。 イメージサイズを平均で 250〜350MB 削減 全9バージョン(7.2〜8.5)で再ビルドし、拡張ロード・PID1化・DocumentRoot 冪等性・sed安全性・PUID/PGID・XDEBUGトグル・HEALTHCHECK・CLIツール生存 (git/ssh/python/sendmail等)を実機検証済み。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
PHP バージョン・xdebug 有無を ブランチごとに Dockerfile を分ける方式から、
単一ブランチ +
docker-bake.hcl(PHP_VERSIONSが唯一の版一覧)+ 引数化した 1 枚のDockerfileへ刷新します。WordPress の
wpdev-docker-imagesの構成を参考にしています。主な変更
linux/amd64,arm64)ACMS_XDEBUG=true/php -d pcov.enabled=1)→-xdebug専用イメージを廃止exif追加、imagick復活、Node.js(nvm) 削除(イメージ縮小)php -mで未ロード時のみdocker-php-ext-enable)set -euxACMS_UID/ACMS_GID)、HEALTHCHECKbuild.yml(Docker Hub 公開 / provenance / SBOM)、pr-preview.yml(GHCR プレビュー)、lint.yml(actionlint)。Actions は commit SHA でピン留め、dependabot追加名前空間
appleple/acms-dev… 本リポジトリが公開する 実行環境(a-blog cms 非同梱)appleple/acms… 将来の a-blog cms 同梱プロダクトに予約検証(ローカル実ビルド)
ACMS_XDEBUG=trueで有効化・opcache 無効化(8.5 静的でもopcache.enable=0)actionlint指摘なし /docker buildx bake --print正常補足
atsu666/acms→appleple/acms-dev)の手順書は運用情報を含むためリポジトリ外で保管(.gitignoreにdocsを追加)。DOCKERHUB_USERNAME/DOCKERHUB_TOKEN)の設定が必要。🤖 Generated with Claude Code