Red Hat UBI8 (RHEL 8.10) Apache + PHP 7.4 コンテナ構築
Smarty 4.0.0 / PHPExcel 1.8.0 / PHPUnit 9.6 追加インストールまでの全体マニュアル
(MacBook / Intel 系 PC 共通)
Tags: Docker, Colima, Linux, Windows, Intel, amd64, RHEL, UBI, Apache, PHP, Smarty, PHPExcel, PHPUnit
はじめに
本ドキュメントは、Red Hat 系公式イメージ
registry.access.redhat.com/ubi8/php-74(中身: RHEL 8.10 + Apache + PHP 7.4)を起動し、
下記ライブラリをコンテナ内 /opt 配下へ固定インストールするまでの 作業マニュアル です。
対象ホスト:
| ホスト | CPU | コンテナランタイム |
|---|---|---|
| MacBook | Apple Silicon または Intel Mac | Colima + Docker CLI(推奨) |
| Intel 系 PC | x86_64 / amd64 | Docker Engine(Linux)または Docker Desktop(Windows) |
| パッケージ | インストール先 | 検証済み実バージョン |
|---|---|---|
| Smarty 4.0.0 | /opt/Smarty4.0.0 |
4.0.0 |
| PHPExcel 1.8.0 | /opt/PHPExcel1.8.0 |
1.8.0 |
| PHPUnit 9.6 | /opt/PHPUnit9.6 |
9.6.36(9.6 系 PHAR) |
ポイント: コンテナを削除すると
/optの変更も消えます。本構成は Dockerfile に焼き込む方式 で永続化します。
Intel PC の利点: UBI PHP イメージの主アーキテクチャは amd64 のため、Intel PC では通常 ネイティブ実行(エミュレーション不要)です。
目次
- コンテナ主要情報サマリ
- 前提環境(Mac / Intel PC)
- バージョン互換性マトリクス(重要)
- 作成・構築時の注意事項
- 手順① ホスト別 Docker 準備
- 手順② ベースコンテナ起動
- 手順③ 追加パッケージインストール
- 手順④ Dockerfile で永続化(推奨)
- 手順⑤ コンテナからイメージを作る
- 動作確認
- アプリからの利用例
- よくあるトラブル
- ディレクトリ構成
- コマンドチートシート(章別)
1. コンテナ主要情報サマリ
| 項目 | 内容 |
|---|---|
| ベースイメージ | registry.access.redhat.com/ubi8/php-74:latest |
| ビルド後ローカルイメージ | local/ubi8-php74-app:1.0 |
| OS |
Red Hat Enterprise Linux 8.10 (Ootpa) (VERSION_ID=8.10) |
| Web サーバ | Apache httpd 2.4.37(RHEL 同梱) |
| PHP | 7.4.33(mod_php / CLI) |
| コンテナ名 | rh-apache-php |
| アクセス URL | http://127.0.0.1:18080/ |
| コンテナ Listen |
8080(非 root 向けポート) |
| DocumentRoot | /opt/app-root/src |
| 起動コマンド | /usr/libexec/s2i/run |
| 実行ユーザ | UID 1001(ビルド時のみ root) |
| 追加ライブラリ | Smarty / PHPExcel / PHPUnit → それぞれ /opt/...
|
ホストポートが 18080 である理由
Mac 側の 8080 が別アプリに占有されている場合があるため、
18080 → コンテナ 8080 にマッピングしています。空いていれば 8080:8080 に変更可能です。
Docker Official php:apache ではない理由
Docker Hub 公式 php:*-apache は Debian / Alpine のみ で、Red Hat 系タグはありません。
Red Hat が必要な場合は UBI/RHEL の ubi8/php-74 などを使います。
2. 前提環境(Mac / Intel PC)
2.1 ホスト別推奨構成
| 項目 | MacBook | Intel 系 PC(Linux) | Intel 系 PC(Windows) |
|---|---|---|---|
| CPU | Apple Silicon / Intel | x86_64 (amd64) | x86_64 (amd64) |
| Host OS | macOS | RHEL / Rocky / Alma / CentOS Stream / Ubuntu など | Windows 10/11 Pro など |
| ランタイム | Colima + Docker CLI | Docker Engine | Docker Desktop(WSL2 バックエンド推奨) |
| Compose | Docker Compose v2 | Docker Compose v2 プラグイン | Desktop 同梱 Compose v2 |
| Colima 必要? | ✅ 推奨 | ❌ 不要 | ❌ 不要 |
| イメージ arch | 環境により amd64 エミュ可 | amd64 ネイティブ(推奨) | amd64 ネイティブ(推奨) |
| ファイアウォール | 通常はローカルのみ |
firewalld/ufw で 18080 開放が必要な場合あり |
Windows Defender ファイアウォール許可 |
| SELinux | 該当なし | Enforcing 時はボリューム :Z/:z を検討 |
該当なし |
2.2 共通確認コマンド
uname -m # x86_64 なら Intel/AMD 64bit
docker version
docker compose version
docker info | grep -E 'OSType|Architecture|Server Version'
Mac(Colima)追加確認:
colima status
Intel Linux 追加確認:
systemctl is-active docker
id | grep docker || echo "docker グループ未加入 → sudo usermod -aG docker $USER の後に再ログイン"
2.3 ネットワーク共通要件
次のホストへ HTTPS で到達できる必要があります。
-
registry.access.redhat.com(イメージ pull) -
github.com(Smarty / PHPExcel ソース) -
phar.phpunit.de(PHPUnit PHAR)
プロキシ環境では Docker daemon / ビルドに HTTP_PROXY/HTTPS_PROXY/NO_PROXY を設定してください。
3. バージョン互換性マトリクス(重要)
本環境は PHP 7.4.33 / RHEL 8.10 固定です。ライブラリ選定時はこの制約を最優先にしてください。
3.1 PHP ↔ 追加パッケージ
| パッケージ | 指定バージョン | PHP 要件(一般) | PHP 7.4 互換 | 備考 |
|---|---|---|---|---|
| Smarty | 4.0.0 | 4.0.x は PHP 7.1+ | ✅ | Smarty 5 系は PHP 8.1+ 寄り。安易に 5 系へ上げないこと |
| PHPExcel | 1.8.0 | 実質 PHP 5.2〜7.x | ⚠️ 動作可・非推奨 | 開発終了。PHP 7.4 で Deprecated 警告の可能性。後継は PhpSpreadsheet |
| PHPUnit | 9.6 系 | PHP 7.3〜8.2 | ✅ | PHPUnit 10+ は PHP 8.1+ 必須 → 7.4 では使用不可 |
3.2 PHPUnit メジャー ↔ PHP
| PHPUnit | 対応 PHP | 本環境(7.4) |
|---|---|---|
| 8.x | おおよそ 7.2〜8.0 | △ |
| 9.6 | 7.3〜8.2 | ✅ 採用 |
| 10.x | 8.1+ | ❌ |
| 11.x | 8.2+ | ❌ |
3.3 Smarty メジャー ↔ PHP
| Smarty | おおよそ PHP | 本環境 |
|---|---|---|
| 3.1.x | 5.2〜7.x | △(古い) |
| 4.0.0 | 7.1+ | ✅ 採用 |
| 4.3+ / 5.x | より新しい PHP 前提 | ⚠️ 上げる前に要件確認 |
3.4 PHPExcel の注意
- リポジトリは アーカイブ(メンテ終了)
- 新規 Excel 開発なら PhpSpreadsheet を検討(PHP 要件が上がる可能性)
- 1.8.0 を維持する場合:
- 必要拡張: zip / xml / dom / gd(用途による)
- 本 UBI イメージでは zip/xml 系が含まれていることを確認済み
- 運用時の Deprecated 警告の扱い方針を決めておくこと
3.5 OS / イメージタグ
| タグ例 | 意味 |
|---|---|
ubi8/php-74 |
UBI8(=RHEL8) + PHP 7.4。現在 8.10 |
ubi9/php-83 |
UBI9 + PHP 8.3(本ドキュメント対象外) |
php:7.4-apache(Official) |
Debian 系。Red Hat ではない |
latest はパッチでマイナーが変わることがあります。厳密固定が必要なら digest ピン を検討してください。
4. 作成・構築時の注意事項
4.1 S2I イメージの起動コマンド
ubi8/php-74 のデフォルト Cmd は usage(使い方表示) です。
そのまま起動すると 即終了または再起動ループ になります。
command: /usr/libexec/s2i/run
4.2 /opt への書き込み権限
実行ユーザは 1001(非 root) です。/opt へインストールするときは:
-
docker exec -u 0 ...で root 実行する、または - Dockerfile 内で
USER 0→ インストール →USER 1001に戻す
4.3 コンテナ再作成時の消失
docker exec だけで入れた /opt のファイルは、イメージに焼かなければ消えます。
Dockerfile(本方式)またはボリュームマウントで残してください。
4.4 ホスト 8080 の衝突
8080 が占有されていると compose 失敗、または別アプリに接続されます。本構成は 18080 を使用します。
4.5 アーキテクチャ(Mac vs Intel PC)
| ホスト | 推奨 | 注意 |
|---|---|---|
| Intel PC (x86_64) |
linux/amd64 ネイティブ |
追加の platform 指定は通常不要。最も単純 |
| Intel Mac | Colima x86_64
|
Mac だが CPU は amd64 に近く動作 |
| Apple Silicon | Colima arch / --platform=linux/amd64
|
エミュレーションで 遅くなる場合あり |
Intel PC で platform を明示したいとき(任意):
docker pull --platform=linux/amd64 registry.access.redhat.com/ubi8/php-74:latest
docker-compose.yml 例:
services:
apache-php:
platform: linux/amd64
# ...
4.6 Intel Linux PC 専用の注意
-
docker グループ:
permission deniedondocker.sock→ ユーザをdockerグループに追加後 再ログイン -
SELinux (RHEL/Rocky など): バインドマウント失敗時は
./src:/opt/app-root/src:Zまたはポリシー確認 - firewalld: 他 PC から接続する場合のみ必要
sudo firewall-cmd --add-port=18080/tcp --permanent
sudo firewall-cmd --reload
-
ディスク: イメージ+ビルドキャッシュで数 GB 使用。
/var/lib/dockerの空きを確認
4.7 Intel Windows PC 専用の注意
- Docker Desktop は WSL2 バックエンド 推奨(Hyper-V のみの構成は旧式)
- プロジェクトパスは WSL2 Linux ファイルシステム(例:
~/work/...)に置くとボリューム I/O が速い
(C:\Users\...マウントは遅くなる場合あり) - 改行コード: Git
core.autocrlfによりシェルスクリプトが壊れる場合あり →LFを維持 -
start.shは Git Bash / WSL で実行
4.8 ライセンス・サポート
- UBI は再配布しやすいが、商用 RHEL サポート契約とは別
- PHPExcel は OSS だが EOL、セキュリティ修正は期待しにくい
4.9 PHPUnit PHAR のマイナー
phpunit-9.6.phar は 9.6 系の最新パッチ(例: 9.6.36)を指すことがあります。
「9.6.0 そのもの」が必要な場合は、GitHub の特定タグ / Composer の正確なバージョン指定で固定してください。
4.10 README・手順書作成時
- OS / PHP / ライブラリバージョンを表で固定して書く(後のドリフト防止)
-
latestだけ書かず、検証時点の 実測バージョン を併記 - S2I 特有の
command漏れをチェックリストに入れる - PHPExcel の EOL・Deprecated を 既知の制約 として明記する
- ホスト(Mac / Intel Linux / Windows)別ランタイム差分を表で残す
5. 手順① ホスト別 Docker 準備
コンテナイメージ・compose・パッケージインストールは ホストが違っても同一 です。
違うのは Docker の準備方法 だけです。
5.A MacBook(Colima)
# Colima 未インストール時(Homebrew 例)
brew install colima docker docker-compose
colima start
docker info >/dev/null && echo "Docker OK"
Apple Silicon で amd64 に合わせるとき(必要時):
colima start --arch x86_64
# または pull/compose 時に --platform=linux/amd64
5.B Intel 系 PC — Linux(Docker Engine)
B-1. RHEL 8/9 · Rocky · Alma(dnf)要約
# root または sudo
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# RHEL 系はディストリビューション文書に合う repo URL を確認してください
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
# 一般ユーザで docker を使う
sudo usermod -aG docker "$USER"
# ※ 必ずログアウト/再ログイン後
docker info
docker compose version
RHEL 正式環境では社内ポリシーにより Red Hat 提供のコンテナツール(Podman など)を使う場合もあります。
本 README のdocker/docker composeコマンドを Podman 互換コマンドへ置き換えて使えるか、事前に確認してください。
B-2. Ubuntu(apt)要約
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
# 再ログイン後
docker info
公式の最新手順: Install Docker Engine
B-3. Intel Linux で本プロジェクトを起動
cd /path/to/container
docker compose build
docker compose up -d
# Colima 不要。start.sh も Docker があれば動作
./start.sh
5.C Intel 系 PC — Windows(Docker Desktop)
- Docker Desktop for Windows をインストール
- インストール時は WSL2 推奨
- Desktop 起動後、トレイアイコンが Running か確認
- PowerShell または WSL ターミナル で:
docker version
docker compose version
# WSL2 内で(推奨)
cd ~/work/container # 例パス
docker compose build
docker compose up -d
curl -I http://127.0.0.1:18080/
Windows ファイアウォールが遮断する場合は、Docker Desktop / ポート 18080 のインバウンドを許可してください。
5.D Mac vs Intel PC — 以降の手順の差分
| 段階 | Mac | Intel PC |
|---|---|---|
| Docker 準備 | colima start |
systemctl start docker または Desktop 起動 |
docker compose up |
同一 | 同一 |
| Smarty/PHPExcel/PHPUnit | 同一(イメージ内 /opt) |
同一 |
| アクセス URL | http://127.0.0.1:18080/ |
同一(遠隔接続時はホスト IP + ファイアウォール) |
6. 手順② ベースコンテナ起動
追加パッケージなしで、まず起動できることを確認する最小例です。
cd /path/to/container
cat > docker-compose.yml <<'YAML'
services:
apache-php:
image: registry.access.redhat.com/ubi8/php-74:latest
container_name: rh-apache-php
ports:
- "18080:8080"
volumes:
- ./src:/opt/app-root/src
command: /usr/libexec/s2i/run
restart: unless-stopped
YAML
mkdir -p src
docker compose up -d
curl -I http://127.0.0.1:18080/
確認:
docker exec rh-apache-php cat /etc/os-release | head -5
docker exec rh-apache-php php -v | head -1
docker exec rh-apache-php httpd -v | head -1
期待値:
VERSION_ID="8.10"PHP 7.4.xApache/2.4.x (Red Hat Enterprise Linux)
7. 手順③ 追加パッケージインストール
7.1 インストールスクリプト(同梱)
scripts/install-packages.sh が次を実行します。
- Smarty
v4.0.0→/opt/Smarty4.0.0 - PHPExcel
1.8.0→/opt/PHPExcel1.8.0 - PHPUnit
phpunit-9.6.phar→/opt/PHPUnit9.6/phpunit.phar+ ラッパphpunit
7.2 稼働中コンテナへ直接入れる場合
docker cp scripts/install-packages.sh rh-apache-php:/tmp/install-packages.sh
docker exec -u 0 rh-apache-php bash /tmp/install-packages.sh
7.3 手動インストール(参考)
# Smarty 4.0.0
curl -fsSL -o /tmp/smarty.tgz \
https://github.com/smarty-php/smarty/archive/refs/tags/v4.0.0.tar.gz
tar -xzf /tmp/smarty.tgz -C /opt
mv /opt/smarty-4.0.0 /opt/Smarty4.0.0
# PHPExcel 1.8.0
curl -fsSL -o /tmp/phpexcel.tgz \
https://github.com/PHPOffice/PHPExcel/archive/refs/tags/1.8.0.tar.gz
tar -xzf /tmp/phpexcel.tgz -C /opt
mv /opt/PHPExcel-1.8.0 /opt/PHPExcel1.8.0
# PHPUnit 9.6
mkdir -p /opt/PHPUnit9.6
curl -fsSL -o /opt/PHPUnit9.6/phpunit.phar \
https://phar.phpunit.de/phpunit-9.6.phar
chmod +x /opt/PHPUnit9.6/phpunit.phar
8. 手順④ Dockerfile で永続化(推奨)
8.1 Dockerfile
FROM registry.access.redhat.com/ubi8/php-74:latest
USER 0
RUN microdnf install -y curl tar gzip \
|| (yum install -y curl tar gzip) \
|| true
COPY scripts/install-packages.sh /tmp/install-packages.sh
RUN bash /tmp/install-packages.sh \
&& rm -f /tmp/install-packages.sh \
&& rm -rf /tmp/pkg-install
USER 1001
8.2 docker-compose.yml(ビルド込み)
services:
apache-php:
build: .
image: local/ubi8-php74-app:1.0
container_name: rh-apache-php
ports:
- "18080:8080"
volumes:
- ./src:/opt/app-root/src
command: /usr/libexec/s2i/run
restart: unless-stopped
8.3 ビルド & 起動
docker compose down
docker compose build --no-cache
docker compose up -d
または:
./start.sh
9. 手順⑤ コンテナからイメージを作る
すでに起動・設定したコンテナ(rh-apache-php)を ローカルイメージ として残す、または
tar ファイルに書き出して 別の Mac / Intel PC へ移す方法です。
9.1 2つの方式の比較
| 方式 | コマンド | 再現性 | いつ使うか |
|---|---|---|---|
| A. Dockerfile ビルド(推奨) | docker compose build |
✅ 高い | 通常の正式配布・チーム共有 |
| B. コンテナコミット | docker commit |
⚠️ 低い | 手作業で触った状態を急ぎスナップショット |
推奨: 普段は A(Dockerfile)。
docker execだけで追加インストールした直後・一回限りのバックアップには B(commit) が速いです。
ボリュームでマウントした./srcの内容は イメージに入りません(両方共通)。
9.2 方法 A — Dockerfile でイメージビルド(推奨)
cd /path/to/container
# イメージ名: local/ubi8-php74-app:1.0 (compose の image と同一)
docker compose build
# 確認
docker images local/ubi8-php74-app
タグ追加例:
docker tag local/ubi8-php74-app:1.0 local/ubi8-php74-app:$(date +%Y%m%d)
9.3 方法 B — 稼働中コンテナをコミットしてイメージ化
# 1) 対象コンテナ確認
docker ps --filter name=rh-apache-php
# 2) コミット(名前:タグは自由)
docker commit \
-m "RHEL8.10 PHP7.4 + Smarty4.0.0 PHPExcel1.8.0 PHPUnit9.6" \
-a "your-name" \
rh-apache-php \
local/ubi8-php74-app:commit-1.0
# 3) 確認
docker images local/ubi8-php74-app
コミット時の注意:
| 項目 | 内容 |
|---|---|
| マウントボリューム |
./src → /opt/app-root/src は コミットに含まれない
|
| 実行中プロセス | 動作中でも commit 可能だが、可能なら負荷が低いとき |
| ENTRYPOINT/CMD | 元が維持される。起動時は引き続き command: /usr/libexec/s2i/run 推奨 |
| 履歴 | Dockerfile と違い レイヤ履歴が不透明 → 再現・監査が難しい |
コミットイメージで再起動:
docker run -d --name rh-apache-php \
-p 18080:8080 \
-v "$PWD/src:/opt/app-root/src" \
local/ubi8-php74-app:commit-1.0 \
/usr/libexec/s2i/run
または compose の image: だけ差し替え、build: を一時削除:
services:
apache-php:
image: local/ubi8-php74-app:commit-1.0
container_name: rh-apache-php
ports:
- "18080:8080"
volumes:
- ./src:/opt/app-root/src
command: /usr/libexec/s2i/run
restart: unless-stopped
9.4 イメージをファイルへ書き出し(save)・別 PC で読み込み(load)
レジストリなしで USB・共有フォルダへ移すときに使います。
# 書き出し(ホストに tar 生成)
mkdir -p dist
docker save -o dist/ubi8-php74-app-1.0.tar local/ubi8-php74-app:1.0
# 容量確認
ls -lh dist/ubi8-php74-app-1.0.tar
# (任意)圧縮
gzip -k dist/ubi8-php74-app-1.0.tar
別の Mac / Intel PC で:
# 圧縮した場合
gunzip -k ubi8-php74-app-1.0.tar.gz
# 読み込み
docker load -i ubi8-php74-app-1.0.tar
# 確認後に起動
docker images local/ubi8-php74-app
docker compose up -d
# ※ compose の image: が load したタグと一致していること
一行スクリプト例(同梱 scripts/export-image.sh):
./scripts/export-image.sh
# → dist/ubi8-php74-app-1.0.tar 生成
9.5 (任意)レジストリへ push
社内 Harbor / Docker Hub などがある場合:
docker tag local/ubi8-php74-app:1.0 registry.example.com/team/ubi8-php74-app:1.0
docker login registry.example.com
docker push registry.example.com/team/ubi8-php74-app:1.0
受け取り側:
docker pull registry.example.com/team/ubi8-php74-app:1.0
9.6 イメージ化チェックリスト
-
/opt/Smarty4.0.0/opt/PHPExcel1.8.0/opt/PHPUnit9.6の存在確認後にコミット/ビルド -
タグ名に OS・PHP・用途を明示(例:
local/ubi8-php74-app:1.0) -
docker saveの tar をバックアップ場所へ保管 -
アプリコード(
src/)は 別途 Git/配布 — イメージに入れない構成が基本 - 移管先 PC が Intel(amd64) か確認(Apple Silicon → Intel は amd64 イメージのままで OK)
10. 動作確認
docker exec rh-apache-php ls -la /opt/Smarty4.0.0 /opt/PHPExcel1.8.0 /opt/PHPUnit9.6
docker exec rh-apache-php php -r \
"require '/opt/Smarty4.0.0/libs/Smarty.class.php'; echo Smarty::SMARTY_VERSION, PHP_EOL;"
docker exec rh-apache-php php -r \
"require '/opt/PHPExcel1.8.0/Classes/PHPExcel.php'; echo 'PHPExcel loaded', PHP_EOL;"
docker exec rh-apache-php php /opt/PHPUnit9.6/phpunit.phar --version
curl -s http://127.0.0.1:18080/ | head
検証完了例:
Smarty: 4.0.0
PHPExcel: loaded
PHPUnit 9.6.36
OS: Red Hat Enterprise Linux 8.10 (Ootpa)
PHP: 7.4.33
11. アプリからの利用例
DocumentRoot は /opt/app-root/src(ホストの ./src)です。
<?php
// Smarty
require_once '/opt/Smarty4.0.0/libs/Smarty.class.php';
$smarty = new Smarty();
$smarty->setTemplateDir(__DIR__ . '/templates');
$smarty->setCompileDir('/tmp/smarty_compile'); // 書き込み可能なパス
// PHPExcel
require_once '/opt/PHPExcel1.8.0/Classes/PHPExcel.php';
$book = new PHPExcel();
// PHPUnit(CLI)
// docker exec rh-apache-php /opt/PHPUnit9.6/phpunit --version
Smarty の
templates_c/cacheは 非 root が書けるパス(例:/tmp/...)を指定してください。
12. よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| コンテナがすぐ落ちる | デフォルト usage 起動 |
command: /usr/libexec/s2i/run |
/opt に書けない |
UID 1001 |
docker exec -u 0 または Dockerfile で root ビルド |
| 18080 で別アプリが見える | ポート取り違え |
docker ps でマッピング確認 |
| PHPUnit 10 導入後に失敗 | PHP 8.1+ 必須 | 9.6 系を維持 |
| Smarty 5 に上げて壊れる | PHP/API 変更 | 4.0.0 を維持 または要件再確認 |
| PHPExcel の Deprecated が多い | PHP 7.4 × EOL | 警告抑制または PhpSpreadsheet 移行 |
再作成後に /opt が消える |
イメージ未反映 | Dockerfile ビルドまたは docker commit
|
| コミットイメージにアプリコードがない |
src はボリューム |
正常。コードは別途配布 |
docker save ファイルが大きい |
全レイヤ含む |
gzip 圧縮、不要イメージは docker image prune
|
| load 後に compose が再 pull/build |
image: タグ不一致 |
load した名前:タグと compose を一致 |
permission denied docker.sock(Linux) |
docker グループ未加入 |
usermod -aG docker 後 再ログイン
|
| ボリュームマウント Permission denied(RHEL) | SELinux |
:Z オプションまたはコンテキスト調整 |
| 他 PC から接続できない | ファイアウォール |
firewalld/ufw/Windows FW で 18080 許可 |
| Windows でスクリプト失敗 | CRLF |
LF に変換、WSL で実行 |
| Mac だけ遅い | arm64→amd64 エミュ | Intel PC では該当なし(ネイティブ) |
Intel PC で colima: command not found
|
Colima は Mac 向け | 無視して Docker Engine/Desktop のみ使用 |
13. ディレクトリ構成
container/
├── Dockerfile # UBI8 PHP74 + /opt パッケージ焼き込み
├── docker-compose.yml # build / ポート / ボリューム / S2I run
├── start.sh # Docker 確認(Mac なら Colima)〜 up 〜疎通確認
├── README.md # 韓国語マニュアル(原文)
├── README_JAP.md # 本マニュアル(日本語)
├── dist/ # docker save 出力(gitignore 推奨)
├── scripts/
│ ├── install-packages.sh # Smarty / PHPExcel / PHPUnit インストール
│ └── export-image.sh # イメージ tar 書き出し
└── src/
└── index.php # DocumentRoot(開発用)
まとめ
- Red Hat 系 Apache+PHP は Docker Official ではなく UBI (
ubi8/php-74) を使う - コア環境: RHEL 8.10 + Apache 2.4.37 + PHP 7.4.33
- Mac → Colima + Docker / Intel PC → Docker Engine または Docker Desktop(Colima 不要)
- Intel PC は通常 amd64 ネイティブ のため、Mac(Apple Silicon) より構成が単純
- 追加インストール:
- Smarty 4.0.0 →
/opt/Smarty4.0.0 - PHPExcel 1.8.0 →
/opt/PHPExcel1.8.0 - PHPUnit 9.6 →
/opt/PHPUnit9.6
- Smarty 4.0.0 →
- PHP 7.4 制約により PHPUnit 10+ / Smarty 5 系への安易な更新は不可(または再検証が必要)
- イメージ化: Dockerfile ビルド(推奨) / 急ぎのスナップショットは
docker commit/ 移管はdocker save→docker load - アクセス: http://127.0.0.1:18080/
14. コマンドチートシート(章別)
作業ディレクトリはプロジェクトルート(docker-compose.yml がある場所)を前提とします。
cd /path/to/container
A. コンテナインストール・起動(手順 ⑤⑥ 対応)
A-1. Docker 準備(§5)
# --- Mac ---
brew install colima docker docker-compose # 初回のみ
colima start
docker info
# --- Intel Linux(サービス起動)---
sudo systemctl enable --now docker
docker info
docker compose version
# --- Intel Windows ---
# Docker Desktop 起動後
docker version
docker compose version
A-2. ベース/アプリコンテナ起動(§6 · §8)
# イメージ pull(ベースのみ使うとき)
docker pull registry.access.redhat.com/ubi8/php-74:latest
# ビルド込み起動(パッケージ焼き込みイメージ・推奨)
docker compose build
docker compose up -d
# またはまとめて
./start.sh
docker compose up -d --build
# 状態・ログ
docker ps --filter name=rh-apache-php
docker compose logs -f apache-php
# 停止・削除
docker compose stop
docker compose down
docker rm -f rh-apache-php
A-3. コンテナ内部・ホスト確認(§6 · §10)
docker exec rh-apache-php cat /etc/os-release | head -5
docker exec rh-apache-php php -v | head -1
docker exec rh-apache-php httpd -v | head -1
curl -I http://127.0.0.1:18080/
curl -s http://127.0.0.1:18080/ | head
B. 追加パッケージインストール(手順 ⑦⑧ 対応)
配置先: Smarty → /opt/Smarty4.0.0 / PHPExcel → /opt/PHPExcel1.8.0 / PHPUnit → /opt/PHPUnit9.6
B-1. スクリプトでインストール(稼働中コンテナ・§7)
docker cp scripts/install-packages.sh rh-apache-php:/tmp/install-packages.sh
docker exec -u 0 rh-apache-php bash /tmp/install-packages.sh
B-2. Dockerfile で焼き込み(推奨・§8)
docker compose build --no-cache
docker compose up -d
B-3. 手動インストール(参考・コンテナ内 root)
docker exec -u 0 -it rh-apache-php bash
# Smarty 4.0.0
curl -fsSL -o /tmp/smarty.tgz \
https://github.com/smarty-php/smarty/archive/refs/tags/v4.0.0.tar.gz
tar -xzf /tmp/smarty.tgz -C /opt && mv /opt/smarty-4.0.0 /opt/Smarty4.0.0
# PHPExcel 1.8.0
curl -fsSL -o /tmp/phpexcel.tgz \
https://github.com/PHPOffice/PHPExcel/archive/refs/tags/1.8.0.tar.gz
tar -xzf /tmp/phpexcel.tgz -C /opt && mv /opt/PHPExcel-1.8.0 /opt/PHPExcel1.8.0
# PHPUnit 9.6
mkdir -p /opt/PHPUnit9.6
curl -fsSL -o /opt/PHPUnit9.6/phpunit.phar https://phar.phpunit.de/phpunit-9.6.phar
chmod +x /opt/PHPUnit9.6/phpunit.phar
B-4. パッケージ動作確認(§10)
docker exec rh-apache-php ls -la /opt/Smarty4.0.0 /opt/PHPExcel1.8.0 /opt/PHPUnit9.6
docker exec rh-apache-php php -r \
"require '/opt/Smarty4.0.0/libs/Smarty.class.php'; echo Smarty::SMARTY_VERSION, PHP_EOL;"
docker exec rh-apache-php php -r \
"require '/opt/PHPExcel1.8.0/Classes/PHPExcel.php'; echo 'PHPExcel loaded', PHP_EOL;"
docker exec rh-apache-php php /opt/PHPUnit9.6/phpunit.phar --version
C. イメージ作成・移管(手順 ⑨ 対応)
C-1. Dockerfile ビルド(推奨)
docker compose build
docker images local/ubi8-php74-app
docker tag local/ubi8-php74-app:1.0 local/ubi8-php74-app:$(date +%Y%m%d)
C-2. コンテナコミット
docker ps --filter name=rh-apache-php
docker commit \
-m "RHEL8.10 PHP7.4 + Smarty4.0.0 PHPExcel1.8.0 PHPUnit9.6" \
rh-apache-php \
local/ubi8-php74-app:commit-1.0
docker images local/ubi8-php74-app
C-3. tar 書き出し / 別 PC で読み込み
# 書き出し
mkdir -p dist
docker save -o dist/ubi8-php74-app-1.0.tar local/ubi8-php74-app:1.0
gzip -k dist/ubi8-php74-app-1.0.tar # 任意
# スクリプト
./scripts/export-image.sh # 既存イメージ save
./scripts/export-image.sh commit-save # commit 後 save
# 別ホストで
gunzip -k ubi8-php74-app-1.0.tar.gz # 圧縮時
docker load -i ubi8-php74-app-1.0.tar
docker images
docker compose up -d
C-4. コミットイメージで直接起動
docker run -d --name rh-apache-php \
-p 18080:8080 \
-v "$PWD/src:/opt/app-root/src" \
local/ubi8-php74-app:commit-1.0 \
/usr/libexec/s2i/run
C-5. (任意)レジストリ
docker tag local/ubi8-php74-app:1.0 registry.example.com/team/ubi8-php74-app:1.0
docker login registry.example.com
docker push registry.example.com/team/ubi8-php74-app:1.0
docker pull registry.example.com/team/ubi8-php74-app:1.0
D. 一覧(最小セット)
| 目的 | コマンド |
|---|---|
| Mac Docker 準備 | colima start |
| Linux Docker 準備 | sudo systemctl enable --now docker |
| コンテナ起動 | docker compose up -d --build |
| パッケージスクリプトインストール | docker exec -u 0 ... bash /tmp/install-packages.sh |
| パッケージ確認 | docker exec ... ls /opt/Smarty4.0.0 /opt/PHPExcel1.8.0 /opt/PHPUnit9.6 |
| イメージビルド | docker compose build |
| コンテナ→イメージ | docker commit rh-apache-php local/ubi8-php74-app:commit-1.0 |
| イメージファイル化 | docker save -o dist/app.tar local/ubi8-php74-app:1.0 |
| 別 PC 復元 | docker load -i app.tar |
| Web 確認 | curl -I http://127.0.0.1:18080/ |