【docker】EC2インスタンスでnginxとphp-fpmコンテナを連携させる

# 概要
EC2インスタンス上でdockerとdocker-composeをインストールして動かす方法メモ
OS: amazonLinux2

# ゴール
EC2のEIPに直アクセス(LB通さない)してphpinfoを見られる

# dockerインストール
インストール -> 起動 -> ec2-userでも動かせるように権限調整

```
$ sudo su -
# yum update -y
# amazon-linux-extras install -y docker
# systemctl enable docker
# systemctl start docker
# usermod -aG docker ec2-user
```

# docker-composeインストール
docker-composeのバージョンは適時調整する
バージョン情報まで表示できたらOK!

```
# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
# chmod 755 /usr/local/bin/docker-compose
# docker-compose -v
docker-compose version 1.24.1, build 4667896b
```

# nginxコンテナを作ってアクセス確認
以下はec2-userで操作

```
$ mkdir project
$ cd project/
$ mkdir -p docker/nginx
$ vi docker/nginx/Dockerfile
$ vi docker-compose.yml
$ docker-compose up -d
EIPにアクセスして「welcome to nginx」が見れればOK！
```

``` :docker/nginx/Dockerfile
FROM nginx:alpine
ENV LANG ja_JP.UTF-8
```

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

services:
  nginx:
    build: ./docker/nginx
    ports:
      - 80:80
```

# nginxコンテナに自前のindex.htmlを用意

```
$ vi docker/nginx/index.html
$ vi docker/nginx/Dockerfile
$ docker-compose --log-level CRITICAL down --rmi all --volumes
$ docker-compose up -d
EIPにアクセスして用意したhtmlファイルに変わっていればOK
```

``` :docker/nginx/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Hogehoge</h1>
<p>Hogehoge</p>
</body>
</html>
```

``` :docker/nginx/Dockerfile
FROM nginx:alpine
ENV LANG ja_JP.UTF-8

ADD ./index.html /usr/share/nginx/html/index.html
```

# php-fpmコンテナを用意
nginxとの連携はまだ、とりあえずphp-fpmコンテナを立ち上げてphpが動かせることまで確認

```
$ mkdir -p docker/php-fpm
$ vi docker/php-fpm/Dockerfile
$ vi docker-compose.yml
$ docker-compose --log-level CRITICAL down --rmi all --volumes
$ docker-compose up -d
$ docker-compose exec php-fpm sh

※php-fpmコンテナで実行して、バージョン情報が表示されればOK
/var/www/html # php -v
PHP 7.1.33 (cli) (built: Oct 25 2019 07:25:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
```

``` :docker/php-fpm/Dockerfile
FROM php:7.1-fpm-alpine
ENV LANG ja_JP.UTF-8
```

# nginxコンテナとphp-fpmコンテナを連携

```
$ vi index.php
$ cp index.php docker/nginx
$ cp index.php docker/php-fpm
$ vi docker/nginx/Dockerfile
$ vi docker/php-fpm/Dockerfile
$ vi docker/nginx/default.conf
$ vi docker-compose.yml
$ docker-compose --log-level CRITICAL down --rmi all --volumes
$ docker-compose up -d
EIPにアクセスしてphpinfoが表示されればOK！
```

``` index.php
<?php
echo 'hogehoge';
phpinfo();
```

``` :docker/nginx/Dockerfile
FROM nginx:alpine
ENV LANG ja_JP.UTF-8

ADD ./index.php /project/index.php
ADD ./default.conf /etc/nginx/conf.d/default.conf
```

``` :docker/php-fpm/Dockerfile
FROM php:7.1-fpm-alpine
ENV LANG ja_JP.UTF-8

ADD ./index.php /project/index.php
```

``` :docker/nginx/default.conf
server {
    listen       80;
    server_name  _;

    root /project;
    index index.php;

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

    location ~ \.(php|xml)$ {
        fastcgi_pass  php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        include       fastcgi_params;
    }
}
```

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

services:
  nginx:
    build: ./docker/nginx
    ports:
      - 80:80
    depends_on:
      - php-fpm
  php-fpm:
    build: ./docker/php-fpm
```