LoginSignup
79
91

More than 3 years have passed since last update.

Dockerを使ってLaravel開発環境構築(Apache)

Last updated at Posted at 2019-01-19

はじめに

今回はDockerを使ってapache上でPHP実行環境を構築し、Laravel新規プロジェクト作成までを行います。

環境

Dockerとdocker-composeは用意できている前提です。
Docker version 18.06.0-ce
docker-compose version 1.22.0
Apache 2.4
PHP 7.2
Laravel 5.7

構成

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

project
├── docker
│   ├── Dockerfile
│   ├── apache
│   │    └── 000-default.conf
│   ├── db
│   │    ├── data
│   │    ├── my.cnf
│   │    └── sql
│   │        ├── 001-create-tables.sql
│   │        └── init-database.sh
│   └── php
│        └── php.ini
├── docker-compose.yml
└── server

構築

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

1. ディレクトリ作成

まず、任意のディレクトリ(上記ではproject)を作成します。
その直下にdocker, serverを作成します。dockerディレクトリの直下にapache, php, dbのディレクトリを作成します。また、dbの中にはdataディレクトリも作成しておいてください。

2. docker-compose.yml作成

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

docker-compose.yml
version: '3'

services:
  web:
    container_name: web
    build: ./docker
    ports:
      - 80:80
    privileged: true
    volumes:
      - ./server:/var/www/html

  db:
    image: mysql:5.7
    container_name: db-host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: docker-database
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      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

  phpmyadmin:
    container_name: phpmyadmin
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOSTS=db-host
      - PMA_USER=root
      - PMA_PASSWORD=root
    ports:
      - 8080:80

3. Dockerfile作成

webコンテナ構築時に使われるDockerfileをdockerディレクトリ直下に作成します。
Composerのインストールは公式を参考にしてください。

Dockerfile
FROM php:7.2-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\
  && docker-php-ext-install zip pdo_mysql mysqli \
  && docker-php-ext-enable mysqli

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"

4. PHP設定ファイル作成

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

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

5. apache設定ファイル作成

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

000-default.conf
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/public

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

6. Laravelプロジェクト作成

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

# docker起動
$ docker-compose up -d

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

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

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

7. 動作確認

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

MySQL, phpMyAdminのコンテナも確認しておきましょう。
ブラウザから http://127.0.0.1:8080 にアクセスしてみましょう。
phpMyAdminが表示されたら大丈夫です。

79
91
4

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
79
91