今回はわりと良くありがちなLAMP環境の構築を試してみる。
まあWEB検索すればいくらでも出てくるので、上手くいかなかったら新しめのサイト情報で置き換えればいいやって感じで気楽に試してみようと思う。
1 docker-compose.yamlの作成
いきなり完成版です。内容はphpmyadminとmysqlとapacheの起動ですね。phpMyAdminは無くても良いかな。記述エラーで生成AIにチェックしてもらったりもしたが、ほぼテキスト通りの内容です。
#version: '3.8'
volumes:
mysql_db: {}
services:
phpmyadmin:
image: phpmyadmin
ports:
- "8002:80"
environment:
PMA_HOST: mysql
mysql:
image: mysql:5.7
volumes:
- mysql_db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "12345678"
ports:
- "3306:3306"
httpd:
build: .
ports:
- "8001:80"
volumes:
- ./htdocs:/var/www/html
depends_on:
- mysql
ちなみに後日、同じ生成AIに内容評価してもらったら、「いい線いっているが記述が不完全。完全版を書きましょうか?」だって。(お前が書いたんじゃー、とちょっと思ったのは内緒)
2 Dockefileの作成
テキストにはいろいろ書いてあったけど、要するにこのphp-pdoでMySQLに接続するからインストールしようって話。
FROM php:7.3-apache
RUN docker-php-ext-install pdo_mysql
3 起動確認
もうおなじみのdocker compose up -dで起動する。起動するとホストのカレントディレクトリにhtdocsフォルダが出来るので、ここにindex.htmlやinfo.phpやらを置けばよい
# バックグラウンドで起動する
docker compose up -d
自分の環境だけかもしれないが、たまにpullに失敗することがある。内容に問題がない場合は、時間を置いて再実行すればよいみたい。
! mysql Interrupted 0.9s
✘ phpmyadmin Error failed to resolve reference "docker.io/library/phpmyadmin:latest": failed... 0.9s
Error response from daemon: failed to resolve reference "docker.io/library/phpmyadmin:latest"
3 コンテンツの作成
まず、以下のようなinfo.phpを作成して表示させてみる。
<?php
phpinfo();
?>
[http://localhost:8001/info.php]で以下のように表示されれば成功

まあ試すまでもないけど、一応DB接続も試してみよう
<?php
try {
$db = new PDO("mysql:host=mysql;dbname=mysql", "root", "12345678");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected Mysql!!";
} catch (PDOException $e) {
echo "接続エラー: " . $e->getMessage();
}
?>
4 いろいろ遊んでみよう
phpMyAdminで適当なDBを作成するには[http://localhost:8002]で接続する。ユーザ名とパスワードはdocker-compose.yamlに書いた通り(root/12345678)。とりあえずtestdbというdbを作ってみた。

ちょっとPHPのバージョンが古いので実験用にしか使えないが、ここからWordPressをダウンロードしてインストールしてみよう
実行してみたら、いきなりエラーでコケる。PDOではだめで、mysqliドライバが必要らしい。またこのイメージはphp.iniを読み込んで無いので、対応方法はいろいろあるようだがここではDockerfileを以下のように修正して実行しなおしてみる
FROM php:7.3-apache
# 拡張のインストール
RUN docker-php-ext-install mysqli pdo pdo_mysql
# php.ini を有効化
RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini \
&& echo "extension=mysqli" > /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini
# Apache起動
CMD ["apache2-foreground"]
補足:PDOとmysqliを共存させているみたい。また、php.iniが読みこまれていないので作成して必要な記述を追加しているとのこと。(生成AIは便利だ)
docker compose down
docker compose build --no-cache
docker compose up -d
データベースのホスト名をlocalhostの代わりにコンテナ名を入れる必要があったが何とかインストールが完了した

これでこの本は完了だ。最後の章に公式イメージの使い方やWordPressサーバのもっと良い立て方も載っているが、こちらについては実際に読者になって試してくだい(作者の回し者ではありません)
振り返ってみて、この本は比較的詰まるところが少ない良い本だったのではないかなあと思います。
