DocsDocker Basics

🐳 Docker Fundamentals

Learn the basics of Docker containerization and how to use it effectively for development and deployment.

What is Docker?

Docker is a platform that uses OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries, and configuration files.

Installation

Ubuntu/Debian

# Remove old versions
sudo apt remove docker docker-engine docker.io containerd runc
 
# Install prerequisites
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
 
# Add Docker's official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 
# Set up repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# Install Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
 
# Add user to docker group
sudo usermod -aG docker $USER

Essential Commands

Container Management

# Run a container
docker run -d --name myapp -p 8080:80 nginx
 
# List running containers
docker ps
 
# List all containers
docker ps -a
 
# Stop a container
docker stop myapp
 
# Remove a container
docker rm myapp
 
# View container logs
docker logs myapp
 
# Execute command in container
docker exec -it myapp bash

Image Management

# Pull an image
docker pull nginx:latest
 
# List images
docker images
 
# Remove an image
docker rmi nginx:latest
 
# Build an image
docker build -t myapp:v1 .

Dockerfile Example

Create a simple Node.js application Dockerfile:

# Use official Node.js image
FROM node:18-alpine
 
# Set working directory
WORKDIR /app
 
# Copy package files
COPY package*.json ./
 
# Install dependencies
RUN npm ci --only=production
 
# Copy application code
COPY . .
 
# Expose port
EXPOSE 3000
 
# Start application
CMD ["node", "server.js"]

Docker Compose

For multi-container applications, use Docker Compose:

# docker-compose.yml
version: "3.8"
 
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://db:5432/myapp
    depends_on:
      - db
    restart: unless-stopped
 
  db:
    image: postgres:15-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=secret
    restart: unless-stopped
 
volumes:
  postgres_data:

Compose Commands

# Start services
docker compose up -d
 
# View logs
docker compose logs -f
 
# Stop services
docker compose down
 
# Stop and remove volumes
docker compose down -v

Best Practices

  1. Use multi-stage builds to reduce image size
  2. Don’t run as root inside containers
  3. Use .dockerignore to exclude unnecessary files
  4. Tag images properly with semantic versions
  5. Scan images for vulnerabilities using docker scout

💡 Tip: Use docker system prune regularly to clean up unused images and containers.


Next: Kubernetes Basics