カテゴリー: BackEnd

Laravel SailでDocker環境構築

はじめに

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コマンドと同じです。

$ ./vendor/bin/sail up        # コンテナの起動
$ ./vendor/bin/sail stop    # コンテナの停止

初回起動の場合は、しばらくするとコンテナが起動します。初期設定の場合は、 http://localhostにブラウザでアクセスすると、Laravelの初期画面が表示されます。

sailで使用できるコマンド

./vendor/bin/sail artisanのように、sailではサブコマンドが用意されています。このサブコマンドは、 laravel.testコンテナ内で実行されるため、ローカルでパッケージのインストールは必要ありません。
ちなみに、下記に含まれないサブコマンドを実行したときは、全て docker-composeのサブコマンドとして実行されます。( upstopなど)

  • 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ファイルに設定します。

APP_PORT=8080           # laravel.testコンテナのポート
FORWARD_DB_PORT=13306   # MySQLのポート

docker-compose.yml側では、以下のように記述されているため、設定したポートフォワードが反映されます。

services:
    laravel.test:
     ・・・中略・・・
        ports:
            - '${APP_PORT:-80}:80'

PHPのバージョン切り替え

標準では、PHP 8が使われていますが、PHP 7.4に切り替えることもできます。あえて、PHP7.4を使用したい場合は、docker-compose.ymlの laravel.testコンテナを次のように修正します。

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ディレクトリ配下に以下のファイルが生成されます。

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の知識さえあればこれまでと同じようにカスタマイズできる点が特徴だと思いました。

おすすめ書籍

カイザー

シェア
執筆者:
カイザー

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

4週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前