Build a simple laravel development environment with Docker Compose. Support with Windows(WSL2), macOS(Intel and Apple Silicon) and Linux.
- Docker Engine v23.0+ (BuildKit enabled by default) or the latest Docker Desktop
The Dockerfile uses here-documents (RUN <<EOF), which require BuildKit. When BuildKit is disabled (e.g. an old Docker version or the legacy builder), the RUN instructions are silently skipped, so required packages such as git are never installed. The build still succeeds, but composer install later fails with git was not found in your PATH.
BuildKit is enabled by default on Docker Engine v23.0+ and Docker Desktop. If you must use an older Docker, enable it explicitly before building:
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1- Click Use this template
- Git clone & change directory
- Execute the following command
$ task create-project
# or...
$ make create-project
# or... Linux environment
$ echo "UID=$(id -u)" >> .env
$ echo "GID=$(id -g)" >> .env
$ echo "USERNAME=$(whoami)" >> .env
$ mkdir -p src
$ docker compose build
$ docker compose --file compose.yaml --file compose-for-linux.yaml up --detach
$ docker compose exec app composer create-project --prefer-dist laravel/laravel .
$ docker compose exec app cp .env.example .env
$ docker compose exec app sed -i 's/DB_CONNECTION=.*/DB_CONNECTION=mysql/' .env
$ docker compose exec app php artisan key:generate
$ docker compose exec app php artisan storage:link
$ docker compose exec app chmod -R 777 storage bootstrap/cache
$ docker compose exec app php artisan migrate- Git clone & change directory
- Execute the following command
$ task install
# or...
$ make install
# or... Linux environment
$ echo "UID=$(id -u)" >> .env
$ echo "GID=$(id -g)" >> .env
$ echo "USERNAME=$(whoami)" >> .env
$ docker compose build
$ docker compose --file compose.yaml --file compose-for-linux.yaml up --detach
$ docker compose exec app composer install
$ docker compose exec app cp .env.example .env
$ docker compose exec app sed -i 's/DB_CONNECTION=.*/DB_CONNECTION=mysql/' .env
$ docker compose exec app php artisan key:generate
$ docker compose exec app php artisan storage:link
$ docker compose exec app chmod -R 777 storage bootstrap/cacheβββ app
βββ web
βββ db- Base image
- nginx:1.31
- Base image
- mysql:9.7
- Base image
