PHPの入門書1周するために、サクッとDockerでApache + MySQL + PHP + phpmyadminの環境つくる


PHP入門書を1周したいので、LAMP環境がほしい

PHP力を上げたいので、入門書からやろうと思い立ちました。
そのためにサクッと用意できて、使いまわせるローカル環境が欲しかったので、そのメモです。

今回はdocker-composeを使って環境構築します。

現在の環境

  • OS:MacOS Big Sur
  • Docker:19.03.13
  • DockerCompose:1.27.4

ディレクトリ構成&ファイル

ディレクトリ構成

.
├── docker-compose.yml
├── html
│   └── index.php
├── mysql
├── php
│   ├── dockerfile
│   └── php.ini
└── phpmyadmin

docker-comopse.yml

version: '3'

services:
  php:
    build:
      context: ./php
      dockerfile: dockerfile
    volumes:
      - ./php/php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
#      - PMA_USER=test
#      - PMA_PASSWORD=test
    links:
      - mysql
    ports:
      - 4040:80
    volumes:
      - ./phpmyadmin/sessions:/sessions

dockerfile

FROM php:7.2-apache
RUN apt-get update && \
  docker-php-ext-install pdo_mysql mysqli mbstring

index.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>php7.2-apache</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<?php phpinfo(); ?>
</body>
</html>

php.ini

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

エラーすべて表示させたいときは、以下を追加する

error_reporting = E_ALL

実行コマンド

docker-compose.ymlがあるディレクトリに移動して、以下を実行

$ docker-compose up -d

もし、dockerfileを変更した場合は

$ docker-compose up -d --build

php.iniなどの変更を反映させたい時は

$ docker-compose restart

動作確認

phpinfoを表示
http://localhost:8080/

phpmyadminを表示
http://localhost:4040/

ログイン画面でdocker-compose.ymlのmysqlコンテナの情報を記載してログインできればOK

つまづいたところ

  • 当初はdocker-compose.ymlimage: php:7.2-apacheと記載していたが、MySQLのドライバががなくてMySQL動かせなかったので、dockerflieを作成した
  • docker-compose.ymlのphpmyadminコンテナのPMA_USERPMA_PASSWORDを記載すると、phpmyadminにうまくログインできず、データベースが作成できなかったので、コメントアウト

今回やった、やる予定のPHP入門書

PHP入門 確認画面付きのお問い合わせフォームをつくりながらPHPを学ぶ(第2版)
https://amzn.to/2Irz7Fr
※上記環境で動作確認済み

よくわかるPHPの教科書 【PHP7対応版】
https://amzn.to/2LhQ4mW
※まだ未着手

参考記事