Docker và Docker Compose cho developer

Tổng quan về Containerization

Containerization đã thay đổi hoàn toàn cách chúng ta phát triển, kiểm thử và vận hành ứng dụng. Khác với máy ảo (Virtual Machine) vốn đòi hỏi cả một hệ điều hành khách (Guest OS) chạy trên hypervisor, container chia sẻ chung kernel của hệ điều hành host. Điều này giúp container khởi động trong tích tắc và tiêu tốn cực kỳ ít tài nguyên (chỉ vài megabyte RAM thay vì hàng gigabyte).

Kiến trúc tổng quan của nền tảng Docker được minh họa qua sơ đồ dưới đây:

Docker Containerization Architecture

Dockerfile và các chỉ lệnh cơ bản

Một Dockerfile là một tập hợp các chỉ dẫn từng bước để Docker Engine tự động hóa việc xây dựng (build) nên một Docker Image. Dưới đây là một Dockerfile mẫu cho ứng dụng Node.js được viết theo đúng quy chuẩn:

FROM node:20-alpine
WORKDIR /app

# Sao chép package.json trước để tận dụng layer caching của Docker
COPY package*.json ./
RUN npm ci --omit=dev

# Sao chép toàn bộ mã nguồn
COPY . .

# Expose port chạy ứng dụng
EXPOSE 3000

# Khởi chạy dịch vụ
CMD ["node", "src/index.js"]

Docker Compose: Phối hợp đa dịch vụ

Khi ứng dụng của bạn lớn lên, nó thường bao gồm nhiều thành phần khác nhau: Web API, Database, Cache, Queue... Việc quản lý từng container bằng các lệnh docker run thủ công sẽ trở nên bất khả thi. Docker Compose giải quyết vấn đề này bằng cách định nghĩa toàn bộ hạ tầng trong một file docker-compose.yml duy nhất.

version: "3.8"
services:
  web:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://db_user:db_pass@db:5432/my_db
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    volumes:
      - pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=db_user
      - POSTGRES_PASSWORD=db_pass
      - POSTGRES_DB=my_db

volumes:
  pg_data:

Bình luận (0)

Đang tải bình luận...