LoginSignup
0
2

More than 5 years have passed since last update.

Laravel & Docker 環境構築

Posted at

はじめに

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
0
2
0

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
0
2