勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Podmanで導入したapache-phpに各種PHPモジュールを追加する方法

  PHP サーバー

先日Podmanでapache-php8.4を導入したが、phpinfoで確認するとモジュール類はほぼインストールされていなかった。各種モジュールの追加方法を調べたところ、apache-php8.4と一緒に各種モジュールをインストールするイメージファイルを作成し、コンテナを作り直すのがよさそう。以下に対応方法をメモ。

 

環境について

VPS

今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。

  • 接続ポート -> 22
  • ユーザ名 -> root
  • パスワード or 秘密鍵 -> インスタンス作成時に選択したもの

ホスト(VPS)側 AlmaLinux / Apache

詳細なバージョンは以下の通り。

# AlmaLinuxのバージョン確認
cat /etc/redhat-release

# 実行結果
AlmaLinux release 8.10 (Cerulean Leopard)

# Apacheのバージョン確認
httpd -v

# 実行結果
Server version: Apache/2.4.37 (AlmaLinux)

 

対応方法

イメージをビルドするためのファイルを作成

以下内容の「Dockerfile」というファイル(拡張子なし)を作成し、ホスト側の適当なディレクトリにアップロードする。

# Docker公式PHP8.4&Apache同梱版イメージを指定
FROM docker.io/library/php:8.4-apache

# PHP拡張機能インストーラーをダウンロードして配置
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

# 実行権限を与え、必要なモジュールを一括インストール
RUN chmod +x /usr/local/bin/install-php-extensions && \
    install-php-extensions \
    apcu \
    bcmath \
    exif \
    gd \
    imagick \
    intl \
    memcache \
    memcached \
    mysqli \
    pdo_mysql \
    opcache \
    redis \
    zip \
    sockets \
    sysvsem

# Apacheのrewriteモジュールを有効化
RUN a2enmod rewrite

イメージのビルド

サーバにSSH接続し以下コマンドでイメージをビルドする。メモリ1GBの環境で5分程度かかった。

# Dockerfileを設置したディレクトリに移動
cd /path/to

# 「apache-php8.4-plus」という名前でイメージをビルド
podman build -t apache-php8.4-plus .

コンテナの再作成

正常にビルドできたらCockpitのPodmanコンテナページにビルドしたイメージが表示される筈なので過去記事を参考にコンテナを再作成する。

CLIでコンテナを作成する場合

Cockpitでのコンテナ作成ではなく、サーバにSSH接続しCLIで作成する場合は以下コマンドになる筈(コメントは説明用なので不要)。

#バックグラウンド(デタッチドモード)でPodmanを起動。ターミナルを閉じても動き続ける
podman run -d \
  #コンテナ名の指定
  --name apache-php8.4-plus \
  #ポートマッピング設定。IPアドレス、ホストポート、コンテナポートを指定
  -p 127.0.0.1:8080:80 \
  #ボリューム設定。ホストパスとコンテナパスを指定。ZオプションはSELinuxのセキュリティ権限を適切に自動調整するため
  -v /var/www/html/podman_test_1:/var/www/html:Z \
  #イメージの指定
  apache-php8.4-plus

インストール状況の確認

phpinfo用のファイルを適当なディレクトリにアップロードし、ブラウザからアクセスする。

「Additional .ini files parsed」欄に導入済みモジュールが表示される。

私の環境だとデフォルトのapache-php8.4とモジュール追加後で以下の表示が確認できた。

デフォルトのapache-php8.4

/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini

モジュール追加後

/usr/local/etc/php/conf.d/docker-php-ext-apcu.ini, /usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini, /usr/local/etc/php/conf.d/docker-php-ext-exif.ini, /usr/local/etc/php/conf.d/docker-php-ext-gd.ini, /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini, /usr/local/etc/php/conf.d/docker-php-ext-intl.ini, /usr/local/etc/php/conf.d/docker-php-ext-memcache.ini, /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini, /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini, /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini, /usr/local/etc/php/conf.d/docker-php-ext-redis.ini, /usr/local/etc/php/conf.d/docker-php-ext-sockets.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini, /usr/local/etc/php/conf.d/docker-php-ext-sysvsem.ini, /usr/local/etc/php/conf.d/docker-php-ext-zip.ini, /usr/local/etc/php/conf.d/xx-php-ext-memcached.ini

補足

Sublime TextでDockerfile編集する場合

デフォルトだとDockerfileのシンタックスハイライトは無い筈。

「Ctrl + Shift + P」→「Install Package」を入力して選択の上、エンターキー押下→「Dockerfile Syntax Highlighting」を入力して検索の上、選択する。

Dockerfileを開きなおすとシンタックスハイライトが有効化されている筈。

 

docker-php-extension-installer

Github

https://github.com/mlocati/docker-php-extension-installer/

 - PHP サーバー

  関連記事

Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法

先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...

Podmanで作成したApache用コンテナにドメインを割り当て、ポート指定なしでアクセス可能にする方法
Podmanで作成したApache用コンテナにドメインを割り当て、ポート指定なしでアクセス可能にする方法

先日PodmanでWebサーバ用コンテナを作成したが、ブラウザからアクセスする際 ...

CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法
CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法

Cockpitにはcockpit-podmanというPodman(Dockerの ...