Back to List
🐳DevOps60 minBeginner

Docker Container Deployment Masterclass

Master Docker from basics to production-ready containers. Learn containerization, image optimization, and deployment strategies.

# Docker Container Deployment Masterclass

## Why Docker?
Docker simplifies deployment by packaging applications with all their dependencies. This eliminates the "it works on my machine" problem and enables consistent deployments across environments.

## Getting Started

### Installation
```bash
# macOS
brew install docker

# Linux (Ubuntu)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Verify
docker --version
docker-compose --version
```

## Core Concepts

### Images
Images are read-only templates used to create containers.

```bash
# Pull an image
docker pull nginx:latest

# List images
docker images

# Build from Dockerfile
docker build -t myapp:1.0 .
```

### Containers
Containers are running instances of images.

```bash
# Run a container
docker run -d -p 8080:80 nginx:latest

# List running containers
docker ps

# Stop a container
docker stop <container_id>
```

## Docker Compose

### docker-compose.yml
```yaml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    volumes:
      - ./data:/app/data
    restart: unless-stopped

  database:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:
```

### Common Commands
```bash
# Start all services
docker-compose up -d

# View logs
docker-compose logs -f

# Stop all services
docker-compose down
```

## Best Practices

### 1. Use Multi-Stage Builds
```dockerfile
# Build stage
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Production stage
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
CMD ["node", "dist/index.js"]
```

### 2. Never Run as Root
```dockerfile
RUN addgroup -g 1001 appgroup && \
    adduser -u 1001 -G appgroup -s /bin/sh -D appuser
USER appuser
```

### 3. Use .dockerignore
```
node_modules
npm-debug.log
.git
.env
```

## Production Deployment

### Docker Swarm
```bash
# Initialize swarm
docker swarm init

# Deploy stack
docker stack deploy -c docker-compose.yml myapp

# Scale service
docker service scale myapp_web=5
```

### Security Scanning
```bash
# Scan for vulnerabilities
docker scan myapp:1.0
```

💬 Comments are not configured

Please set NEXT_PUBLIC_WALINE_SERVER_URL environment variable