🐳 Build a simple laravel development environment with Docker Compose.
docker-laravel 🐳
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
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 COMPOSEDOCKERCLI_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/DBCONNECTION=.*/DBCONNECTION=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
http://localhost
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/DBCONNECTION=.*/DBCONNECTION=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
http://localhost
Tips
Container structures
├── app
├── web
└── db
app container
- Base image
web container
- Base image
db container
- Base image
mailpit container
- Base image