こんにちは、フルスタックエンジニアのryuです。
今回の記事では、LaravelをDockerで構築する方法について解説します。
以前の記事では、Docker HubにあるBitnamiのLaravelイメージを使い、docker-composeコマンドでLaravelを起動する方法を紹介していました。
ただ、現在はDocker Compose v2が標準となり、コマンドもdocker-composeではなくdocker composeを使う形が基本です。
さらにLaravelには、公式のDocker開発環境であるLaravel Sailがあります。
そのため、これからLaravelをDockerで動かしたい方は、古いLaravelイメージをそのまま利用するより、Laravel Sailを使って環境を作る方が分かりやすいです。
この記事では、Laravel Sailを使ってDocker環境を構築し、ブラウザからLaravelを表示するところまで初心者向けに解説します。
LaravelをDockerで構築する方法¶
LaravelをローカルPCへ直接構築する場合はPHPやデータベースなどの準備が必要ですが、Dockerならコンテナとしてまとめて管理できます。
Laravel Sailは、Laravelの開発に必要なDocker Composeの設定と、コンテナを操作しやすくするsailコマンドを組み合わせた仕組みです。
Dockerそのものが分からない方は、先に以下の記事を読んでおくと理解しやすいです。
あわせて読みたい
以前はBitnamiのLaravelイメージを使っていた¶
以前の記事では、Docker Hubで公開されていたBitnamiのLaravelイメージを利用していました。

以前はdocker-compose.ymlへLaravelとMariaDBを定義し、docker-compose up -dで起動していました。ただ、記事内のLaravel 8やMariaDB 10.2は現在では古い構成です。
また、現在のDocker Composeでは、旧来のdocker-composeコマンドではなく、Docker CLIへ統合された次の書き方が基本です。
docker compose up -d
Composeファイルについても、現在はcompose.yamlという名前がよく使われます。
そのため、この記事ではLaravel公式のSailを使う方法へ変更します。
Laravel SailでDocker環境を作る¶
Laravel Sailとは?¶
Laravel Sailは、Laravel公式のDocker開発環境です。
Laravelのアプリケーション、MySQL、RedisなどをDocker Composeでまとめて起動できます。
自分でPHP用のDockerfileやMySQLの設定を一から書かなくても、Laravel向けの環境を作りやすいのが特徴です。
現在のLaravelでは、Sailの設定はcompose.yamlに保存され、LaravelやMySQLなどのサービスが定義されます。
Docker Composeについて詳しく知りたい方は、【関連記事】docker-composeとは?dockerコマンドとの違いを理解しようも参考にしてください。
LaravelプロジェクトへSailを追加する¶
すでにLaravelプロジェクトがある場合は、ComposerからSailを追加できます。
Laravelプロジェクトのディレクトリへ移動して、次のコマンドを実行します。
composer require laravel/sail --dev
インストールできたら、Sailの設定を作成します。
php artisan sail:install
実行すると、利用するサービスを選択できます。
たとえばMySQLを選択すると、LaravelアプリケーションとMySQLを動かすための設定がcompose.yamlへ追加されます。
Sailのインストール時には.envもDocker環境に合わせて設定されます。MySQLを使う場合、Laravelコンテナからはlocalhostではなくmysqlなどのサービス名で接続します。
Laravel Sailを起動する¶
Sailの設定ができたら、LaravelのDocker環境を起動します。
./vendor/bin/sail up
これでLaravelと、選択したMySQLなどのコンテナが起動します。
ターミナルをそのまま使いたい場合は、バックグラウンドで起動できます。
./vendor/bin/sail up -d
正常に起動したら、ブラウザから次へアクセスします。
http://localhost
Laravelの初期画面が表示されれば成功です。

以前の記事ではhttp://localhost:3000へアクセスしていましたが、Laravel Sailでは通常http://localhostから確認できます。
Laravel Sailでよく使うコマンド¶
Sailを起動した後は、Laravelでよく利用するPHP、Composer、Artisan、npmなどもコンテナ内で実行できます。
代表的なものをまとめると次の通りです。
| 操作 | コマンド |
|---|---|
| 起動 | sail up -d |
| 停止 | sail stop |
| コンテナ確認 | docker compose ps |
| Artisan | sail artisan |
| Composer | sail composer |
| PHP | sail php |
| npm | sail npm |
| シェルに入る | sail shell |
たとえばマイグレーションを実行する場合は次のようにします。
sail artisan migrate
PHPのバージョンを確認する場合は./vendor/bin/sail php --versionと実行できます。Sailは、Dockerコンテナ内のLaravel開発環境を操作しやすくする仕組みです。
Docker Composeからコンテナの状態を確認する¶
SailはLaravel向けにDocker Composeを使いやすくした仕組みなので、Docker Composeのコマンドを直接利用することもできます。
現在動いているコンテナを確認するには次のコマンドです。
docker compose ps
ログを確認する場合は、
docker compose logs
リアルタイムでログを追いたい場合は-fを付けます。
docker compose logs -f
特定のサービスだけ確認することもできます。
docker compose logs -f laravel.test
Laravelがブラウザに表示されない場合は、まずコンテナが起動しているか、ログにエラーがないか確認してみてください。
Laravel Sailが起動しない場合¶
Laravel Sailを起動したときにエラーになる場合は、いくつか確認するポイントがあります。
Docker Desktopが起動しているか¶
SailはDockerを利用するため、Docker Engineが動いていなければ起動できません。
まず確認します。
docker info
Docker Desktopを使っている場合は、Docker Desktop自体が起動しているか確認してください。
【関連記事】DockerDesktopが起動しない場合の対処方法
ポートが重複していないか¶
すでにローカルPCでWebサーバーやMySQLを起動していると、80番や3306番ポートが重複することがあります。
コンテナの状態を確認します。
docker compose ps
起動時のログも確認してみましょう。
docker compose logs
port is already allocatedのようなエラーが出ている場合は、同じポートを使っている別のサービスがないか確認します。
WindowsではWSL2を確認する¶
Laravel SailはWindowsでも利用できますが、公式にはWSL2を利用する構成になっています。
WindowsでSailが起動しない場合は、WSL2やDocker Desktop側の状態も確認してください。
Sailでdocker is not runningと表示される場合は、以下の記事でも詳しく解説しています。
【関連記事】Laravel Sailでdocker is not runningというエラーが出た場合の対処方法
docker compose downを使うときの注意点¶
コンテナを停止・削除する場合は、次のコマンドを利用できます。
docker compose down
通常のdownであれば、コンテナやComposeで作られたネットワークなどを削除します。
ただし、次のように-vを付ける場合は注意してください。
docker compose down -v
-vを付けると、Composeで利用しているボリュームも削除されます。
MySQLのデータをDocker Volumeへ保存している場合、データベースの内容も失う可能性があります。
環境を完全に作り直したいときには便利ですが、意味を理解せずに実行しないようにしましょう。
LaravelをDockerで構築するメリット¶
Dockerを使うと、compose.yamlを共有することでPHPやMySQLなどの開発環境を揃えやすくなります。
プロジェクトごとに環境を分けやすい一方、エラーを解決するにはコンテナ、ポート、VolumeなどDockerの基本も理解しておくことが大切です。
LaravelをDockerで構築する方法まとめ¶
今回の記事では、LaravelをDockerで構築する方法について解説しました。
以前はBitnamiのLaravelイメージと古いdocker-compose.ymlを使っていましたが、これからLaravelのDocker開発環境を作るのであれば、Laravel公式のSailを利用する方法が分かりやすいです。
基本的な流れは次の通りです。
composer require laravel/sail --dev
php artisan sail:install
./vendor/bin/sail up -d
起動後はブラウザで、
http://localhost
へアクセスします。
また、現在のDocker Composeでは、旧来のdocker-composeではなく次の形式を覚えておきましょう。
docker compose
Laravel Sailを使うとLaravelとMySQLなどをまとめてDockerで管理できますが、裏側ではDocker Composeが動いています。
LaravelだけではなくDockerの仕組みも理解しておくと、エラーが発生したときにも原因を調べやすくなります。
当ブログでは、DockerやLinux、AWSなどのインフラ技術を初心者向けに解説しています。
あわせて読みたい






