DockerとDocker Composeを使用したシンプルなLaravelの開発環境を作成していきます。

この記事でやったことのリポジトリは以下になります
https://github.com/mosaxiv/docker-laravel

事前準備

以下を事前にインストールしてください。

  • Docker
  • Docker Compose

Laravelプロジェクトの作成

プロジェクトを作成します。
Dockerを経由でComposerをつかってLaravelプロジェクトを作成します。

1
$ docker run --rm -v $(pwd):/app composer create-project --prefer-dist laravel/laravel my-site

説明

  • --rmコンテナ終了時にコンテナ自動的に削除します。
    ComposerでLaravelプロジェクトを作成するためだけに使用するのでコマンド実行後にコンテナは不要なので削除するために使用します。
  • -v $(pwd):/app ホストのディレクトリをマウントします。
    [ホストディレクトリの絶対パス]:[コンテナの絶対パス]
    コンテナ上で作ったLaravelのプロジェクトをホストに残すために使用します。
  • composer create-project --prefer-dist laravel/laravel my-site
    Laravelのインストールコマンド

Docker Composeで環境を作成

先程作成したフォルダ下にdocker-compose.ymlを作成します。

1
2
$ cd my-site
$ vi docker-compose.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3'

services:
  web:
    build: ./docker/web
    ports:
    - 80:80
    volumes:
    - ./:/var/www/html
    depends_on:
    - mysql

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: pw
    ports:
    - 3306:3306
    volumes:
    - mysql-db:/var/lib/mysql

volumes:
  mysql-db:

説明

webサーバ用のコンテナの作成をします。

1
2
3
4
5
6
7
8
  web:
    build: ./docker/web <- パスのDockerfileを見てコンテナ作成
    ports:
    - 80:80
    volumes:
    - ./:/var/www/html <- ホストのディレクトリをマウント
    depends_on:
    - mysql <- mysqlコンテナに依存

mysql用のコンテナを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db <- DB
      MYSQL_USER: user <- ユーザー
      MYSQL_PASSWORD: pw <- パスワード
    ports:
    - 3306:3306
    volumes:
    - mysql-db:/var/lib/mysql

webコンテナの作成

webサーバ用のDockerfileを作成します。
build: ./docker/web で定義している場所にDockerfileを作成します。

  • PHP拡張のインストール
  • Composerインストール
  • ドキュメントルートの設定変更
  • phpの設定変更
1
2
$ mkdir -p ./docker/web 
$ vim ./docker/web/Dockerfile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
FROM php:7.2-apache

RUN apt-get update \
    && apt-get install -y zip unzip vim libpq-dev \
    && docker-php-ext-install pdo_mysql pdo_pgsql

COPY php-base.ini $PHP_INI_DIR/conf.d/

COPY httpd-base.conf /etc/apache2/sites-available/laravel.conf
RUN a2dissite 000-default.conf && a2ensite laravel.conf && a2enmod rewrite

RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer

httpd.confを作成

1
$ vim ./docker/web/httpd-base.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<VirtualHost *:80>
  DocumentRoot /var/www/html/public

  <Directory /var/www/html/public>
    AllowOverride All
  </Directory>

  ErrorLog /var/log/apache2/error.log
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>

php.iniを作成

1
$ vim ./docker/web/php-base.ini
1
2
3
4
5
6
[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

起動

準備ができたの起動します。
docker-compose.ymlがあるフォルダへ移動してコマンドを実行します。

1
$ docker-compose up -d

http://localhost.comへアクセスできます!

MySQL接続

envには以下のように設定します

1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=db
DB_USERNAME=user
DB_PASSWORD=pw