blogbuituantuBùi Tuấn Tú

Học Docker trong 7 ngày

10 tháng 9, 2024

Vì sao nên học Docker?

Docker giúp bạn đóng gói ứng dụng cùng toàn bộ môi trường, bảo đảm chạy giống nhau từ máy dev tới production. Khi làm việc nhóm, chỉ cần gửi một câu lệnh docker compose up, tất cả cùng chung nền tảng.

Lộ trình 7 ngày

NgàyChủ đềGhi chú
1Khái niệm Container & ImagesSo sánh với VM, giải thích layered filesystem
2Docker CLI cơ bảndocker run, docker ps, docker logs, volume
3Tạo DockerfileViết Dockerfile cho ứng dụng Node.js đơn giản
4Docker ComposeDựng ứng dụng gồm web + database
5Debug & tối ưuMulti-stage build, slim images, lint Dockerfile
6Triển khaiĐưa image lên Docker Hub & chạy trên VPS
7AutomationKết hợp CI/CD (GitHub Actions) để build & push tự động

Viết Dockerfile đầu tiên

dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
CMD ["npm", "start"]

Docker Compose và database

yaml
version: "3.9"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://postgres:postgres@db:5432/app
    depends_on:
      - db
 
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: app
    volumes:
      - db-data:/var/lib/postgresql/data
 
volumes:
  db-data:

Tips tối ưu Image

  1. Multi-stage build: dùng một stage để build, stage khác để runtime.
  2. .dockerignore: tránh copy node_modules hoặc file log.
  3. Scan bảo mật: kết hợp docker scout hoặc Trivy vào CI/CD.

Thử sức với bài tập nhỏ

  1. Đóng gói ứng dụng Next.js với Dockerfile multi-stage.
  2. Dùng Compose để chạy web + Redis cache + pgvector.
  3. Tạo workflow GitHub Actions: build image, push, deploy lên server.

Chỉ cần áp dụng lộ trình trên, sau một tuần bạn đã tự tin đưa sản phẩm lên mọi môi trường với Docker!