Skeleton for a Docker nginx / php / mysql / redis development stack. Everything in its own container!
MIT License
A collection of customized containers for a Docker web development stack. Where possible the containers are build on top of Alpine Linux for a small footprint.
.env.dist
to .env
and change at least the project id.docker compose up -d
./app
dir.Use setfacl to set permission on the host
sudo setfacl -Rm g:82:rwX,d:g:82:rwX /home/<username>/projects
Setup permissions for docker so the files can be accessed and deleted. The trick is to use the uid's from the docker processes. www-data/nginx: 82 - docker: 999 - mysql: 28
# Preserve default permissions for new files and folders
sudo setfacl -dR -m u:28:rwx -m u:82:rwx -m u:33:rwx -m u:999:rwx -m u:$(whoami):rwx data
# Set permissions
sudo setfacl -R -m u:28:rwx -m u:82:rwx -m u:33:rwx -m u:999:rwx -m u:$(whoami):rwx data
Xdebug is configured so it doesn't start automatically. You need to enable the debug listener in PhpStorm first and enable a session cookie in your Chrome or Firefox browser.
docker build . --file Dockerfile --tag dev
docker run --rm -it tag
Start containers
docker compose up -d
Start and force rebuilding the containers
docker compose up --build
Stop containers
docker compose stop
Update containers
docker compose pull
Stream logs from all containers to the console
docker compose logs -t -f
Start a terminal for <container_name>
# With docker compose
docker compose run --rm php /bin/bash # Ubuntu/Debian based
docker compose run --rm php /bin/sh # Alpine Linux based
# With docker
docker exec -ti <container_name> /bin/bash # Ubuntu/Debian based
docker exec -ti <container_name> /bin/sh # Alpine Linux based
Stats for running containers
docker stats -a
Show used space, similar to the unix tool df
docker system df
Remove development junk: unused volumes, networks, exited containers and unused images
docker system prune --force --all
List all images
docker images
List containers
docker ps
Force stop all containers in PowerShell
docker ps -a -q | ForEach { docker stop $_ }