こんにちはー!むちょこです。
近頃は Docker で開発環境を構築するのが当たり前の世の中になってきました。 Docker は慣れてしまえばとても便利な環境構築の手段ですが、初めて Docker 環境を構築するときってちょっとハードル高く感じちゃいますよね。
今日は初めての方でも簡単に Laravel の Docker 環境が構築できる「 Laravel Sail 」のご紹介をしてみようと思います!
こだわりがなければ、コマンドを2,3個実行するだけで完了です。ひぇー簡単すぎる!
目次
前提
事前に Docker Compose のインストールが必要です。
今回使用するバージョンはこちら。
$ docker --version
Docker version 23.0.1, build a5ee5b1
$ docker compose version
Docker Compose version v2.16.0
また、実行環境は Linux を使用しています。他の環境(特に Mac )では書き方が異なる箇所がありますのでご注意ください。
基本の構築方法
まず任意のディレクトリで curl コマンドを実行して、新しいプロジェクト用のファイル群をダウンロードします。 example-app 部分はお好きなプロジェクト名に変更してください。
$ curl -s https://laravel.build/example-app | bash
成功するとプロジェクト名と同じディレクトリが作成されますので、そのディレクトリ内に移動します。
$ ls -la
total 4
drwxr-xr-x 3 user user 25 Feb 18 09:56 .
drwxr-xr-x 13 root root 281 Feb 17 21:23 ..
drwxrwxr-x 12 user user 4096 Feb 18 09:56 example-app
$ cd example-app
そのまま sail up コマンドで Laravel Sail を起動すると、 Laravel が動く Docker 環境が自動生成されます!これだけ!おしまい!
$ ./vendor/bin/sail up
使い終わったら Ctrl+C で停止します。
バックグランドでのコンテナ起動と停止方法
-d オプションをつけるとバックグラウンドで起動することができます。
ちなみに私は起動したままいろいろと操作したい派なので、いつもバックグラウンドで起動しています。
$ ./vendor/bin/sail up -d
バックグラウンドで起動した場合は、 Laravel Sail の stop コマンドで停止します。
$ ./vendor/bin/sail stop
環境のカスタマイズ方法
ここからはちょこっと Docker の知識が必要になってきます。ご自身の理解度や事情に合わせてカスタマイズしていただけたらと思います。
sail コマンドの実行で起動される Docker 環境の内容は、 curl でダウンロードしてきた docker-compose.yml の中で定義されています。
通常ならこの docker-compose.yml を直接編集して環境を整えるのですが、 Laravel Sail ではなるべくこのファイルには直接触れずに環境をカスタマイズする方法を用意してくれています。詳しい書き方を知らなくてもカスタマイズできるので難易度がグッと下がりますね!
使用サービスの選択
デフォルトでは、次のサービスが docker-compose.yml に設定されます。
- laravel.test
- mysql
- redis
- meilisearch
- mailpit
- selenium
laravel.test は Laravel アプリケーション用のメインコンテナなので外せませんが、それ以外のサービスは除外したり追加したりすることができます。
Laravel 10.x 時点で選択できるサービスは次のとおりです。
- mysql
- redis
- meilisearch
- mailpit
- selenium
- pgsql
- mariadb
- memcached
- minio
選択方法は、curl コマンドでダウンロードする際に with パラメータで指定してあげるだけです。複数ある場合はカンマ区切りにしてください。
例: memcached, mailpit だけを選択したい場合
curl -s "https://laravel.build/example-app?with=memcached,mailpit" | bash
Docker コンテナの設定変更
自動生成された docker-compose.yml を覗いてみると、 ${} で囲まれた変数がいくつか見つけられると思います。
以下の docker-compose.yml から抜粋した記述の中だと ${WWWGROUP}, ${APP_PORT:-80}, ${VITE_PORT:-5173} が該当します。
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
この変数は .env で変更可能です。
例: laravel.test のポートを 8080 に変更したい場合
デフォルトの .env ファイルには APP_PORT の値がないので、${APP_PORT:-80} の :- の右側の値である 80 が使われています。
これを .env で APP_PORT=8080 と設定することで、 docker-compose.yml でも 8080 が設定されます。
APP_PORT=8080
この状態でコンテナを起動すると、 laravel.test のコンテナが 8080 ポートと 5173ポートで起動していることが確認できると思います。
$ ./vendor/bin/sail up -d
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
example-app-laravel.test-1 sail-8.2/app "start-container" laravel.test 14 seconds ago Up 12 seconds 0.0.0.0:5173->5173/tcp, 8000/tcp, 0.0.0.0:8080->80/tcp
パッケージの追加
パッケージを追加を行う際は、通常のコマンドの前に sail コマンドを指定してあげます。
例: Laravel Jetstream のインストール
$ ./vendor/bin/sail composer require laravel/jetstream
$ ./vendor/bin/sail php artisan jetstream:install livewire
$ ./vendor/bin/sail npm install
$ ./vendor/bin/sail npm run build
$ ./vendor/bin/sail php artisan migrate
これでコンテナの中に入らないまま Jetstream のインストール完了です!
その他、 Laravel Sail についてもっと知りたい方はこちらをご覧ください。
https://laravel.com/docs/10.x/sail
Laravel Sail で任意の PHP バージョンを選択する方法や Xdebug を使う方法などが記載されています。