Command linemediumBash

Essential Docker Commands

Daily Docker commands for container management, images, and orchestration basics.

01

The problem

You need to manage Docker containers, build images, or work with containerized applications.

02

The solution

Bash
# Container management
docker ps                         # Running containers
docker ps -a                      # All containers
docker start container_name
docker stop container_name
docker restart container_name
docker rm container_name          # Remove container
docker rm $(docker ps -aq)        # Remove all stopped containers

# Image management
docker images                     # List images
docker pull image:tag             # Pull image
docker rmi image:tag              # Remove image
docker rmi $(docker images -q)    # Remove all images
docker image prune                # Remove unused images

# Run containers
docker run -d --name myapp image:tag
docker run -it --rm image:tag bash  # Interactive, remove after exit
docker run -p 8080:80 image:tag     # Port mapping
docker run -v /host:/container image:tag  # Volume mount
docker run -e VAR=value image:tag   # Environment variable

# Build images
docker build -t myimage:tag .
docker build -f Dockerfile.prod -t myapp:prod .

# Container info and logs
docker logs container_name
docker logs -f container_name      # Follow logs
docker inspect container_name
docker stats                       # Resource usage
docker top container_name          # Processes in container

# Exec commands in running container
docker exec -it container_name bash
docker exec container_name ls -la
docker exec -u root container_name bash

# Docker Compose
docker-compose up -d
docker-compose down
docker-compose ps
docker-compose logs -f
docker-compose exec service_name bash
docker-compose build
docker-compose restart

# Networks
docker network ls
docker network create mynetwork
docker network connect mynetwork container
docker network disconnect mynetwork container
docker network inspect mynetwork

# Volumes
docker volume ls
docker volume create myvolume
docker volume rm myvolume
docker volume prune

# Cleanup
docker system df                  # Disk usage
docker system prune               # Remove unused data
docker system prune -a            # Remove all unused

# Save and load images
docker save -o image.tar image:tag
docker load -i image.tar

# Copy files
docker cp container:/path/file.txt /host/path/
docker cp /host/file.txt container:/path/

# Docker Hub
docker login
docker logout
docker push username/image:tag
docker search term

# Health check
docker run --health-cmd="curl -f http://localhost/ || exit 1"            --health-interval=30s            --health-timeout=3s            --health-retries=3            image:tag

# Resource limits
docker run --memory="512m" --cpus="1.5" image:tag
docker run --memory-swap="1g" image:tag

# Docker Swarm (basic)
docker swarm init
docker swarm join --token TOKEN MANAGER_IP:2377
docker node ls
docker service create --replicas 3 --name web nginx
docker service ls
docker service ps web

# Registry operations
docker tag local-image:tag registry.example.com/repo:tag
docker push registry.example.com/repo:tag
docker pull registry.example.com/repo:tag

03

Put it to work

Example
# Run Nginx web server
docker run -d --name webserver -p 80:80 -v ~/html:/usr/share/nginx/html nginx

# Run MySQL with persistent data
docker run -d --name mysql-db   -e MYSQL_ROOT_PASSWORD=secret   -e MYSQL_DATABASE=myapp   -v mysql_data:/var/lib/mysql   mysql:8.0

# Build and run custom app
docker build -t myapp:latest .
docker run -d -p 3000:3000 --env-file .env myapp:latest

# Docker Compose for full stack
# docker-compose.yml:
version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret

# Run: docker-compose up -d

# Clean up old containers
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

# Backup database from container
docker exec mysql-db mysqldump -u root -psecret myapp > backup.sql

# Update running service
docker pull nginx:latest
docker stop webserver && docker rm webserver
docker run -d --name webserver -p 80:80 nginx:latest

Worth knowing

Use -it for interactive sessions. --rm auto-removes container after exit. Use volumes for persistent data. docker-compose for multi-container apps. Clean up regularly to save disk space. Always use specific tags, not "latest" in production.