InfraAcademy

InfraAcademy Blog

LaravelをDockerで構築する方法解説【docker-composeで簡単起動】

| #Docker #php #docker-compose
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアの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イメージを利用していました。

DockerHub:bitnami/laravel – Docker Image | Docker Hub

以前は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の初期画面が表示されれば成功です。

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などのインフラ技術を初心者向けに解説しています。

あわせて読みたい

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る