Docker Composeを使ってLAMP環境を構築する

##Docker Composeを使ってテスト環境を構築する
###【テスト環境の要件】
####**初期目標**
- サーバー：apache
- PHP：7系
- DB：MySQL

以上の連携

####**最終目標**
上記に加えて、

- Composer
- PHPUnit

を使用可能にする。

##というわけで今回前編
###【Apache/PHPとMySQL、PHPMyAdminのコンテナを立ち上げる】
[こちらのエントリ](https://qiita.com/naente_dev/items/d259ea84c172deeff7d8)
がまるっとしたいことそのままでした。。。
ただ、この状態だとWebサーバー側でMySQLが使えないので、Webサーバー用コンテナについてはDockerfileを作ることに。

####**準備するもの**
- Apache
    - PHP
- PHPMyAdmin
- MySQL

#####ファイル構成

```
├── docker-compose.yml
├── html
├── mysql
├── php7.2
│   ├── dockerfile
│   └── php.ini
└── phpmyadmin
```

#####docker-compose.yml

```docker-compose.yml
version: '3'

services:
  php:
    build:
      context: ./php7.2
      dockerfile: dockerfile
    volumes:
      - ./php7.2/php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8000:80
    links:
      - mysql:mysql
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - 13306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=test
      - PMA_PASSWORD=test
    links:
      - mysql
    ports:
      - 4000:80
    volumes:
      - ./phpmyadmin/sessions:/sessions
```

#####php.ini

```ini:php7.2/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
```

#####dockerfile
```dockerfile:php7.2/dockerfile
FROM php:7.2-apache
RUN apt-get update && \
  docker-php-ext-install pdo_mysql mysqli mbstring
```

**参考**

- [Docker公式のPHPイメージとMySQLイメージを使ってコンテナ間通信させる方法](https://qiita.com/DQNEO/items/1b9503639470b65f5650)
- [php7.2-apache](https://github.com/docker-library/php/blob/cf02ea0f79cf7cff3853f6d4254b95b65d44cc12/7.2/stretch/apache/Dockerfile)（PHPのオフィシャル）
- [wordpress](https://github.com/docker-library/wordpress/blob/841f2801d0a6d0cf73321a5554d6bade4c143417/php7.2/cli/Dockerfile)（wordpressオフィシャル）
- [phpmyadmin](https://hub.docker.com/r/phpmyadmin/phpmyadmin/dockerfile)（phpmyadminオフィシャル）
- [yousan-php7.2](https://github.com/yousan/damp/blob/master/php7.2/Dockerfile)（[DAMP](https://github.com/yousan/damp)内のdocker-image）

####**1.コンテナ起動**

```console:terminal：起動
$ cd _dockertest
$ docker-compose up -d
Creating network "_dockertest_default" with the default driver
Pulling php (php:7.2-apache)...
7.2-apache: Pulling from library/php
27833a3ba0a5: Pulling fs layer
27833a3ba0a5: Pull complete
2d79f6773a3c: Pull complete
/*以下略*/
```

```console:terminal：動作を確認
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                            NAMES
a17c50b4dfe2        php:7.2-apache          "docker-php-entrypoi…"   6 seconds ago       Up 5 seconds        0.0.0.0:8000->80/tcp             dockertest_php_1
ad7d69493eff        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   2 minutes ago       Up 2 minutes        9000/tcp, 0.0.0.0:4040->80/tcp   dockertest_phpmyadmin_1
22ecd5cda07a        mysql:5.7               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp              dockertest_mysql_1
```

####**2.アクセスしてみる**
#####Webサーバー
http://localhost:8000/

<img width="500" alt="スクリーンショット 2019-04-29 18.43.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288273/8ae8a31e-63d5-584b-646b-bd490478440b.png">

コンテナに入りたい場合は**$ docker exec -it コンテナ名 bash**で入れる。

```console:terminal
$ docker exec -it dockertest_php_1 bash
root@a17c50b4dfe2:/var/www# ls -l
total 0
drwxr-xr-x 3 root root 96 Apr 29 09:33 html
root@a17c50b4dfe2:/var/www# cd html
root@a17c50b4dfe2:/var/www/html# ls -l
total 4
-rwxr-xr-x 1 root root 17 Apr 11 07:56 index.php
root@a17c50b4dfe2:/var/www/html# exit
exit
```

#####PHPMyAdmin
http://localhost:4040/index.php?lang=ja

<img width="５００" alt="スクリーンショット 2019-04-29 18.43.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288273/34f76835-3b11-82f0-6b37-f044d6582894.png">