Edited at

Docker上でLaravelを動かしてみよう(laradockなしで)


はじめに

Laradockを使わず、Laravelの開発環境をDocker上で構築していきます。

立ち上げるコンテナは、以下3つです。

1. nginx

2. PHP

3. MySQL


環境


  • Docker version 18.09.2, build 6247962

  • docker-compose version 1.23.2, build 1110ad01

  • ホストOS:Mac OS Mojave 10.14.6(18G84)


ディレクトリ構成


$ tree
.
├── docker
│ ├── nginx
│ │ └── default.conf
│ └── php
│ ├── Dockerfile
│ └── php.ini
├── docker-compose.yml
└── server


Docker-composeファイル編集

今回は、nginx、MySQL、PHPの3つのコンテナを立ち上げます。


docker-compose.yml

version: '3'

services:
php: #phpコンテナを定義します。
container_name: php #コンテナの名前
build: ./docker/php #Dockerイメージがあるディレクトリ
volumes:
- ./server:/var/www #データ永続化領域の定義
#今回はホストのserverディレクトリを、コンテナ内/var/wwwディレクトリにマウント

nginx:
image: nginx #nginxの公式イメージを使用
container_name: nginx
ports: #ホスト:コンテナポート間のマッピング
- 8000:80
volumes:
- ./server:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on: # コンテナ起動順番の制御、phpコンテナのあとにnginxコンテナを起動
- php

db:
image: mysql:5.7
container_name: db
environment: #DB環境定義
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: docker
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 #image起動時に実行するSQLやスクリプト
ports:
- 3306:3306



Dockerfile編集

まず、PHPコンテナ構築に必要なDockerfileを編集します。

Composerと、Laravelのインストールも済ませてしまいましょう。

Composerのインストールは、公式サイトを参考にしてください。


/docker/php/Dockerfile

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

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

#Compose install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin
RUN mv composer.phar /usr/local/bin/composer

WORKDIR /var/www

RUN composer global require "laravel/installer"



PHP設定ファイルの編集


/docker/php/php.ini


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



nginx設定ファイルの編集

Laravel用に、nginxのconfigを編集します。


/docker/nginx/default.conf


server {
listen 80;
index index.php index.html;
root /var/www/public;

location / {
root /var/www/public;
index index.html index.php;
}

location ~ \.php$ {

try_files $uri =404;
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;
}
}



Laravelプロジェクトの作成

下記の通り、docker-compose.ymlファイルがあるディレクトリで3つ全てのDockerコンテナを起動します。

その後、PHPコンテナへ入り、Laravelプロジェクトを作成します。

$ docker-compose up -d #バックグラウンドでDockerコンテナを起動

$ docker-compose exec php bash #phpコンテナに入る

$ laravel new #phpコンテナ内で実行、Laravelプロジェクトを作成する


動作確認

ブラウザから、http://127.0.0.1:8000

へアクセスすると以下のように画面が表示されるはずです!

https___qiita-image-store.s3.amazonaws.com_0_290840_2bce8e3d-ef19-27f4-692e-f777def7362d.jpeg

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


$ docker-compose exec db bash

$ mysql -u docker -p # dbコンテナ内で実行、パスワードは"docker"


まとめ

DockerでLaravel環境を構築できましたね!