docker-laravel ๐ณ
June 27, 2026 ยท View on GitHub
Introduction
Build a simple laravel development environment with Docker Compose. Support with Windows(WSL2), macOS(Intel and Apple Silicon) and Linux.
Requirements
- 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
Usage
Create an initial Laravel project
- 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
Create an existing Laravel project
- 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
Tips
Container structures
โโโ app
โโโ web
โโโ db
app container
web container
- Base image
- nginx:1.31
db container
- Base image
- mysql:9.7
mailpit container
- Base image