Laravel + Docker(Sail)構築手順 – Windows版
前提確認
環境 | 状態確認方法 |
---|---|
Docker Desktop | 起動してる?右下のクジラアイコン |
WSL2(推奨) | wsl -l -v で確認(Ubuntuなど) |
Windows Terminal / CMD | どちらでも可 |
Git Bash(推奨) | Bashの方がLinuxコマンド使える |
構築手順ステップ
composer create-project laravel/laravel web-circular
- Laravel Sailというパッケージを開発環境用の依存関係としてインストール
composer require laravel/sail --dev
–devオプションについて
- Sailを導入
php artisan sail:install
Which services would you like to install? [mysql]
None ............................................................................................................. 0
mysql ............................................................................................................ 1
pgsql ............................................................................................................ 2
mariadb .......................................................................................................... 3
mongodb .......................................................................................................... 4
redis ............................................................................................................ 5
valkey ........................................................................................................... 6
memcached ........................................................................................................ 7
meilisearch ...................................................................................................... 8
typesense ........................................................................................................ 9
minio ........................................................................................................... 10
mailpit ......................................................................................................... 11
rabbitmq ........................................................................................................ 12
selenium ........................................................................................................ 13
soketi .......................................................................................................... 14
❯ 1
選択肢リスト、Laravel Sail の「どのサービス(コンテナ)を含めるか」を選べるようです。
無駄なサービスを入れすぎるとDockerコンテナが激重に
表示されるリストから Ubuntu (WSL) を選ぶ
- SailコマンドでDockerコンテナ起動
- Docker Desktopを起動
- Ubuntu(WSL)に切り替える
VSCodeターミナル右上の + 横の 下矢印ボタン ⏷ をクリック
sailコマンドはUbuntuでしか使えない(≒ Linux環境(bash)じゃないと動かない)
/mnt/c/web-circular# vendor/bin/sail up -d
Laravel Sail の正体は、Laravel開発用にチューニングされたDockerラッパースクリプト
処理内容 | 自動化されてる? | 実際の挙動 |
---|---|---|
Dockerイメージの取得 | ✅ | laravelsail/php82-composer とか mysql:8 をPull |
docker-compose.yml生成 | ✅ | sail:install 実行時に .docker と docker-compose.yml を作成 |
コンテナ起動 | ✅ | sail up -d で Laravel(PHP)と MySQL の2コンテナが起動 |
ネットワーク/ボリューム作成 | ✅ | LaravelとDBが同一ネットワークで通信できるように設定 |
先ほどのコンテナ起動でMySQLも一緒に起動されてます
- データベースが生きてるか確認
vendor/bin/sail artisan migrate
INFO Preparing database.
Creating migration table ...................................................... 308.69ms DONE
INFO Running migrations.
0001_01_01_000000_create_users_table .......................................... 586.27ms DONE
0001_01_01_000001_create_cache_table .......................................... 171.50ms DONE
0001_01_01_000002_create_jobs_table ........................................... 400.70ms DONE
※Laravelの初期DBスキーマ(テーブル)をMySQLコンテナ上に作成
Laravelのマイグレーションは「データベースのバージョン管理システム」Gitみたいなもの
以上でブラウザでウェルカムページが確認できます
xserverのような共用サーバーではvendor/bin/sail artisan~のようなsailコマンドが使用できない??ので下記の方法がいいかも
Laravel Sail
Laravelが提供する Dockerの開発環境 で、特別な設定なしに PHP・MySQL・Redisなどの環境をすぐに立ち上げられる。
方法2(curlコマンド)はWSL2やGit Bashなどの環境が必要
方法1は通常のWindows環境でも実行可能
Sailの導入手順(方法1)
PHPのパッケージ管理ツールComposerでLaravelをインストール
composer create-project laravel/laravel .
Sailを追加
composer require laravel/sail --dev
php artisan sail:install
Sailの起動
SailコマンドはLinux環境のbashシェルを必要とするため
自分の場合WindowsでPowerShellコマンドプロンプトだったので、Linux環境のBashシェルに接続
wsl -d Ubuntu
./vendor/bin/sail up -d
Laravel Sail開発環境のポート比較
localhostでアクセスできるPort 80 (メインポート)はすぐに使用可能です
それに対してPort 5173 (Vite開発サーバー)を使用するには、npmでパッケージのインストールが必要です。
初心者の方は、まずPort 80だけを使用して基本的な開発を始めることをお勧めします。フロントエンド開発が必要になった時点でVite(Port 5173)の設定を行うとよいでしょう。
SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.sessions’ doesn’t exist
ブラウザでlocalhostにアクセスするとSQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.sessions’ doesn’t existエラーになります
< 内容 >
- Laravelの設定で SESSION_DRIVER=database になっている(.envで設定されているよう🤷♂️)
- しかし、必要な sessions テーブルが作られていない
// .env
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
Laravel 11.xではセッションドライバーのデフォルト設定がdatabaseになっている可能性があるそうです(下記参考サイトより)
マイグレーション実行が推奨というのも、実は、Laravel 11では、セッションテーブルの作成がcreate_users_table.phpの中に含まれています
./vendor/bin/sail artisan migrate