LoginSignup
2
2

More than 3 years have passed since last update.

docker-composeでLaravelの開発環境構築【LEMP環境】

Last updated at Posted at 2020-05-09

はじめに
laravel開発環境(nginx、laravel、mysql、phpmyadmin)をdockerとdocker-composeで作ってみた。かなり創造性に溢れた?構成になっているので、異論は認める。

豆知識
LAMP環境のapacheがnginxになったらLEMPになるらしい。読み方が「エンジンエックス」だからEになるっていう説が濃厚

今回作成する開発環境

PHP:7.2.30
Laravel:7.9.2
nginx:latest
mysql:latest
phpmyadmin:latest

用意する環境

docker:19.03.8
docker-compose:1.25.4
composer:1.9.3→入れとくと便利

リポジトリ

使い方

①git cloneしリポジトリをローカルにクローンする

②「/sh」に移動し、以下のコマンドを実行する

zsh
$sh setup.sh

③「/」に移動し、以下のコマンドを実行する

zsh
$docker-compose up -d

④以下のメッセージが出力されたことを確認する

zsh
.......
Creating laravel ... done
Creating nginx   ... done
Creating mysql   ... done
Creating phpmyadmin ... done

⑤以下に接続し、それぞれ画面が正しく表示されることを確認する。
laravellaravel.png

phpmyadmin
phpmyadmin.png

⑥(必要であれば)migrationの実行
以下のコマンドを順番に実行していく。

zsh
$docker exec -i -t laravel bash
$php artisan migrate
$exit

詰まったことリスト

詰まった事1

laravelとmysqlのコンテナ間通信に失敗する
このリポジトリではないが、laravelからmysqlに接続しようとする(sql実行しようとすると)とconnection refusedが出た。php artisan migrateでlaravelで定義されているmigrationファイル通りにmysqlにもテーブル作成されているのに、なぜか画面起点のときに接続できなかった。

原因
接続先IP(サービス)の設定ミス。
laravelの「.env」でmysql接続先IPをlocalhostにしていたが、これはlaravelコンテナ内localhost見ていることになる。コンテナが別なので、これでは接続できるはずがない。以下のように変更したら接続できた。

.env(変更前)
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
.env(変更後)
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306

php artisan migrateが実行できたのは、(laravelコンテナ外の)ローカルPCのlocalhost:3306がmysqlコンテナに向いていたからっぽい。ちゃんとコンテナ入って実行してれば、よくわからない詰まり方をしなかったのになぁ、と反省。

詰まった事2

composerのinstallが失敗する
laravel用のDockerfileビルド時、Composerをinstallするのだが、記事で紹介されているコマンドを真似しているのに、インストール自体が失敗してしまう。謎すぎる。

原因
Composerのinstall方法が複数あり、その中でも最低の物をチョイスしていたらしい。
Qiitaにベストプラクティスを紹介してくれている記事がある。これをコピペしたらインストール成功した。ありがたや...


なんだかんだ、業後の時間を使って2日でできた。
laravelは今後も使いたい?し、dockerの理解も少し深まったので良しとしよう。
以上!!!!

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