はじめに
Laravel Sailは、2020年末に正式版となった、Laravel公式のローカルDocker環境と、Docker環境を便利に使用できるコマンド群です。Laravel公式ドキュメントでも、Laravelのセットアップ方法として説明されています。今回は、Laravel Sailがどのような構成であるか、またよく使用すると思われるコマンドを紹介します。
Laravel Sailの基本
Laravel Sailは、macOS、Linux、Windows(WSL2)で動作するDockerコンテナを構築します。
Dockerの構成
Laravel 8をセットアップすると、自動的に
docker-compose.yml
が生成されます。また、sail自体も最初から入っています。ポートフォワードなどの設定方法については後ほど説明しますが、構成についてはこのようになっています。
- laravel.test
UbuntuベースのオリジナルのDockerイメージです。php artisan serve
コマンドでWebサーバを起動させます。 - mysql
mysql:8.0
イメージが使用されています。 - redis
redis:alpine
イメージが使用されています。 - mailhog
mailhog/mailhog:latest
イメージが使用されています。
コンテナの起動・停止
基本的には、docker-composeコマンドと同じです。
1 2 | $ ./vendor/bin/sail up # コンテナの起動 $ ./vendor/bin/sail stop # コンテナの停止 |
初回起動の場合は、しばらくするとコンテナが起動します。初期設定の場合は、
http://localhost
にブラウザでアクセスすると、Laravelの初期画面が表示されます。
sailで使用できるコマンド
./vendor/bin/sail artisan
のように、sailではサブコマンドが用意されています。このサブコマンドは、
laravel.test
コンテナ内で実行されるため、ローカルでパッケージのインストールは必要ありません。
ちなみに、下記に含まれないサブコマンドを実行したときは、全て
docker-compose
のサブコマンドとして実行されます。(
up
や
stop
など)
- php
- composer
- artisan
- test
- dusk
- tinker
- node
- npm
- npx
- yarn
- mysql
- psql
- shell / bash
- root-shell
- share
Laravel Sailの設定
よく使うと思われるLaravel Sailの設定を紹介します。
ポートフォワードの設定
laravel.test
コンテナ、
mysql
コンテナのポートフォワードを設定するには、.envファイルに設定します。
1 2 | APP_PORT=8080 # laravel.testコンテナのポート FORWARD_DB_PORT=13306 # MySQLのポート |
docker-compose.yml側では、以下のように記述されているため、設定したポートフォワードが反映されます。
1 2 3 4 5 | services: laravel.test: ・・・中略・・・ ports: - '${APP_PORT:-80}:80' |
PHPのバージョン切り替え
標準では、PHP 8が使われていますが、PHP 7.4に切り替えることもできます。あえて、PHP7.4を使用したい場合は、docker-compose.ymlの
laravel.test
コンテナを次のように修正します。
1 2 3 4 5 | services: laravel.test: build: context: ./vendor/laravel/sail/runtimes/7.4 ・・・後略・・・ |
laravel.testコンテナのカスタマイズ
さらに一歩踏み込み、
laravel.test
コンテナを構成するDockerfile、php.iniなどをカスタマイズするには、
./vendor/bin/sail artisan sail:publish
コマンドで設定ファイルをコピーすることができます。dockerディレクトリ配下に以下のファイルが生成されます。
1 2 3 4 5 6 7 8 9 10 11 | docker ├── 7.4 │ ├── Dockerfile │ ├── php.ini │ ├── start-container │ └── supervisord.conf └── 8.0 ├── Dockerfile ├── php.ini ├── start-container └── supervisord.conf |
7.4、8.0ディレクトリはPHPのバージョンを指します。不要なバージョンは削除して良いと思います。
さいごに
Laravel Sailは、ミニマムなコンテナを構築することができるため、良いテンプレートだと思いました。Docker初心者でも、簡単に構築することができ、また基本はdocker-compose.ymlやDockerファイルの変更によってカスタマイズが必要なので、Dockerの知識さえあればこれまでと同じようにカスタマイズできる点が特徴だと思いました。