本記事の対象の方
docker-composeで環境を構築をしたい方
最短でLaravelアプリ開発をしたい方向けに記事を書いていますのでDocker構成などをしっかり学びたい方向けではありません。
とはいえ、多少構成の説明はしたいと思いますので知りたい方だけ記事の後半を御覧いただければと思います。
ローカルで用意する環境
- Docker 20.10
- docker-compose 1.27.4
- git 2.25
※バージョンはインストール時の最新版ですので現在の最新版とは差異があるかもしれません
Dockerとdocker-composeをインストールされていない方
Macの方
まずは下記公式サイトからDocker Desktopをインストールしてください
ターミナルを起動後、下記コマンドでDockerとdocker-composeのバージョンを確認してみましょう。確認できたらOKです。
$ docker --version
Docker version 20.10.1, build 831ebea
$ docker-compose --version
docker-compose version 1.27.4, build 40524192
※gitについてはMacは最初から入っていると思いますが最新版にしたい場合は各自でお願いいたします。
Windowsの方
MacよりDocker環境の構築がややこしいので記事にまとめております。
下記を御覧ください。
gitについては下記コマンドでインストールできます。
$ sudo apt-get install git
docker-composeで構築する環境
- PHP 7.4 /
composer 1.10composer 2.0.14 - MySQL 8.0
- nginx 1.18
※読者の方からご指摘いただいてcomposerのバージョンを上げました。
Dockerfileリポジトリをクローン
Laravel環境を構築用のDockerfileなどをgithubにあげていますのでそれをまずはCloneします。
下記がgithubのリポジトリです。
まずはターミナルを起動してください。
下記コマンドを実行します。
$ git clone https://github.com/E-handson/docker-laravel.git
cloneに成功したら「docker-laravel」ディレクトリが作成されます。
作成されたディレクトリに移動しましょう。下記コマンドを実行します。
$ cd docker-laravel
docker-laravel配下にはdocker-compose.ymlがあると思います。
docker-composeコマンドはdocker-compose.ymlがあるディレクトリ直下で実行できます。
Dockerサービスの立ち上げ
まずはDockerサービスを構築するために下記コマンドを実行します。
$ docker-compose build
次にDockerサービスを起動するために下記コマンドを実行します。
$ docker-compose up
サービスが立ち上がったかを確認するコマンドがありますので実行してみましょう。
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------ docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-laravel_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp docker-laravel_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp
Nameがコンテナ名になります。
docker-laravel_app_1 → PHP/Composerが入っているコンテナ
docker-laravel_db_1 → MySQLが入っているコンテナ
docker-laravel_web_1 → Nginxが入っているコンテナ
Stateという列がUpになっていたらそのコンテナが起動しているということになります。
これでDockerの立ち上げは完了です。
Laravelのインストール
appコンテナにLaravelをインストール
下記コマンドを実行します。
$ docker-compose exec app composer create-project --prefer-dist "laravel/laravel=6.*" .
成功するとsrcディレクトリが作成されています。llコマンドで確認してみましょう。
$ ll drwxrwxr-x 8 user user 4096 Dec 24 01:43 .git/ -rw-rw-r-- 1 user user 486 Dec 24 01:43 README.md drwxrwxr-x 5 user user 4096 Dec 24 01:43 docker/ -rw-rw-r-- 1 user user 719 Dec 24 01:43 docker-compose.yml drwxr-xr-x 3 root root 4096 Dec 24 01:46 src/
一番下のsrc配下にLaravelのソースファイルが作成されています。
では実際にブラウザで確認してみましょう。
下記URLにアクセスしてみてください。
Laravelのウェルカムページが表示されれば正常にインストールが完了しています!
MySQLの設定
./src配下にある.envを編集していきます。
76行目あたりに下記の編集前の記述があるかと思います。そこを編集後のように修正してください
編集前
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
編集後
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_local
DB_USERNAME=phper
DB_PASSWORD=secret
下記コマンドを実行します。
$ docker-compose exec app php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.11 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.08 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.04 seconds)
接続に成功しているとmigrateが実行されてMySQLに認証系などのテーブルが作成されます。
これで開発環境構築は完了です!
ちなみにdockerで構築したMySQLに外部から接続する方法を下記で紹介していますので参考にしてみてください。

Docker構成の説明
ここからはDocker構成の説明になります。興味のある方だけ御覧いただければと思います
リポジトリ構成
まずは今回使用したリポジトリ構成を紹介します。
docker-laravel ├── docker-compose.yml ├── docker │ ├── mysql │ │ ├── Dockerfile │ │ └── my.cnf │ ├── nginx │ │ ├── default.conf │ └── php │ ├── Dockerfile │ └── php.ini └── src
./srcディレクトリはgit cloneした段階では存在していません。
Laravelをインストールした後に作成されます。
コンテナの構成
「docker-compose ps」で確認した通り今回は3コンテナで構成しています。
- appコンテナ – PHP7.4をインストールしているコンテナ
- dbコンテナ – MySQL8.0をインストールしているコンテナ
- webコンテナ – Nginx1.18をインストールしているコンテナ
appコンテナ
実際にLaravelをインストールしているのもこのコンテナです。
appコンテナの/workspace配下にインストールしたLaravelのソースはローカルのsrc/配下にマウントされています。
平たく言えば同期しているということですね。
そのため./src配下のファイルを編集すると実際にLaravelを動かしている/workspace配下のソースにも反映されるということになります。
編集する場合は./src配下を修正してももちろん良いですがおすすめはVS codeを使用してコンテナ側の/workspace配下を修正する方法です。
詳細は下記ブログに記載していますので興味がある方は御覧ください。
dbコンテナ
「MySQLの設定」の手順の際にMySQLに接続をしましたが、先ほどの接続先はこのコンテナのMySQLになります。
下記設定でユーザーとDBをbuild時に作成しています。
DB名:laravel_local
DBユーザー:phper
password:secret
webコンテナ
ローカル側のdefault.cnfに設定を記述しています。
そのファイルをコンテナ側にマウント(同期)しています。
おまけ
docker-composeコマンドの紹介
$ docker-compose up #コンテナの起動 $ docker-compose stop #コンテナの停止 $ docker-compose restart #コンテナの停止 $ docker-compose exec app bash #appコンテナのコンソールにアクセス $ docker-compose exec db bash #dbコンテナのコンソールにアクセス $ docker-compose exec web ash #webコンテナのコンソールにアクセス
docker-compose exec app bashでコンソールにアクセスしてからでもLaravelコマンドは実行可能です。
$ docker-compose exec app bash #コンテナのコンソールアクセス後 root@a41a0f8b0b3f:/workspace# php artisan migrate root@ec0d92329eda:/workspace# php artisan make:model Model名
コメント
非常に役立つ記事ありがとうございます。
今やってみたら、autoload.phpが、この手順では、生成されなかったです。
どうやら、 composer の推奨バージョンが変わったのが原因だったようで、
$ docker-compose exec app composer self-update –2
$ docker-compose exec app composer install
として、ウェルカムページが見れました。
jazmasさん
記事をご覧くださりありがとうございます。私も改めて試したところうまくいかなかったため、記事とDockerfileの修正を行いました。
composerのバージョンを2.0.14にしたところWarningもなくなりウェルカムページまでうまくいくようになりました。
ご指摘ありがとうございました。また何かございましたらよろしくお願いいたします。
誤記があるので、修正ください。Djangoのインストールと書いてありますが、正しくは、「lalavelのインストール」だと思います。あとMySQLのインストールでDB_HOSTをlocal host ではなくて、dbにしたのは、なぜですか?、A5SQLなどの外部接続ツールで、接続を試してみましたが繋がりません。その上、MYSQLコマンドで、MYSQLにログインしようとしましたが、できませんでした。良い方法がありましたら、教えてください。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_local
DB_USERNAME=phper
DB_PASSWORD=secret
ご指摘ありがとうございます。誤記修正しました。
> DB_HOSTをlocalhost ではなくて、dbにしたのは、なぜですか?
こちらですがLaravelをインストールしたappコンテナとMySQLをインストールしたdbコンテナ間の通信のためlocalhostではなく、コンテナ名である「db」を指定しています。
コンテナ間の通信などで調べてみると詳細が出てくると思います。
外部接続ツールですが私が普段利用しているMySQL WorkbenchとVScodeプラグインでの方法を記事にしたので参考にしてみてください。
https://niwakatech.info/docker-mysql-access/
A5SQLでも設定周りを同様に設定すれば接続できると思います。