Dockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part 1

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

Dockerを利用してPHPの開発環境を用意してみましょう。

Dockerのインストール

MacにDockerをインストールするのは簡単です。
公式サイトから「Docker for Mac」をダウンロードしてインストールするだけです。

下記から「Docker for Mac」をダウンロードします。

Install Docker Desktop for Mac | Docker Documentation

インストールが終わったら、ターミナルから確認してみましょう。

下記のコマンドでバージョンを確認してみます。

$ docker --version
Docker version 18.09.1, build 4c52b90

OKですね。

NginxでWebサーバーを構成する

DockerイメージとDockerコンテナ

続いてDockerのイメージを用意します。

Dockerイメージとは、Dockerコンテナを作り出すための設計図のようなものです。

Dockerコンテナとは、Dockerイメージに基づいて、具現化されたファイルシステムとアプリケーションが実行されたものです。

語弊があるかもしれませんが、プログラミングでいうところのDockerイメージは「クラス」で
Dockerコンテナは「インスタンス」のようなものと考えるとわかりやすいかもしれません。

DockerコマンドでNginxサーバーを起動する

では、実際にNginxでWebサーバーを構成してみたいと思います。

DockerイメージはDocker向けのコンテナ共有サービス「Docker Hub」に公式イメージとして公開されているものがあるので、そちらを利用したいと思います。

nginx – Docker Hub

DockerイメージからDockerコンテナを実行してみます。
まずは作業用のディレクトリを用意します。
今回は「php_docker」というディレクトリ名にしてみます。

$ mkdir php_docker
$ cd php_docker
$ docker container run -d -p 8000:80 --name web nginx:latest

docker container runコマンドでDockerイメージを指定することで、Dockerコンテナを実行することができます。

簡単ですが、コマンドについて解説します。

-d オプションでバックグラウンドでDockerコンテナが実行されるように指定してます。

-p オプションでホスト側の8000ポートからコンテナ側の80ポートにポートフォワーディングできるようにしています。この設定によってホスト側から8000ポートでアクセスできるようになります(ブラウザからhttp:// localhost:8000アクセスできる)

–name オプションでコンテナに名前をつけることができます。
名前をつけておくとdockerコマンドでコンテナを指定しやすくなるので、ぜひ指定しておきましょう。

最後にimageを指定します。image名は「nginx」です。
image名の後ろに「:」があり、さらにその後ろに「latest」と指定してあります。
これはタグというもので、イメージのバージョンのようなものです。
latestと指定すると最新のnginxイメージを利用してDockerコンテナが作成されます。

http://localhost:8000からwebサーバーが起動していることが確認できたらコンテナを停止しておきましょう。

$ docker container stop web

docker-composeでNginxサーバーを起動する

さて、nginxのコンテナだけを起動させるのであれば、Dockerコマンドでもいいのですが、phpで開発するのであれば、mysqlのコンテナやAPサーバー(PHP-FPM)コンテナも同時に起動させる必要が出てきます。

各コンテナを連動させるには、立ち上げの順序等を気にする必要があり、Dockerコマンドのみで、コンテナを連動させるのは、ちょっと面倒です。

そこで、便利なのが、docker-composeです。
コンテナ同士の依存関係やポートフォワーディング等の設定をyaml形式のファイルで管理することができます。

「Docker for Mac」をインストールしていれば、docker-composeはすぐに利用できます。
まずは、バージョンを確認してみましょう。

$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01

OKですね。

では、docker-composeでnginxサーバーを構築してみましょう。

下記のファイルを用意します。

docker-compose.yml というファイルを上記で作成した作業用のディレクトリ(php_docker)に作成します。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8000:80"

dockerコンテナを起動してみます。

docker-compose up -d

ブラウザからhttp:// localhost:8000アクセスできることを確認してみましょう。

コンテナを停止するには、下記コマンドを実行します。

docker-compose stop

docker-compose.ymlを使ってもう少し設定をしてみます。

ホスト側で編集したソースコードやnginxの設定ファイルをコンテナ側と共有できるようにします。
具体的にはvolumesを使用します。

作業ディレクトリにsrcディレクトリとwebディレクトリを作成します。
srcディレクトリにindex.htmlを作成し、webディレクトリにnginxの設定ファイルとしてdefault.confを作成します。

では、index.htmlを用意します。

$ mkdir src
$ cd src
$ vi index.html

htmlはこんな感じです。

Hello Docker !!

続いて、設定ファイルを作成します。

$ cd ../
$ mkdir web
$ cd web
$ vi default.conf

default.confはこんな感じです。

server {
    listen 80;

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

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

docker-compose.ymlを編集します。

version: '3'
services:
  web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    volumes:
      - ./web/default.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/

volumesの「:」の左側にホストのファイルパス、右側にコンテナのファイルパスを記述します。

ブラウザからhttp:// localhost:8000へアクセスして
Hello Docker!! と表示されていればOKです。

これで静的HTMLを配信するためのNginxサーバーの構築ができました。

PHPを動作させるAPサーバーを構築する

続いてPHPを動作させるためのAPサーバーを用意します。
今回はPHP-FPMを利用します。

イメージは公式イメージを利用します。

php – Docker Hub

docker-compose.ymlを編集します。

version: '3'
services:
  web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    depends_on:
      - app
    volumes:
      - ./web/default.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/
  app:
    image: php:7.2.15-fpm
    volumes:
        - ./src:/var/www/

depends_onでコンテナの依存関係を定義しておきます。

続いて、PHPを実行できるようにnginxの設定ファイルを編集します。

server {
    listen 80;

    root  /var/www/;
    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_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass   app:9000;
          fastcgi_index  index.php;

          include        fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param  PATH_INFO $fastcgi_path_info;
      }
}

srcディレクトリにindex.phpを追加します。

phpinfo();

コンテナを実行してみます。

docker-compose up -d

PHP の設定情報が表示されればOKです。

これでPHPの動作環境も整いました。

srcディレクトリでphpのファイルを作成すれば、コンテナとディレクトリは共有されているので、phpの開発をする環境は整いました。

本当はMySQLサーバーも用意したいのですが、記事が長くなりましたので
今日はここまでにしたいと思います。

[追記:2019-3-30]
続き、書きました。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

CAPTCHA