I recently started building a side project and decided to use Docker Compose to manage my containers. While working on it, I noticed that there are quite a few commands I keep reaching for—and I wanted to have them written down somewhere.

In my day-to-day (9–5) work, I don’t use Docker extensively beyond the basic up and down commands, so some of the more advanced or less frequent commands tend to get rusty over time. That is a very normal place to end up, and it’s the argument for not memorising Docker commands at all and building a workflow you can look things up in instead.

While refreshing my Docker and Docker Compose knowledge, I decided to collect all the commands I actually use and put them into one place. Think of this post as a personal cheat sheet—useful for quick debugging, reminders, or getting unstuck when something isn’t behaving as expected. Hopefully, it helps you too. 😊

Docker Compose Commands#

Docker Compose allows you to define and run multi-container applications using a single configuration file, making local development and orchestration much easier.. These are the commands I use most.

Starting Services#

These commands are used to start one or more services defined in your docker-compose.yml file, either in the foreground or background.

Start all services defined in docker-compose.yml:

docker compose up

Start in background (detached mode) – you get your terminal back:

docker compose up -d

Start services and force a rebuild of images (useful after changing a Dockerfile or dependencies):

docker compose up --build

Start specific service only:

docker compose up -d service-a

or start multiple services at once:

docker compose up -d service-a service-b

Stopping Services#

Use these commands to stop running containers, with options to either keep or completely remove them.

Stop all services (containers are stopped but not removed):

docker compose stop

Stop and remove containers (this is what you usually want):

docker compose down

Stop, remove containers and volumes ⚠️ Warning: This deletes persisted data such as databases.

docker compose down -v

Stop specific service:

docker compose stop service-a

Restarting Services#

Restarting services is useful after configuration changes or when a container becomes unresponsive.

Restart all services:

docker compose restart

Restart specific service:

docker compose restart service-a

For Node.js apps, you might also want file-watching inside your container using Node’s built-in --watch flag.

Viewing statuses#

These commands help you quickly check which services are running and their current state.

List running containers for this project:

docker compose ps

List all containers (including stopped):

docker compose ps -a

Docker commands#

In addition to Docker Compose, these core Docker commands are useful for inspecting and interacting with individual containers.

Executing Commands in Containers#

These commands let you access a running container directly, which is especially helpful for debugging and inspecting the runtime environment.

Using an interactive shell:

docker exec -it container_name bash

If bash is not available (for example, in Alpine images), use sh instead:

docker exec -it container_name sh

These commands let you enter a running container with an interactive shell, so you can inspect files, run commands, and debug things directly from inside the container.

Cleanup commands#

Docker can accumulate unused containers, images, and volumes over time—these commands help keep your system clean.

Remove stopped containers, images or volumes:

docker container prune

docker image prune

docker volume prune

or in case you need something more generic

docker system prune --volumes

which removes all unused resources, including volumes.

Removing Containers by Name Prefix#

While setting up my project, I found some containers from old projects that i had probably forgotten to cleanup. Instead of removing them one by one, because they were a lot, I tried to find a command that removes all of them, by using their prefix (needless to say they were sharing the same prefix). The following command removed all containers with the prefix si:

docker rm -f $(docker ps -aq --filter "name=si_")

Viewing Logs#

Logs are often the first place to look when something isn’t working. These commands help you inspect service output, debug errors, and monitor behavior in real time.

docker compose logs
docker compose logs -f service-a # -f keeps streaming logs in real time
docker compose logs --tail=100 # Only the last 100 log lines

So if you wanted to see logs for a specific container, in real time you could use

docker compose logs -f --tail=100 <container-name>

Copy Files From Container#

docker cp container_name:/path/in/container ./local-path

docker-compose vs docker compose#

You may see Docker Compose used in two different ways:

  • docker-compose
  • docker compose

They do the same thing, but they’re not the same tool.

docker-compose (Legacy)#

  • Older, standalone CLI
  • Installed separately
  • Common in older projects and tutorials
docker-compose up -d
  • Built into the Docker CLI
  • Installed by default with modern Docker
  • Actively maintained and recommended
docker compose up -d

Which One Should You Use?#

Existing projects: stick with whatever the project already uses

New projects: use docker compose

Setting up a new project? You might also want to automate git hooks, check our husky hooks intro guide to learn how.

Quick Reference Card#

This section provides a compact overview of the most commonly used Docker and Docker Compose commands for quick access.

╔═══════════════════════════════════════════════════════════════╗
║                 DOCKER COMMANDS QUICK REFERENCE               ║
╠═══════════════════════════════════════════════════════════════╣
║ COMPOSE                                                       ║
║   docker compose up -d          Start in background           ║
║   docker compose down           Stop and remove               ║
║   docker compose logs -f api    Follow service logs           ║
║   docker compose up --build     Rebuild and start             ║
║   docker compose exec api sh    Shell into service            ║
╠═══════════════════════════════════════════════════════════════╣
║ CONTAINERS                                                    ║
║   docker ps                     List running                  ║
║   docker ps -a                  List all                      ║
║   docker stop name              Stop container                ║
║   docker rm -f name             Force remove                  ║
║   docker exec -it name sh       Shell into container          ║
╠═══════════════════════════════════════════════════════════════╣
║ IMAGES                                                        ║
║   docker images                 List images                   ║
║   docker rmi name               Remove image                  ║
║   docker build -t name .        Build image                   ║
║   docker pull name:tag          Pull from registry            ║
╠═══════════════════════════════════════════════════════════════╣
║ LOGS & DEBUG                                                  ║
║   docker logs -f name           Follow logs                   ║
║   docker logs --tail 100 name   Last 100 lines                ║
║   docker inspect name           Full container info           ║
║   docker stats                  Resource usage                ║
╠═══════════════════════════════════════════════════════════════╣
║ CLEANUP                                                       ║
║   docker system prune           Remove unused                 ║
║   docker system prune -a        Remove all unused             ║
║   docker volume prune           Remove unused volumes         ║
║   docker system df              Check disk usage              ║
╚═══════════════════════════════════════════════════════════════╝
```

Do you have any Docker or Docker Compose commands that have saved you in tricky situations, or ones you use every day? Feel free to share them—we’d love to expand this cheat sheet with more real-world examples.

Keep reading#