超簡単!Docker 未経験者が Laravel の Docker 環境を構築する方法

こんにちはー!むちょこです。

近頃は 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} が該当します。

docker-compose.yml
    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 が設定されます。

.env
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 のインストール完了です!

MEMO

Laravel Jetstream についてはこちらをご覧ください。

https://jetstream.laravel.com/2.x/installation.html

MEMO

その他、 Laravel Sail についてもっと知りたい方はこちらをご覧ください。

https://laravel.com/docs/10.x/sail

Laravel Sail で任意の PHP バージョンを選択する方法や Xdebug を使う方法などが記載されています。