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
```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
```dockerfile
FROM php:7.2-apache
RUN apt-get update && \
  docker-php-ext-install pdo_mysql mysqli mbstring
```

### index.php
```html
<!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
```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/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314416/a3af5ce4-7925-4fa1-a021-2c8bd5a788ba.png)

phpmyadminを表示
http://localhost:4040/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314416/e4cb7a44-2023-0064-1365-508ef7e445d6.png)
ログイン画面で`docker-compose.yml`のmysqlコンテナの情報を記載してログインできればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314416/1253d420-a81e-9729-4a1b-73b0dde4de6f.png)


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

## 今回やった、やる予定のPHP入門書
**PHP入門 確認画面付きのお問い合わせフォームをつくりながらPHPを学ぶ（第2版）**
https://amzn.to/2Irz7Fr
※上記環境で動作確認済み

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

## 参考記事
- [docker\-compose で PHP7\.2 \+ Apache \+ MySQL \+ phpMyAdmin 環境を構築 \- Qiita](https://qiita.com/naente_dev/items/d259ea84c172deeff7d8)
- [Docker で phpMyAdmin を立ち上げるのにイロイロ躓いた話 \| TECHFREE](https://techfree.jp/3147)
- [Docker Composeを使ってLAMP環境を構築する：前編 \- Qiita](https://qiita.com/rockinruuula1227/items/83f3f1406f339083ef3f)
- [開発環境をDockerにしたら、PDOでcould not find driverが出た \- Qiita](https://qiita.com/tarch710/items/1236a23f7ffde4c512f2)
- [初心者向けdocker\-composeコマンド逆引き \- Qiita](https://qiita.com/okyk/items/a374ddb3f853d1688820)