Docker Container Operations

This chapter covers the complete Docker container workflow, including creating, starting, stopping, deleting, monitoring, and managing containers.

Container Lifecycle

    docker create         docker start         docker pause
  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
  │   Created    │───►│   Running    │───►│   Paused     │
  └──────────────┘    └──────┬───────┘    └──────┬───────┘
                             │                    │
                             │ docker stop        │ docker unpause
                             ▼                    ▼
                      ┌──────────────┐    ┌──────────────┐
                      │   Stopped    │    │   Running    │
                      └──────┬───────┘    └──────────────┘
                             │ docker rm

                      ┌──────────────┐
                      │   Removed    │
                      └──────────────┘

Creating and Running Containers

docker run Basics

# Simplest form
docker run nginx

# Run in background (detached mode)
docker run -d nginx

# Name the container
docker run -d --name my-nginx nginx

# Port mapping (host:container)
docker run -d -p 8080:80 --name my-nginx nginx

# Interactive mode
docker run -it ubuntu:22.04 /bin/bash

Common run Parameters

ParameterDescriptionExample
-dRun in backgrounddocker run -d nginx
-pPort mapping-p 8080:80
-vVolume mount-v /host/path:/container/path
-eEnvironment variable-e MYSQL_ROOT_PASSWORD=123456
--nameContainer name--name my-app
--rmAuto-remove on exitdocker run --rm nginx
--restartRestart policy--restart=always
-mMemory limit-m 512m
--cpusCPU limit--cpus 2
--networkSpecify network--network my-net

Container Management

Listing Containers

docker ps                    # Running containers
docker ps -a                 # All containers
docker ps -q                 # Only IDs
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
docker ps -f "status=running"

Start, Stop, and Restart

docker start my-nginx        # Start stopped container
docker stop my-nginx         # Graceful stop (SIGTERM, then SIGKILL after 10s)
docker kill my-nginx         # Force stop immediately
docker restart my-nginx      # Restart
docker pause my-nginx        # Freeze processes
docker unpause my-nginx      # Resume

Removing Containers

docker rm my-nginx           # Remove stopped container
docker rm -f my-nginx        # Force remove running container
docker container prune       # Remove all stopped containers
docker rm -f $(docker ps -aq)  # Remove all containers

Container Interaction

Entering a Running Container

docker exec -it my-nginx /bin/bash    # Using bash
docker exec -it my-nginx /bin/sh      # Using sh
docker exec -it -u root my-nginx bash # As root
docker exec my-nginx cat /etc/nginx/nginx.conf  # Single command

Viewing Logs

docker logs my-nginx              # All logs
docker logs -f my-nginx           # Follow logs
docker logs --tail 100 my-nginx   # Last 100 lines
docker logs -t my-nginx           # With timestamps

Container Details

docker inspect my-nginx
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx
docker port my-nginx

Resource Monitoring

docker stats                 # Real-time resource usage
docker stats my-nginx        # Specific container
docker top my-nginx          # Container processes

File Transfer

docker cp ./index.html my-nginx:/usr/share/nginx/html/   # Host → Container
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf     # Container → Host

Restart Policies

PolicyDescription
noDefault, no auto-restart
on-failure[:max]Restart on non-zero exit, optional max retries
alwaysAlways restart
unless-stoppedAlways restart unless manually stopped
docker run -d --restart=always --name my-nginx nginx
docker update --restart=unless-stopped my-nginx

Useful Tips

Batch Operations

docker stop $(docker ps -q)          # Stop all running
docker container prune -f            # Remove all stopped
docker rm -f $(docker ps -aq)        # Remove all

Resource Limits

docker run -d -m 256m --cpus 0.5 --name limited-nginx nginx
docker update -m 512m --cpus 1 limited-nginx

Chapter Summary

Mastering container operations is fundamental to using Docker. The key commands are docker run, docker exec, docker logs, and docker stats.

Further Reading