blog.dopana

Back

Docker đã thay đổi cách chúng ta phát triển và triển khai phần mềm. “Chạy được trên máy tôi” không còn là câu nói cửa miệng nữa — nếu nó chạy trong container, nó chạy ở mọi nơi.

Docker Là Gì?#

Docker là nền tảng container hóa. Khác với VM (máy ảo), container dùng chung kernel host, không cần guest OS riêng:

VMContainer
Kích thướcGBMB
Khởi độngPhútGiây
Tài nguyênNhiềuNhẹ
Cô lậpKernel riêng (mạnh)Chia sẻ kernel (đủ)

Dockerfile — Công Thức Tạo Container#

FROM node:20-alpine

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci --production

COPY . .

EXPOSE 3000

CMD ["node", "dist/index.js"]
dockerfile

Multi-stage Build — Tối Ưu Kích Thước#

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

# Stage 2: Production
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]
dockerfile

Container cuối chỉ chứa đúng những gì cần chạy — thường nhỏ hơn 5 lần so với không dùng multi-stage.

Docker Compose — Môi Trường Dev Hoàn Chỉnh#

Chạy cả stack với một lệnh:

docker compose up -d
docker compose logs -f
docker compose down
bash

Docker CLI — Lệnh Cần Nhớ#

Docker Cho CI/CD#

# .github/workflows/deploy.yml
jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t myapp:${{ github.sha }} .
      - run: docker push registry.example.com/myapp:${{ github.sha }}
yaml

Docker Compose Cho Production#

Dùng Docker Compose cũng được, nhưng production nên dùng orchestration:

Công cụKhi nào dùng
Docker Compose1 server, stack đơn giản
Docker SwarmNhiều server, tích hợp sẵn
KubernetesScale lớn, yêu cầu phức tạp

Mẹo Hay#

.dockerignore#

node_modules
.git
.env
*.md
dist
text

Giảm Số Layer#

# Tệ — mỗi RUN tạo một layer
RUN apt-get update
RUN apt-get install -y curl
RUN rm -rf /var/lib/apt/lists/*

# Tốt — gộp lại
RUN apt-get update && \
    apt-get install -y curl && \
    rm -rf /var/lib/apt/lists/*
dockerfile

Không Chạy Container Bằng Root#

RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
dockerfile

Kết Luận#

Docker không còn là “option” — nó là tiêu chuẩn. Dù bạn làm fullstack, backend, hay DevOps, biết Docker giúp bạn:

  • Chuẩn hóa môi trường dev
  • Deploy nhất quán
  • Scale dễ dàng
  • Hợp tác với team dễ hơn

Hãy bắt đầu: docker init (Docker mới có lệnh này) hoặc tự viết Dockerfile đầu tiên cho project hiện tại của bạn.

Tài liệu tham khảo#