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?

Docker学習記録-04

Last updated at Posted at 2025-11-11

今回はわりと良くありがちなLAMP環境の構築を試してみる。
まあWEB検索すればいくらでも出てくるので、上手くいかなかったら新しめのサイト情報で置き換えればいいやって感じで気楽に試してみようと思う。

1 docker-compose.yamlの作成
いきなり完成版です。内容はphpmyadminとmysqlとapacheの起動ですね。phpMyAdminは無くても良いかな。記述エラーで生成AIにチェックしてもらったりもしたが、ほぼテキスト通りの内容です。

docker-compose.yaml
#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に接続するからインストールしようって話。

Dockerfile
FROM php:7.3-apache
RUN docker-php-ext-install pdo_mysql

3 起動確認
もうおなじみのdocker compose up -dで起動する。起動するとホストのカレントディレクトリにhtdocsフォルダが出来るので、ここにindex.htmlやinfo.phpやらを置けばよい

docker compose
# バックグラウンドで起動する
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"

成功すると以下のような感じになる
image.png

3 コンテンツの作成
まず、以下のようなinfo.phpを作成して表示させてみる。

info.php
<?php
phpinfo();
?>

[http://localhost:8001/info.php]で以下のように表示されれば成功
image.png

まあ試すまでもないけど、一応DB接続も試してみよう

index.php
<?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を作ってみた。
image.png

ちょっとPHPのバージョンが古いので実験用にしか使えないが、ここからWordPressをダウンロードしてインストールしてみよう

実行してみたら、いきなりエラーでコケる。PDOではだめで、mysqliドライバが必要らしい。またこのイメージはphp.iniを読み込んで無いので、対応方法はいろいろあるようだがここではDockerfileを以下のように修正して実行しなおしてみる

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の代わりにコンテナ名を入れる必要があったが何とかインストールが完了した
image.png

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

振り返ってみて、この本は比較的詰まるところが少ない良い本だったのではないかなあと思います。

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?