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