DockerでPHP環境を作る（mac）

## はじめに
勤め先でもPHPを使っており自宅でPHPを勉強するために、ローカルでPHP開発環境を整えることにしました。
MAMP（マンプ）でも良いかなと思いましたが、せっかくなのでDockerで作ってみます。
（開発中に色々詰まってしまったところがあるので、備忘録がわりのメモです。）

## 手順
1. Dockerによる環境構築
2. ファイル・ディレクトリの準備
3. 各ファイルの作成
4. コンテナを起動
5. サイトにアクセス

### 1. Dockerによる環境構築
Dockerを使うには、「Docker for Mac」のインストールが必要です。
Qitaに素敵な記事がたくさんあるので、ここでの説明は省略します。

今回はDockerで以下のコンテナを使います。

- nginx
- PHP
- MySQL
- PHPMyAdmin

使用するコンテナが複数あるので、今回は「Docker Compose」を使って環境を作っていきます。

### 2. ディレクトリ・ファイルの準備
Dockerを起動する場所を作成しましょう。
まずはフォルダを1つ用意し、次のようなファイル構造となるようにしてください。
用意するフォルダは何でも良いのですが、今回は「php-test」という名前で作成します。

```
php-test/
├── docker-compose.yml
├── mysql/
│   └── data/
├── nginx/
│   └── nginx.conf
├── php/
│   ├── Dockerfile
│   └── php.ini
└── www/
   └── html/
       └── index.php
```

### 3. 各ファイルの作成
用意したファイルの中身を作成していきます。
中身を作成するファイルは、`docker-compose.yml`、`nginx.conf`、`Dockerfile`、`php.ini`、`index.php`の5つです。

#### docker-compose.yml

```
version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./www/html:/var/www/html
    depends_on:
      - php

  php:
    build: ./php
    volumes:
      - ./www/html:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    ports:
      - 13306:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8888:80
    depends_on:
      - db
```
#### nginx.conf
```
server {
  listen 80;
  server_name _;

  root  /var/www/html;
  index index.php index.html;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  location / {
      try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
      fastcgi_pass php:9000;
      fastcgi_index index.php;    
      fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include       fastcgi_params;
  }
}
```
#### Dockerfile
```
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
RUN docker-php-ext-install pdo_mysql
```
#### php.ini
```
date.timezone = "Asia/Tokyo"
```
#### index.php
設定情報を確認するために`phpinfo();`としていますが、なんでもいいです。

```
<?php
phpinfo();
?>
```

### 4. コンテナを起動
いよいよコンテナ起動です。
ターミナルを開き、`docker-compose.yml`があるフォルダ（今回はphp-test）に移動します。

下記コマンドで、php-testフォルダに移動。

```
cd php-test
```

下記コマンドで、コンテナを起動。

```
docker-compose up -d
```

以下のような記述がターミナル内に表示されたら、起動は成功です。

```
Creating php_01_db_1 ... done
Creating php_01_phpmyadmin_1 ... done
Creating php_01_php_1        ... done
Creating php_01_nginx_1      ... done
```

なお下記コマンドで、コンテナを停止できます。

```
docker-compose stop
```

### 5. サイトにアクセス
最後にサイトにアクセスします。
それぞれ下記画像のような画面が表示されたら、成功です。
お疲れ様でした。

Webサイト：http://localhost:8080/
![localhost_8080_config.php.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351760/dffb9fcf-f2bb-d23b-33a8-c2559d1020e8.png)

管理画面：http://localhost:8888/
![localhost_8888_ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351760/6eaa618d-8cb6-9825-f30e-06aee7f0f140.png)

> ユーザー名：root
パスワード：secret

以上です。
最後までお読みいただき、ありがとうございました。

---
## お世話になったサイト
- [[PHP]DockerでPHP, MySQL(MariaDB), nginxを使ったローカル開発環境を構築する](https://php-archive.net/php/docker-php-environment/)
- [Docker Composeでphpでmysqlにアクセスする](https://zukucode.com/2019/06/docker-compose-mysql.html)
- [docker-composeでPHPとMySQLを連携させてみる](https://qiita.com/fujitak/items/b56122e2ecd94022a7b6)
- [Docker ドキュメント](https://docs.docker.jp/)

### 【補足】Qitaに投稿されているDockerインストール記事
下記の中から自分に合いそうなものを1つ選んで、進めてみると良いと思います。

- [DockerをMacにインストールする](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)
- [はじめてのDocker for Mac](https://qiita.com/kobori_akira/items/0cc993caeb20d77cd367)
- [Macにdockerインストール](https://qiita.com/ama_keshi/items/b4c47a4aca5d48f2661c)