LoginSignup
25
30

More than 3 years have passed since last update.

Docker × PHP7.3 × Laravel環境作ってみた

Last updated at Posted at 2019-10-14

はじめに

前回は Dockerを使ってLaravel開発環境構築でphp7.2を利用してLaravel環境を作成しましたが、今回はPHP7.3で構築していきます。
微妙に違うところもありますので、PHP7.3で構築したい人はこちらを参考にしていただければと思います。

環境

Dockerとdocker-composeは用意できている前提です。
Docker version 19.03.2, build 6a30dfc
docker-compose version 1.24.1, build 4667896b

構成

以下の構成を想定しています。

project
├── README.md
├── docker
│   ├── db
│   │   ├── data
│   │   ├── sql
│   │   └── my.cnf
│   ├── nginx
│   │   └── default.conf
│   └── php
│       ├── Dockerfile
│       └── php.ini
├── server
└── docker-compose.yml

構築

環境構築の手順を解説を簡単に交えながら紹介していきます。

1. ディレクトリ作成

まず、任意のディレクトリ(上記ではproject)を作成します。
その直下にdocker, serverを作成します。server直下にLaravelプロジェクトを作成します。

2. docker-compose.yml作成

今回は、PHP, nginx, mysqlの3つのコンテナを想定しておりますので、以下のようになります。

docker-compose.yml
version: '3'

services:
  php:
    container_name: php
    build: ./docker/php
    volumes:
      - ./server:/var/www

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - ./server:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

解説

各コンテナ共通として、container_nameでコンテナ名を付けています。
コンテナ間の接続の際のホスト名になります。

phpコンテナ
build: project/docker/php配下のDockerfileを参照して構築
volumes: 開発ディレクトリと公開ディレクトリをマウント

nginxコンテナ
image: nginxの公式イメージを使用
ports: ゲストとホストそれぞれの80番ポートで接続
volumes: 開発ディレクトリと公開ディレクトリをマウント & nginx設定ファイルの指定

mysqlコンテナ
image: mysqlの公式イメージ使用
restart: コンテナ再起動
environment: DBの設定
ports: ゲストとホストそれぞれの3306番ポートで接続

3. Dockerfile作成

phpコンテナ構築時に使われるDockerfileをdocker/php/に作成します。
Composerのインストールは公式を参考にしてください。

Dockerfile
FROM php:7.3-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
    && apt-get install -y zlib1g-dev libzip-dev mariadb-client \
    && docker-php-ext-install zip pdo_mysql

#Composer install
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin

WORKDIR /var/www

RUN composer global require "laravel/installer"

4. PHP設定ファイル作成

PHPの設定ファイルをdocker/php/に作成します。以下、最低限の設定ですのでプロジェクトに応じて変更してください。

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

5. nginx設定ファイル作成

niginxの設定ファイルをdocker/nginx直下に作成します。以下はLaravelでの運用を前提に記載しています。

default.conf
server {
  listen 80;

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

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

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;

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

6. MySQLの設定

my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

7. Laravelプロジェクト作成

では、dockerを起動して、Laravelプロジェクトを作成してみましょう。
docker-compose.ymlがあるディレクトリに移動して下記でdockerを起動してみましょう。
その後dockerに入って、Laravelプロジェクトを作成します。

# docker起動
$ docker-compose up -d

# phpコンテナに入ります
$ docker-compose exec php bash

# Laravelプロジェクト作成
$ laravel new

server以下にLaravelの各ディレクトリやファイルができています。

7. 動作確認

ブラウザからlocalhostにアクセスしてみましょう。以下のようにLaravelの画面が立ち上がっていれば成功です。
スクリーンショット 2018-09-30 21.19.02.png

MySQLのコンテナも確認しておきましょう。

# mysqlコンテナに入ります
$ docker exec -it db bash

root@3fe3c5295b72:/# mysql -u root -p
Enter password: パスワード入力します
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.12 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
25
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
30