Docker cơ bản: Hướng dẫn từ A đến Z cho người mới bắt đầu

✍️ Trần Minh Trí (Chuyên gia AI & Lập trình)
⏱️ 8 phút đọcBeginner
#docker #container #devops #lap trinh #huong dan
Docker cơ bản: Hướng dẫn từ A đến Z cho người mới bắt đầu

1. Docker là gì và tại sao lập trình viên nào cũng nên biết?

Docker là nền tảng ảo hóa nhẹ (containerization) giúp đóng gói ứng dụng và tất cả dependencies vào một container duy nhất.

Câu hỏi "Có chạy được trên máy tôi không?" là câu hỏi kinh điển mà Docker giải quyết triệt để. Với Docker, ứng dụng chạy giống hệt nhau trên máy lập trình viên, server staging, và production.

Lợi ích chính:

  • Nhất quán: Môi trường giống nhau trên mọi máy.
  • Nhẹ: Container chỉ nặng MB, không phải GB như VM.
  • Cô lập: Mỗi container có filesystem, network, process riêng.
  • Nhanh: Khởi động container trong vài giây.
  • Tái sử dụng: Image có thể dùng lại, chia sẻ qua Docker Hub.
📝NOTE
Container != Máy ảo (VM). VM ảo hóa cả hệ điều hành (nặng GB), container chỉ ảo hóa ứng dụng (nhẹ MB).

2. Các khái niệm cốt lõi

Image (Ảnh): Bản snapshot chứa mã nguồn, thư viện, cấu hình: giống như file ISO. Image là template để tạo container.

Container: Một instance chạy từ image. Bạn có thể start, stop, delete container.

Dockerfile: File text chứa hướng dẫn để build image.

Ví dụ: FROM node:20, WORKDIR /app, COPY package*.json./, RUN npm install, COPY.., CMD ["npm", "start"]

Docker Hub: Registry công cộng chứa hàng triệu image Docker.

💡TIP
Image nào cũng được xây dựng từ image khác (FROM). Image node:20 dựa trên Debian Linux.

3. Cài đặt Docker và chạy container đầu tiên

Cài đặt:

  • Windows/Mac: Tải Docker Desktop từ docker.com.
  • Linux: curl -fsSL https://get.docker.com | sh

Kiểm tra:

docker --version

docker run hello-world

Chạy container web server:

docker run -d -p 8080:80 --name my-nginx nginx

  • -d: chạy nền (detached).
  • -p 8080:80: map port 8080 máy host vào port 80 container.

Truy cập http://localhost:8080 để xem trang mặc định của Nginx.

Lệnh cơ bản:

  • docker ps: xem container đang chạy.
  • docker stop my-nginx: dừng container.
  • docker rm my-nginx: xóa container.
  • docker images: xem danh sách image.
  • docker pull node: tải image từ Docker Hub.
⚠️WARNING
Lệnh docker rm -f $(docker ps -aq) xóa TẤT CẢ container. Cực kỳ nguy hiểm nếu chạy trên server production!

4. Docker Compose: Chạy nhiều container cùng lúc

Docker Compose cho phép định nghĩa và chạy nhiều container cùng lúc bằng một file YAML.

Ví dụ docker-compose.yml cho web app + database:

```yaml

web:

build:.

ports:

- "3000:3000"

depends_on:

- db

db:

image: postgres:16

environment:

POSTGRES_PASSWORD: secret

```

Chạy: docker compose up -d

Lệnh này build image web, tải PostgreSQL image, tạo network riêng cho hai container, và chạy cả hai.

💡TIP
Docker Compose là công cụ quan trọng nhất cho local development. Hãy bắt đầu với Compose.

5. Docker trong CI/CD và Production

CI/CD: Docker đảm bảo môi trường test giống hệt môi trường production.

(1) Build image từ Dockerfile.

(2) Push image lên container registry.

(3) Deploy image lên server.

Ví dụ GitHub Actions: docker build -t myapp:${{ github.sha }}.

docker push ghcr.io/myorg/myapp:${{ github.sha }}

Production: Container orchestration dùng Kubernetes (K8s). Docker Swarm cho quy mô nhỏ.

Best practices:

  • Dùng .dockerignore để tránh copy node_modules, .env vào image.
  • Multi-stage build: một image để build, image khác (nhẹ hơn) để chạy.
  • Chạy container với non-root user.
  • Dùng healthcheck để Docker tự động restart container khi lỗi.
IMPORTANT
Production Docker cần kiến thức về security: quét image lỗ hổng (docker scout), quản lý secret, network policy.

🙋 Câu hỏi thường gặp

Docker có cần thiết cho lập trình viên frontend không?

Có. Docker giúp chạy full-stack app local (frontend + backend + database) mà không cần cài từng thứ riêng lẻ. Nhiều công ty dùng Docker cho development và CI/CD.

Docker Desktop có miễn phí không?

Docker Desktop miễn phí cho cá nhân, giáo dục và open-source. Doanh nghiệp trên 250 nhân viên cần mua license ($5/user/tháng).

Làm sao để tối ưu dung lượng Docker image?

Dùng Alpine Linux (nhẹ 5MB), multi-stage builds, .dockerignore, xóa cache apt/npm sau khi cài. Image có thể giảm từ 1GB xuống 100-200MB.


Kiến thức liên quan