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?

Apache2.4+php7.4+Smarty4.0+PHPExcel1.8.0+RHEL8.10をコンテナ化メモ

0
Last updated at Posted at 2026-08-12

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 では通常 ネイティブ実行(エミュレーション不要)です。


目次

  1. コンテナ主要情報サマリ
  2. 前提環境(Mac / Intel PC)
  3. バージョン互換性マトリクス(重要)
  4. 作成・構築時の注意事項
  5. 手順① ホスト別 Docker 準備
  6. 手順② ベースコンテナ起動
  7. 手順③ 追加パッケージインストール
  8. 手順④ Dockerfile で永続化(推奨)
  9. 手順⑤ コンテナからイメージを作る
  10. 動作確認
  11. アプリからの利用例
  12. よくあるトラブル
  13. ディレクトリ構成
  14. コマンドチートシート(章別)

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 denied on docker.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)

  1. Docker Desktop for Windows をインストール
  2. インストール時は WSL2 推奨
  3. Desktop 起動後、トレイアイコンが Running か確認
  4. 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.x
  • Apache/2.4.x (Red Hat Enterprise Linux)

7. 手順③ 追加パッケージインストール

7.1 インストールスクリプト(同梱)

scripts/install-packages.sh が次を実行します。

  1. Smarty v4.0.0 → /opt/Smarty4.0.0
  2. PHPExcel 1.8.0 → /opt/PHPExcel1.8.0
  3. 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
  • 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/

参考リンク

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?