Docker に PHP 拡張モジュール(mysqli)を追加

2022/03/06

前回、EC-CUBEを Docker で構築した話をエントリーしました。

最初のほうはエラーが出てハマっていたんですよね(苦笑)

原因は PHP 拡張モジュールである「mysqli」がなかったからでした。

今回は Docker における PHP 拡張モジュールの追加の仕方についてエントリーします。

 

INDEX

 

背景(EC-CUBE2が使えない?)

EC-CUBE2 の設定で、DB と接続する箇所があるのですが、そこで以下のようなエラーが表示されていました。

エラー内容を読むと、PHP 拡張モジュール「mysqli」がないと書いてあります。

【 mysqli 】
PHP から MySQL データベースを操作する時のインターフェースを提供するためのインターフェースを提供する、PHP の拡張機能です。


### mysqliのコード例

# DBサーバーへ接続
$db_link = mysqli_connect( 'host_name', 'user_name', 'password');

# DBへ接続
mysqli_select_db( $db_link, 'database_name');

# クエリの実行
$data = mysqli_query( $db_link, 'SELECT * FROM test_table');

# DBとの接続解除
mysqli_close($db_link);

mysqli は、PHP5.5 以降で非推奨、7.0 で削除となったので、これが原因だったんですね。

しかし

「拡張モジュール?」
「mysqliってDockerにどうやって追加するの?」

よくわからなかったので、結構ハマってしまいました。。

 

PHP拡張モジュールとは

PHP インタプリターは C 言語で記述されています。

Laravel フレームワークと同様に小さなソースファイルに分割されています。

このソースファイルをコンパイルしてオブジェクトファイルに変換します。

このときに機能語とにまとめてモジュール化し保存します。

各モジュールは「基本機能」「拡張機能」に分けて作られています。

PHP は基本機能だけでもたくさんのモジュールを含んでいますが、利用頻度が低いものは組み込まずに後から追加できるような構成となっています。

この追加可能なモジュールのことを拡張モジュールと呼んでいます。

なお、以下のコマンドラインで現在利用可能な拡張モジュールが確認できます。


$ php -m

 

Docker に PHP 拡張モジュールを追加する手順

1)Dockerfile に mysqli を追加

以下のように docker-php-ext-install の引数に mysqli を追加します。


:
# ミドルウェアのインストール
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql mysqli
:

 

【 docker-php-ext-install 】
PHP に標準で備わっている拡張パッケージのインストール & 有効化ができる。


## PHP拡張モジュールのGD(画像変換モジュール)をインストール場合
&& docker-php-ext-install pdo_mysql gd

 
ちなみに pecl(ピクル) は PHP に標準で備わっていないパッケージをインストールすることができる。


RUN pecl install redis \
         && docker-php-ext-enable redis

 

 

2)php.ini に拡張モジュール(mysqli)を追記

Dockerfile にて /usr/local/etc/php/ へ ADD している php.ini に PHP 拡張モジュールを追記します。


:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=mysqli

 

3)Dockerfileのイメージを再構築

Dockerfile で ADD している php.ini を修正したので、もう一度イメージを再構築する必要があります。

以下のコマンドでビルドと起動の両方をやってくれます。


$ docker-compose up -d –build

 

4)mysqli がインストールされたか確認


## コンテナに入る
$ docker-compose exec app bash

## 確認
$ php -r "phpinfo();" | grep mysqli

grepコマンドの使い方については以下をご参照ください。

 
以上です。

Docker学習 おススメ教材(by Udemy)
動画でプログラミング学習!ドットインストール、Schoo、Udemyのどれがいい?
 
Udemyを使ったLaravel学習方法

ゼロからはじめる Dockerによるアプリケーション実行環境構築

コンテナの実行方法を学び、Ruby on RailsやDjangoといったWebアプリケーションフレームワークを使用した環境構築について学びます。Docker MachineやSwarmといったDocker関連技術についても学びます。
4.2(3552)

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築