私的 Laravel 用 Docker 構成 2022
最近は Docker で Laravel の開発環境を整えています
この環境のリポジトリはこちら↓
必要なものはその都度違うので、少し書き換えてからコンテナをビルドすることが多いですね。
Jetstream (inertia) を使う前提なので、Vue を扱えるようにしています。
2022/8/6 追記
Laravel v9.2 からの Vite を使う環境を Laravel Sail で作りました。
全体ディレクトリ構成
.
├── .vscode
│ └── launch.json
├── bin (コマンドショートカット用スクリプト)
│ ├── artisan
│ ├── composer
│ └── npm
├── db-work (dbコンテナの作業用ディレクトリと同期)
├── infra
│ ├── mysql
│ │ ├── Dockerfile
│ │ └── my.cnf
│ ├── nginx
│ │ └── default.conf
│ └── php
│ ├── Dockerfile
│ └── php.ini
├── laravel (Laravelをインストールするディレクトリ)
│ └── js.config.json (Laravel インストール後に作成)
├── docker-compose.yml
├── tables-mdstyle.xsl
└── vetur.config.js
Docker と関係ないファイルがちょいちょい混じってますが、これらがないと主に VSCode で使いづらいので一緒に入れるようにしています。
コンテナの起動/停止
初回
docker compose --profile extra up -d --build
docker compose --profile extra down
2回目以降
docker compose up -d
docker compose down
プロファイル extra について
node コンテナを起動しておくと watch で待機するようになるので、ファイルの変更にあわせて自動でコンパイルが行われます。
普段は任意のタイミングで npm run dev を実行したいので、別プロファイルにして node コンテナのみ起動しないようにしています。
コマンドのショートカット
コマンドが長いので bin配下にショートカットのためのスクリプトを用意してあります(zsh 用)。
実行できるようにパーミッションを変更します。
chmod u+x bin/*
artisan, composer, npm があります。以下のような使い方ができます。
bin/npm run dev
Laravel のインストール
app コンテナに入り、Laravel と Jetstream をインストール
docker compose exec app bash
composer create-project --prefer-dist "laravel/laravel=9.*" .
php artisan storage:link
chmod -R 777 storage bootstrap/cache
composer require laravel/jetstream
php artisan jetstream:install inertia
exit
node コンテナで リソースのコンパイル
bin/npm install
bin/npm run dev
.env を編集してデータベースの接続先を設定
# :
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=phper
DB_PASSWORD=secret
# :
app コンテナでマイグレーション
bin/artisan migrate
VSCode 用の設定ファイル類
- XDebug を使ったデバッグ実行のための構成ファイル .vscode/launch.json を用意しています。
- Vue 用の拡張 Vetur を使う関係で、Laravel の階層が異なるので、 .vetur.config.js で指定しています。
- Vetur はプロジェクトルートで jsconfig.json か tsconfig.json を探すので、Laravel インストール後に laravel ディレクトリ直下に作成するようにします。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["resources/js/*"]
}
},
"exclude": ["node_modules", "public"]
}
テーブル定義書 (laravel/database/README.md) の生成
db コンテナ内で mysqldump を使って出力したテーブル定義の xml に xslt をあててマークダウンのテーブル定義書を生成できるようにしています。
mysqldumpでテーブル定義のxmlを出力
docker compose exec db sh
mysqldump --no-data --xml -u root -p laravel > ./work/laravel.xml
Enter password: secret
exit
コメントを出力するようにしているので、日本語名や説明を設定しておくとよいです。
xsltをあててマークダウンに変換
xsltproc -o laravel/database/README.md tables-mdstyle.xsl db-work/laravel.xml
Laravel をこの Docker 構成ごと git 管理下においた場合の clone からの再構築
初回起動時は extra プロファイルをつけて up
※ [repository], [project-dir] は各環境に置き換える
git clone [repository]
cd [project-dir]
chmod u+x bin/*
docker compose --profile extra up -d --build
docker compose exec app bash
composer install
cp .env.example .env
php artisan key:generate
php artisan storage:link
chmod -R 777 storage bootstrap/cache
exit
bin/npm install
bin/npm run dev
bin/artisan migrate
初回起動時は extra プロファイルをつけて down
docker compose --profile extra down
Special Thanks:
↑こちらの構成を参考に、ちょいちょい手を加えています。
Discussion