サンプルはこちら。
Laravel Sail とは、Laravel の開発環境をコンテナーでセットアップするためのツールです。
コンテナーで動作するということは、devcontainer で動かしたくなるものです。
Laravel Sail には devcontainer.json や docker-compose.yml を準備するコマンドも用意されています。
https://readouble.com/laravel/9.x/ja/sail.html#using-devcontainers
.devcontainer/devcontainer.json
// https://aka.ms/devcontainer.json { "name": "Existing Docker Compose (Extend)", "dockerComposeFile": [ "../docker-compose.yml" ], "service": "laravel.test", "workspaceFolder": "/var/www/html", "settings": {}, "extensions": [ // "mikestead.dotenv", // "amiralizadeh9480.laravel-extra-intellisense", // "ryannaddy.laravel-artisan", // "onecentlin.laravel5-snippets", // "onecentlin.laravel-blade" ], "remoteUser": "sail", "postCreateCommand": "chown -R 1000:1000 /var/www/html" // "forwardPorts": [], // "runServices": [], // "shutdownAction": "none", }
docker-compose.yml
# For more information: https://laravel.com/docs/sail version: '3' services: laravel.test: build: context: ./vendor/laravel/sail/runtimes/8.1 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' image: sail-8.1/app extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' environment: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: "%" MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - 'sail-mysql:/var/lib/mysql' - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s networks: sail: driver: bridge volumes: sail-mysql: driver: local
vendor
の復元
上記の構成で足りてはいますが、リポジトリをクローンした直後など composer install
を行っていない状態では、 devcontainer を起動することができませんでした。
An error occurred setting up the container.
というエラーが起きました。
理由としては docker-compose.yml
にて Laravel Sail のランタイムが指定されていますが、そのランタイムが無い(コミット対象外)であるためです。以下の context
部分です。
services: laravel.test: build: context: ./vendor/laravel/sail/runtimes/8.1 dockerfile: Dockerfile
そのため devcontainer を起動する前に、下記コマンドで composer install
を実行しておきます。
docker run --rm \ -u "$(id -u):$(id -g)" \ -v $(pwd):/var/www/html \ -w /var/www/html \ laravelsail/php81-composer:latest \ composer install --ignore-platform-reqs
詳しくは Laravel Sail のドキュメントに記載されています。
.env
の準備
Laravel Sail の起動の際に .env
も必要ですが、これもコミット対象外であるため準備する必要があります。
.env.example
から手動で作成してもよいですが、 devcontainer の起動時に準備しておきましょう。
devcontainer.json
にコマンドを追加します。
"initializeCommand": "cp .env.example .env",
これで Laravel Sail を devcontainer で動かせるようになりました。
Qiita版