Docker cơ bản: Hướng dẫn từ A đến Z cho người mới bắt đầu
Mục lục bài viết
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.
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.
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.
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.
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 copynode_modules,.envvà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.
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.