📖 Docker & DevOps
65 phút

Docker Containerization

Giới thiệu Docker

Docker là platform để phát triển, vận chuyển và chạy ứng dụng trong containers.

Docker Basics

Dockerfile

# Base image
FROM node:18-alpine

# Set working directory
WORKDIR /app

# Copy package files
COPY package*.json ./

# Install dependencies
RUN npm ci --only=production

# Copy source code
COPY . .

# Expose port
EXPOSE 3000

# Start application
CMD ["node", "server.js"]

Build Docker Image

# Build image
docker build -t my-app:1.0 .

# List images
docker images

# Run container
docker run -d -p 3000:3000 --name my-app-container my-app:1.0

Docker Commands

Container Management

# List running containers
docker ps

# List all containers
docker ps -a

# Stop container
docker stop my-app-container

# Remove container
docker rm my-app-container

# View logs
docker logs my-app-container

Image Management

# Remove image
docker rmi my-app:1.0

# Pull image from registry
docker pull nginx:latest

# Tag image
docker tag my-app:1.0 my-registry.com/my-app:1.0

# Push to registry
docker push my-registry.com/my-app:1.0

Docker Compose

docker-compose.yml

version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
    volumes:
      - ./logs:/app/logs

  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:

Docker Compose Commands

# Start services
docker-compose up -d

# Stop services
docker-compose down

# View logs
docker-compose logs -f

# Scale services
docker-compose up -d --scale app=3

Multi-stage Builds

# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

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

Best Practices

Security

# Use non-root user
FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
USER nextjs

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

Optimization

# Use specific version tags
FROM node:18-alpine

# Leverage build cache
COPY package*.json ./
RUN npm ci

# Copy source code after dependencies
COPY . .

# Use multi-stage builds
# Minimize layer size

Bài tập thực hành

Hãy dockerize một ứng dụng Node.js đơn giản!

📝 Bài tập (2)

  1. Tạo Dockerfile và docker-compose cho ứng dụng Node.js

  2. Tạo multi-service application với load balancer

Khóa học "Docker & DevOps"