DockerでPHP7.4のLaravel開発環境を作成

2020年9月3日木曜日

Docker PHP

t f B! P L

PHP7.4のLaravel開発環境を、Docker-Composeで構築して、Laravelの新規プロジェクトを作成して起動してみるところまで確認してみます。

  • WEBサーバー:Apache
  • DB:MariaDB

で作っていきたいと思います。

環境

この記事を書くにあたって使用した環境です。どれも、2020年7月時点の最新バージョンを使用しているハズ。

Docker

Name Version
docker 19.03.1
docker-compose 1.24.1

Web

今回は、Webサーバーに「Apache」を使用します。

Name Version
PHP 7.4
Apache 2.4.38
Laravel 7.21.0

DB

データベースは「MariaDB」です。データベース管理ツールの「Adminer」も入れておきます。

Name Version
MariaDB 10.5.4
Adminer 4.7.7

フォルダ構成

今回は、次のようなフォルダ構成にします。

[Project_ROOT]
├ docker
│ └ web
│   ├ apache
│   │ └ 000-default.conf
│   ├ php
│   │ └ php.ini
│   └ Dockerfile	
├ mysql
│ ├ data
│ └ initdb
└ docker-compose.yml

docker-compose.yml

version : "3"
services:
  web:
    container_name: web
    build: ./docker/web
    ports:
      - 80:80
    privileged: true
    volumes:
      - ./server:/var/www/html
  
  db:
    image: mariadb
    restart: always
    ports:
      - 3307:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/initdb:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD=pwd
      - MYSQL_DATABASE=test
      - MYSQL_USER=user
      - MYSQL_PASSWORD=pwd

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Dockerfile (PHP+Apache)

docker/webにwebコンテナ 構築用の「Dockerfile」を作成します。
PHP+Apacheのイメージをベースに、各種ライブラリとComposer、Laravelをインストールします。

FROM php:7.4-apache
COPY ./php/php.ini /usr/local/etc/php/
COPY ./apache/*.conf /etc/apache2/sites-enabled/

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

# mod_rewriteを 有効に
RUN a2enmod rewrite

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/html

RUN composer global require "laravel/installer"

※ 以前のバージョンでは不要でしたが、今回インストールするcomposerには「libzip-dev」が必要なので一緒にインストールします。

php.ini

PHPの設定ファイルを作成します。

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

Apacheの設定ファイル

Apacheのポートや、ドキュメントルートなど、最低限の設定を行います。

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html/public
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  <Directory /var/www/html/public>
    Options Indexes FollowSymLinks MultiViews
    Require all granted
    AllowOverride All
  </Directory>
</VirtualHost>

Dockerコンテナの起動

各種ファイルの準備ができたら、次のコマンドを使用してDockerコンテナを起動します。最初は400MB近いファイルがダウンロードされ時間がかかるので、気長に待ちます。

$ docker-compose up -d

Laravelプロジェクトの作成

webのコンテナ にシェルでログインして、Laravelの新規プロジェクトを作成します。

# webコンテナにシェルで入ります
$ docker-compose exec web bash

# 新規のLaravelプロジェクト作成します
$ laravel new

動作確認

ここまでで、WEBとDBのコンテナの作成と、Laravel新規プロジェクトの作成は完了です。作成したコンテナが正常に動作しているか確認していきましょう。

ブラウザでhttp://127.0.0.1/にアクセスして、Laravelプロジェクトが正常に動作しているか確認します。

次に、データベース(MariaDB)とAdminerが動作しているか確認します。
ブラウザでhttp://127.0.0.1:8080/にアクセスし、docker-composeで指定したパスワードでログインします。

ログインに成功すると、次のような画面が表示されます。

まとめ

PHP7.4のLaravel開発環境を作ってみました。デバッグ実行はできませんが、dockerを使えば簡単にPHP+Laravelの環境が作れて便利です。

スポンサーリンク

QooQ