Common commands for building, running, inspecting, and operating a development workflow inside Docker containers.
Quick Start
# Build an image from the current directory.
docker build -t my-app:dev .
# Run an interactive shell in a new container.
docker run --rm -it my-app:dev sh
# Run the app and publish a port.
docker run --rm -it -p 3000:3000 my-app:dev
# Mount the current project into the container.
docker run --rm -it -v "$PWD:/app" -w /app my-app:dev shImages
# List local images.
docker images
# Build without using cache.
docker build --no-cache -t my-app:dev .
# Remove an image.
docker rmi my-app:dev
# Remove unused images.
docker image pruneContainers
# List running containers.
docker ps
# List all containers, including stopped ones.
docker ps -a
# Stop a container.
docker stop <container>
# Remove a stopped container.
docker rm <container>
# Stop and remove a running container.
docker rm -f <container>Running Dev Commands
# Run a one-off command.
docker run --rm my-app:dev npm test
# Run a shell with the project mounted.
docker run --rm -it -v "$PWD:/app" -w /app my-app:dev bash
# Run as your host user to avoid root-owned files.
docker run --rm -it \
-u "$(id -u):$(id -g)" \
-v "$PWD:/app" \
-w /app \
my-app:dev sh
# Pass environment variables.
docker run --rm -it -e NODE_ENV=development my-app:dev
# Load environment variables from a file.
docker run --rm -it --env-file .env my-app:devLogs And Debugging
# Show logs for a container.
docker logs <container>
# Follow logs.docker logs -f <container>
# Open a shell in a running container.
docker exec -it <container> sh
# Inspect container configuration.
docker inspect <container>
# Show live container resource usage.
docker statsVolumes
# List volumes.
docker volume ls
# Create a named volume.
docker volume create my-app-data
# Use a named volume.
docker run --rm -it -v my-app-data:/data my-app:dev
# Remove unused volumes.
docker volume pruneNetworks
# List networks.
docker network ls
# Create a network.
docker network create my-dev-network
# Run a container on a network.
docker run --rm -it --network my-dev-network my-app:devDocker Compose
# Start services.
docker compose up
# Start services in the background.
docker compose up -d
# Rebuild and start services.
docker compose up --build
# Stop services.
docker compose down
# Stop services and remove volumes.
docker compose down -v
# View running Compose services.
docker compose ps
# Follow service logs.
docker compose logs -f
# Follow logs for one service.
docker compose logs -f <service>
# Run a one-off command in a service container.
docker compose run --rm <service> npm test
# Open a shell in a running service container.
docker compose exec <service> shTypical Development Loop
# 1. Build or rebuild the dev image.
docker compose build
# 2. Start the app and dependencies.
docker compose up
# 3. Run tests in the app service.
docker compose run --rm <service> npm test
# 4. Open a shell when something needs debugging.
docker compose exec <service> sh
# 5. Stop everything when finished.
docker compose downCleanup
# Remove stopped containers, unused networks, dangling images, and build cache.
docker system prune
# Remove unused images too.
docker system prune -a
# Remove unused volumes.
docker volume prune
# Show disk usage by Docker objects.
docker system dfUseful Patterns
# Name a container so it is easier to reference.
docker run --name my-app-dev --rm -it my-app:dev
# Keep STDIN open and allocate a terminal.
docker run -it my-app:dev sh
# Automatically delete the container after it exits.
docker run --rm my-app:dev
# Publish host port 8080 to container port 3000.
docker run -p 8080:3000 my-app:dev
# Mount a read-only project directory.
docker run --rm -it -v "$PWD:/app:ro" -w /app my-app:dev sh
# Copy a file from a container to the host.
docker cp <container>:/path/in/container ./local-path
# Copy a file from the host to a container.
docker cp ./local-path <container>:/path/in/containerPlaceholders
<container>: container name or ID fromdocker ps.<service>: service name fromdocker compose psordocker-compose.yml.my-app:dev: local image name and tag.3000:3000: host port to container port mapping.