Docker là gì?
Bạn đã bao giờ gặp tình huống: code chạy ngon trên máy mình nhưng khi lên máy đồng nghiệp hoặc server lại bị lỗi? Đây là vấn đề kinh điển trong phát triển phần mềm — và Docker ra đời để giải quyết chính xác vấn đề này.
Docker là nền tảng cho phép bạn đóng gói ứng dụng cùng toàn bộ môi trường cần thiết (thư viện, cấu hình, dependencies) vào một container. Container này có thể chạy giống hệt nhau trên bất kỳ máy nào — máy Windows, macOS, Linux, hay server cloud.
Docker được tạo ra năm 2013 và hiện đã trở thành công cụ tiêu chuẩn trong ngành DevOps và phát triển phần mềm hiện đại.
Container vs Virtual Machine
Nhiều người nhầm lẫn Docker container với Virtual Machine (VM). Đây là điểm khác biệt quan trọng:
- Virtual Machine (VM): mô phỏng toàn bộ máy tính, có hệ điều hành riêng, nặng (vài GB), khởi động mất vài phút
- Container: chia sẻ kernel của hệ điều hành host, nhẹ (vài MB đến vài trăm MB), khởi động trong vài giây
| Tiêu chí | Container | Virtual Machine |
|---|---|---|
| Kích thước | Vài MB - vài trăm MB | Vài GB |
| Thời gian khởi động | Vài giây | Vài phút |
| Tài nguyên CPU/RAM | Thấp | Cao |
| Cách ly | Chia sẻ kernel OS | Hoàn toàn cách ly |
| Phù hợp cho | Microservices, DevOps | Chạy OS khác nhau |
Tóm lại: Container giống như phòng khách sạn (cùng chia sẻ hạ tầng tòa nhà), còn VM giống như căn hộ độc lập (mỗi nơi có hệ thống riêng).
Các khái niệm cơ bản trong Docker
Image — Bản thiết kế
Image là bản thiết kế (blueprint) để tạo container. Giống như công thức nấu ăn — từ một công thức bạn có thể nấu nhiều lần. Image là read-only và được lưu trữ trên Docker Hub hoặc registry riêng.
Container — Phiên bản đang chạy
Container là một instance đang chạy của image. Từ cùng một image, bạn có thể tạo nhiều container chạy song song. Container là writable — bạn có thể thay đổi dữ liệu bên trong khi nó đang chạy.
Dockerfile — Công thức tạo Image
Dockerfile là file văn bản chứa các lệnh để tạo ra một image. Bạn định nghĩa: dùng base image nào, copy file nào, chạy lệnh gì, expose port nào...
Docker Hub — Kho lưu Image
Docker Hub là registry công khai (giống như GitHub nhưng cho Docker images). Bạn có thể tải về các image có sẵn: nginx, node, python, mysql... hoặc đẩy image của mình lên để chia sẻ.
Cài đặt Docker
Cách đơn giản nhất là cài Docker Desktop:
- Windows: tải Docker Desktop tại docker.com, cài đặt, khởi động lại máy
- macOS: tải Docker Desktop .dmg và cài đặt bình thường
- Linux: cài Docker Engine qua package manager
Sau khi cài, kiểm tra:
docker --version
# Docker version 24.0.0, build abcdef
Các lệnh Docker cơ bản
# Tải image từ Docker Hub
docker pull nginx
# Chạy container (nginx web server)
# -d: chạy nền (detached), -p 8080:80: ánh xạ port
docker run -d -p 8080:80 nginx
# Xem các container đang chạy
docker ps
# Xem tất cả container (kể cả đã dừng)
docker ps -a
# Dừng container
docker stop <container_id>
# Xóa container
docker rm <container_id>
# Xem danh sách image trên máy
docker images
# Xem log của container
docker logs <container_id>
Sau khi chạy lệnh docker run -d -p 8080:80 nginx, mở trình duyệt và truy cập http://localhost:8080 — bạn sẽ thấy trang chào mừng của Nginx!
Tạo Dockerfile đầu tiên
Giả sử bạn có một ứng dụng Node.js đơn giản. Đây là cách tạo Dockerfile:
# Bắt đầu từ image Node.js 18 (phiên bản Alpine — nhỏ gọn)
FROM node:18-alpine
# Thiết lập thư mục làm việc trong container
WORKDIR /app
# Copy file package.json trước (tận dụng Docker cache)
COPY package*.json ./
# Cài đặt dependencies
RUN npm install
# Copy toàn bộ source code
COPY . .
# Expose port 3000
EXPOSE 3000
# Lệnh chạy khi container khởi động
CMD ["node", "server.js"]
Build image và chạy container:
# Build image với tên my-node-app
docker build -t my-node-app .
# Chạy container
docker run -p 3000:3000 my-node-app
# Mở http://localhost:3000 trong trình duyệt
Tổng kết
Docker giải quyết bài toán "chạy được trên máy mình" bằng cách đóng gói ứng dụng vào container nhất quán. Những điểm cần nhớ:
- Image = bản thiết kế; Container = instance đang chạy
- Dockerfile = công thức tạo image
- Container nhẹ và nhanh hơn VM rất nhiều
- Docker Hub có sẵn hàng nghìn image để dùng ngay
Docker là kỹ năng bắt buộc nếu bạn muốn trở thành Backend Developer hoặc DevOps Engineer. Xem thêm: Lộ trình Backend Developer 2026