この記事では、DockerでLaravelの環境構築をやっていこうと思います。
初学者の方(自分。。)には少し難しいので、ある程度勉強を進めた方を対象としています。
また、自分もほとんど初学者みたいなものなので、今回は以下の記事を参考にさせていただいてます。(めちゃくちゃわかりやすかったです、ありがとうございます!)
Laravelの環境をDockerで構築するチュートリアル
僕の記事は僕の備忘録として、また、別視点としての記事として少しでも役に立てれば、と思ってます。
目次
流れ
・Nginxでwebサーバーを立てる
・PHPとLaravelでアプリケーションサーバーを立てる
・MySQLでDBサーバーを立てる
この「サーバーを立てる」というのは、それぞれ「コンテナを構築する」、
と捉えてください。
なので今回は、
・webサーバー(Nginx)
・アプリケーションサーバー(Laravel)
・DBサーバー(MySQL)
の3つのコンテナを構築します。
準備
これから構築していくための準備をします。
以下のような構成で、ディレクトリを作成してください。
dockerLaravelProject
├── docker
│ ├── app
│ │ └── Dockerfile
│ └── web
│ └── default.conf
├── index.html
└──docker-compose.yml
Dockerfile
PHPとLaravelをインストールするイメージを作成します。
default.conf
Nginxの設定ファイルです。
設定ファイルの記述の仕方については、以下の記事を参考にして下さい。
Nginx設定のまとめ
nginx.confの構成
docker-compose.yml
コンテナを作成するファイルです。
このファイルを実行することで、コンテナを作成します。
index.html ⇔ LaravelApp
とりあえず、Nginx起動確認のためにindex.htmlを置いています。
Laravel構築のところで、LaravelAppに置き換えます。
以降、この中にLaravelのアプリケーションが置き換えられますが、それ以外にファイルを追加することはないです。
このファイルにどんどん書き込んでいきます。
Nginxでwebサーバーを立てる
index.html
<h1>Hello Docker</h1>
Nginxの設定ファイル
server {
listen 80;
root /var/www/html;
index index.html index.htm;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
listen
指定したポート番号で待ち受けます。
root
静的ファイルの存在するパスを指定します。
index
URLがディレクトリ(“/”)にアクセスしている時に表示するファイルを指定します。
上の書き方では、index.htmlが存在すればアクセスし、無ければindex.htmにアクセスします。
docker-compose.yml
version: '3'
services:
web:
container_name: laravel.nginx
image: nginx:1.15.6
ports:
- "8000:80"
volumes:
- ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
コンテナの作成・起動
以下のコマンドでNginxコンテナを起動してみましょう。
$ docker-compose up -d
http://localhost:8000にアクセスして以下のように表示されれば成功です。

PHPとLaravelでアプリケーションサーバーを立てる
Dockerfile
このファイルでは、PHPとLaravelをインストールをしています。
FROM php:7.2-fpm
# 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
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql
WORKDIR /var/www/html
Nginxの設定ファイルを編集
NginxでPHPが実行できるように記述を追加していきます。
server {
listen 80;
root /var/www/html;
index index.html index.htm;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 以下を追加
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
docker-compose.yml
version: '3'
services:
web:
container_name: laravel.nginx
image: nginx:1.15.6
ports:
- "8000:80"
volumes:
- ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
depends_on: # 追加
- app
# 以下全て追加
app:
container_name: laravel
build: ./docker/app
volumes:
- .:/var/www/html
コンテナの作成・起動
コンテナを作成・起動します。
$ docker-compose up -d
Laravelアプリケーションを作成
それでは、今ビルドしたアプリケーションサーバーのコンテナに入って、LaravelのアプリケーションをComposerで作成します。
以下のコマンドでコンテナに入りましょう。
(laravelの部分はコンテナ名を入れてください。)
$ docker exec -it laravel bash
コンテナに入れたら、以下のコマンドでlaravelを作成して下さい。
$ composer create-project --prefer-dist laravel/laravel [アプリ名]
時間かかります。。。。
NginxのrootとindexをlaravelAppに対応
NginxのrootとindexをLaravel内のpublic/index.phpに指定します。
root /var/www/html/dockerLaravelApp/public;
index index.php index.htm;
変更を反映させるために以下のコマンドを実行します。
$ docker-compose restart
http://localhost:8000にアクセスして、Laravelの画面が表示されれば成功です。

DBサーバー(MySQL)を立てる
docker-compose.yml
version: '3'
services:
web:
# 省略 ....
app:
container_name: laravel.app
build: ./docker/app
volumes:
- .:/var/www/html
depends_on: # 追加
- mysql
# 以下全て追加
mysql:
container_name: laravel.mysql
image: mysql:5.6
environment:
MYSQL_DATABASE: laravelApp # データベース名
MYSQL_USER: user # ユーザー名
MYSQL_PASSWORD: root # パスワード
MYSQL_ROOT_PASSWORD: root # パスワード
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
Laravel側でDB設定
Laravel側で、.envファイルにDBの設定を記述します。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravelApp
DB_USERNAME=user
DB_PASSWORD=root
コンテナの作成・起動
MySQLコンテナを作成・起動します。
$ docker-compose up -d
コンテナに入ってマイグレーションを実行
$ docker exec -it laravel bash
$ cd laravelApp
$ php artisan migrate
データベースを確認
では、マイグレーションが完了しましたが、データベース自体はどこにできているのでしょうか?
答えは、構築したMySQLのコンテナ内に作成されています。
なので、MySQLのコンテナに入って確認する必要があります。
以下のコマンドでMySQLのコンテナに入りましょう。
$ docker exec -it [MySQLのコンテナ名] bash
コンテナに入れたら、mysqlにアクセスします。
$ mysql -u user -p
パスワードが聞かれるので、認証できたら、以下のコマンドでも実行してみましょう。
mysql > show databases;
いかがでしたか?
データベースが存在していれば完了です。
これでDockerをLaravelを用いた環境構築は終了です。
僕自身の感想ですが、丸一日かかってでき、このブログ書きながら理解を深めたって感じです。
何度も手を動かしてやってみることが大切ですね。
僕は、3回環境構築しました笑