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

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

少し前に書いたDockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part1 Part2の続きです。
細かい説明が不要な場合は本記事から読んでいただいても大丈夫です。

まず、Laravelの開発環境をDockerで構築する場合には、Laradockが便利です。
ただ、LaradockはLaravelだけに最適化された開発環境というわけでないので、
Laravelだけをやりたいのであれば、ややファットな印象があります。

そこで、今回はLaradockを使用せずに、シンプルな構成でLaravel用の開発環境を構築してみたいと思います。

では、上記の記事で紹介した構成からLaravelのインストールを行なっていきたいと思います。
作業用のディレクトリは下記のようになっていると思います。

.
├── docker-compose.yml
├── mysql
│   └── mysql-data
├── php
│   └── Dockerfile
├── src
└── web
    └── default.conf

ファイルは下記のとおりです。

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:
        build: ./php
        depends_on:
          - mysql
        volumes:
          - ./src:/var/www/
      mysql:
        image: mysql:5.7
        environment:
          MYSQL_DATABASE: test
          MYSQL_USER: root
          MYSQL_PASSWORD: password
          MYSQL_ROOT_PASSWORD: password
        ports:
          - "3306:3306"
        volumes:
          - ./mysql/mysql-data:/var/lib/mysql

php/Dockerfile

FROM php:7.2.15-fpm

RUN docker-php-ext-install pdo_mysql

web/default.conf

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;
      }
}

mysql/mysql-dataには、mysqlのデータが格納されていて、srcにはソースファイルを格納しておきます。

では、Laravelをインストールしましょう。

まずは、ローカルでの作業用にworkspaceコンテナを準備します。

workspaceディレクトリを作成して、Dockerfileを用意しましょう。

$ mkdir workspace 
$ cd workspace
$ vi Dockerfile
FROM php:7.2.15-fpm

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
      git \
      curl \
      vim \
      zip \
      unzip \
    && apt-get clean
RUN docker-php-ext-install pdo_mysql

RUN curl -s http://getcomposer.org/installer | php && \
    echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \
    mv composer.phar /usr/local/bin/composer

RUN . ~/.bashrc
WORKDIR /var/www/

docker-compose.yml

  workspace:
    build: ./workspace
    volumes:
     - ${APP_CODE_PATH_HOST}:/var/www/
    ports:
     - "22:22"

docker-compose upしてみましょう

$ docker-compose up -d
$ docker-compose exec workspace bash

workspaceコンテナ内で下記のコマンドを入力します。

$ composer create-project --prefer-dist laravel/laravel .

インストールが終わったら、コンテナから一旦抜けます。

続いて、Laravelの公開ディレクトリをドキュメントルートにする必要があるので、web/default.confを変更します。

server {
    listen 80;

    root  /var/www/public; #←ここを変更
    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;
      }
}

docker-compose restartし、localhost:8000にアクセスすると、Laravelのwelcomeページが表示されているはずです。

続いて、laravelの.envファイルにDBへの接続情報を書き込みます。

.envファイルは、上記の例だとsampleappディレクトリの直下にあります。

DB_CONNECTION=mysql
DB_HOST=php_docker_mysql_1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=password

DB_HOSTにはmysqlコンテナのコンテナ名を指定します。
コンテナ名を調べるにはPSコマンドを使います。

$ docker-compose ps
         Name                       Command              State                 Ports
--------------------------------------------------------------------------------------------------
php_docker_app_1         docker-php-entrypoint php-fpm   Up      9000/tcp
php_docker_mysql_1       docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp, 33060/tcp
php_docker_web_1         nginx -g daemon off;            Up      0.0.0.0:8000->80/tcp
php_docker_workspace_1   docker-php-entrypoint php-fpm   Up      0.0.0.0:22->22/tcp, 9000/tcp

上記の例だとコンテナ名は「php_docker_mysql_1」になります。

今日は以上です。

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

SNSでもご購読できます。

コメントを残す

*

CAPTCHA