はじめに
LaravelをDockerで動かせるようにしたので、
環境構築の参考になればと思います。
Laradockを使えばラクにできますが、あえて使わないで、
docker-compose.yml、Dockerfileで動くようにしました。
Docker インストール
公式から Docker for Mac をインストール。
https://docs.docker.com/docker-for-mac/install/
docker-compose.ymlの作成
version: '3'
services:
nginx:
build:
context: ./docker/nginx
depends_on:
- php
ports:
- 8088:80
volumes:
- ./:/var/www/html
php:
build:
context: ./docker/php
environment:
DB_HOST: mysql
volumes:
- ./:/var/www/html
mysql:
image: mysql:5.7
volumes:
- ./docker/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=sample
- MYSQL_PASSWORD=sample
- MYSQL_DATABASE=sample
ports:
- 3306:3306
見ればわかるようにプロジェクトルートを/var/www/htmlとして設定している。
コンテナ側では基本的に/var/www/htmlに入るようになっていてそれを公開する形になっている。
またこの設定ファイルにあるように、docker-composeで使用するコンテナの設定ファイル群は./dockerディレクトリ以下にある。
PHPのDockerfileは以下の通り
phpのDockerfile
docker/php/Dockerfile
FROM php:7.2.8-fpm
COPY php.ini /usr/local/etc/php/
# install composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim
WORKDIR /var/www/html
docker/php/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
Nginxの設定
docker/nginx/Dockerfile
FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/default.conf
docker/nginx/default.conf
server {
listen 80;
server_name _;
root /var/www/html/public;
index index.php;
access_log /var/www/html/docker/nginx/logs/access.log;
error_log /var/www/html/docker/nginx/logs/error.log;
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;
}
}
諸々のパスはコンテナ側に準拠している。
そして一番重要なのがrootを設定すること。
Laravelではpublicディレクトリ以下のindex.phpにアクセスが飛ぶためここをrootに設定する。
環境を立ち上げる
ログファイルを格納するディレクトリを作る
mkdir docker/nginx/logs
MySQLで使用するディレクトリを作る
mkdir docker/mysql
githubで管理した時にignoreされたファイルをなかったら作る
echo '' >> storage/logs/laravel.log
権限を与える
sudo chmod 777 .storage/ .bootstrap/
composer install
Laravel
cp .env.example .env
php artisan key:generate
docker-compose up -d