Docker Cheatsheet

What is Docker Docker Architecture Docker vs Virtual Machines Docker Engine & Daemon Docker CLI Basics Docker Images Docker Containers Dockerfile Building Images Image Layers Docker Hub & Repos Volumes Networks Compose Basics docker-compose.yml Multi-Container Apps Environment Variables Exposing Ports Logs & Monitoring Exec & Attach Managing Containers System Prune & Cleanup Copying Files Build Context Entrypoint vs CMD Dockerfile Best Practices Docker Swarm K8s vs Swarm Security Best Practices Common Commands

What is Docker?

Intro

Docker is an open-source platform for automating the deployment, scaling, and management of applications using containerization. Containers package code, dependencies, and environment into a single, portable unit.

Docker Architecture

Architecture

Docker vs Virtual Machines

Comparison
Feature Docker Virtual Machines
SizeSmall (MBs)Large (GBs)
Startup TimeSecondsMinutes
Resource UsageLowHigh
IsolationProcess levelHardware level

Docker Engine & Daemon

Engine
# Check daemon status
sudo systemctl status docker
# Restart daemon
sudo systemctl restart docker

Docker CLI Basics

CLI
# Check Docker version
docker --version
# List running containers
docker ps
# List all containers
docker ps -a

Docker Images

Images
# Pull an image
docker pull nginx
# List images
docker images
# Remove an image
docker rmi nginx

Docker Containers

Containers
# Run a container
docker run -d nginx
# Stop a container
docker stop mycontainer
# Remove a container
docker rm mycontainer

Dockerfile (Syntax & Commands)

Dockerfile
# Example Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Building Docker Images

Build
# Build an image
docker build -t myapp:latest .
# Build with specific tag
docker build -t myapp:v1.0 .
# Build from specific Dockerfile
docker build -f Dockerfile.prod -t myapp:prod .

Docker Image Layers

Layers
# Good: Dependencies first
COPY package*.json ./
RUN npm install
COPY . .

# Bad: Changes frequently first
COPY . .
RUN npm install

Docker Hub & Repositories

Hub
# Pull from Docker Hub
docker pull nginx:latest
# Push to Docker Hub
docker push myusername/myapp:latest
# Search images
docker search python

Docker Volumes (Data Persistence)

Volumes
# Create a volume
docker volume create mydata
# Run container with volume
docker run -v mydata:/data ubuntu
# List volumes
docker volume ls

Docker Networks

Networks
# List networks
docker network ls
# Create a network
docker network create mynet
# Run container on network
docker run --network mynet nginx

Docker Compose Basics

Compose
# Start services
docker-compose up -d
# Stop services
docker-compose down

docker-compose.yml Syntax

YAML
version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

Multi-Container Applications

Multi-Container
services:
  app:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: redis:alpine

Environment Variables in Docker

Env
# Set env variable
docker run -e MY_VAR=value ubuntu env
# In docker-compose.yml:
# environment:
#   - MY_VAR=value

Exposing Ports & Port Binding

Ports
# Expose port 8080 on host to 80 in container
docker run -p 8080:80 nginx
# In docker-compose.yml:
# ports:
#   - "8080:80"

Docker Logs & Monitoring

Logs
# View logs
docker logs mycontainer
# Follow logs
docker logs -f mycontainer
# Monitor resource usage
docker stats

Docker Exec & Attach

Exec
# Run a shell in a running container
docker exec -it mycontainer /bin/bash
# Attach to container's main process
docker attach mycontainer

Managing Containers (Start, Stop, Remove)

Manage
docker start mycontainer
docker stop mycontainer
docker restart mycontainer
docker rm mycontainer
docker container prune

Docker System Prune & Cleanup

Cleanup
# Remove all unused data
docker system prune -a
# Remove unused volumes
docker volume prune

Copying Files (docker cp)

Copy
# Copy file from container to host
docker cp mycontainer:/path/in/container/file.txt ./file.txt
# Copy file from host to container
docker cp ./file.txt mycontainer:/path/in/container/file.txt

Docker Build Context

Context
# Build context is current directory
docker build -t myapp .
# Exclude files in .dockerignore
cat .dockerignore
node_modules
.git

Entrypoint vs CMD

Entrypoint/CMD
# Example
ENTRYPOINT ["python"]
CMD ["app.py"]
# docker run myimage script.py (runs: python script.py)

Dockerfile Best Practices

Best Practices
# Multi-stage build example
FROM node:18-alpine as build
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

Docker Swarm (Intro)

Swarm
# Initialize swarm
docker swarm init
# Deploy a service
docker service create --name web -p 80:80 nginx
# List nodes
docker node ls

Kubernetes vs Docker Swarm

K8s vs Swarm
FeatureKubernetesSwarm
SetupComplexSimple
ScalingAdvancedBasic
CommunityLargeSmaller

Security Best Practices

Security
# Scan image for vulnerabilities
docker scan myimage
# Run as non-root user in Dockerfile
USER node

Common Docker Commands

Commands
docker ps
docker images
docker run -d nginx
docker stop mycontainer
docker rm mycontainer
docker rmi nginx:latest
docker exec -it mycontainer bash
docker logs mycontainer