Docker Giải Mã: Hướng Dẫn Cơ Bản Cho Người Mới Về Container
🚢 Hãy tưởng tượng lắp ghép một con thuyền trong chai - bạn đóng gói mọi chi tiết để nó có thể luôn trông hoàn hảo ở bất kỳ đâu. Đó chính là Docker cho ứng dụng của bạn.
Nếu từng vật lộn với phần mềm chạy trên máy bạn nhưng fail ở máy khác, Docker là phao cứu sinh của bạn. Và nếu chưa gặp trường hợp đó, thì nhiệm vụ của nó vẫn là cứu giúp bạn - một người low-tech khi phải mò mẫm cài đặt công cụ từ GitHub - khỏi mớ hướng dẫn cài đặt thủ công. Không chắc hướng dẫn này biến bạn từ newbie thành pro, nhưng ít nhất nó sẽ giúp bạn hiểu căn bản về Docker và biết cách dùng. Nếu không hiểu, đọc lại lần nữa nha.
Nhảy vào thôi!
Tại Sao Docker? Giải Pháp Cho Vấn Đề Muôn Thuở
Cơn Ác Mộng “Chạy Trên Máy Tôi Mà”
Hãy tưởng tượng: Bạn build một app đẹp, test kỹ, nhưng nó crash trên máy đồng đội. Tại sao?
- Xung đột dependency (họ dùng Node.js 14, bạn dùng 18)
- Khác biệt OS (Linux vs Windows)
- Lệch cấu hình (biến môi trường, đường dẫn file)
Docker giải quyết bằng cách đóng gói app và môi trường vào một container di động.
Trước Docker: Thời Đại VM
Virtual Machines (VM) từng là giải pháp cũ. Chúng mô phỏng toàn bộ OS nhưng chậm, ngốn tài nguyên (hàng GB). Container Docker nhẹ nhàng hơn (MB), chia sẻ kernel với host OS và khởi động trong vài giây.
Docker 101: Container, Image và Registry
1. Container vs Image
- Image: Template chỉ đọc (như công thức nấu ăn). Ví dụ:
nginx
,python:3.9
. Image là gói chuẩn hóa chứa mọi file, binary, thư viện và cấu hình để chạy container. - Container: Phiên bản chạy của image (như món ăn nấu từ công thức).
Lưu ý quan trọng về image
:
- Image là immutable. Một khi đã tạo, bạn không thể sửa. Chỉ có thể tạo image mới hoặc thêm thay đổi lên trên.
docker pull nginx:latest
). Lưu ý phải recreate container dùng image mới để áp dụng thay đổi.May mắn thay, nhờ Watchtower, chúng ta có thể tự động hóa quá trình này - hãy bookmark tool này.
2. Docker Registry: Thư Viện Image
Registry lưu trữ và chia sẻ image. Docker Hub là registry mặc định (kiểu “GitHub cho Docker”).
- Public image:
docker pull nginx
lấy image chính thức Nginx Nginx là gì? Web server hiệu năng cao, reverse proxy và load balancer mã nguồn mở, dùng để host website và quản lý traffic web.. - Private registry: Cho code độc quyền (vd: AWS ECR, Google Container Registry).
Use Case Nâng Cao- Push Lên Private Registry:
docker tag my-app:latest my-registry.com/my-app:v1
docker push my-registry.com/my-app:v1
3. Image Tagging: Quản Lý Phiên Bản Cho Container
Tag xác định phiên bản image:
node:18
→ Node.js phiên bản 18.my-app:v1.2
→ App của bạn version 1.2.
Không có tag? Docker mặc định dùng:latest
(nhưng tránh dùng trong production - khó kiểm soát!).
Bắt Đầu Hành Trình: Cài Đặt Docker
Chúng ta sẽ dùng Docker Desktop trong hướng dẫn này vì thân thiện với người mới và chỉ cần cài đặt 1 click. Nếu tò mò về alternative, xem bài này
Các Bước Cài Đặt: Tải Docker Desktop cho OS của bạn và làm theo hướng dẫn.
Đừng quên cài các yêu cầu bổ sung (vd: WSL2 cho Docker Desktop trên Windows) và đảm bảo phần cứng đáp ứng yêu cầu.
Sau khi cài WSL2
và Docker Desktop
, lưu ý một số cài đặt:
Đảm bảo Disk Image location
ở nơi có đủ dung lượng.
Bật WSL integration
.
Docker Commands: Chuyến Hải Trình Đầu Tiên
Cheat Sheet Lệnh Cơ Bản
Command | Mô Tả | Ví Dụ |
---|---|---|
docker pull | Tải image từ registry | docker pull nginx |
docker run | Khởi chạy container từ image | docker run -d -p 8080:80 nginx |
docker ps | Liệt kê container đang chạy | docker ps -a (Hiển thị cả container đã dừng) |
docker stop | Dừng container | docker stop <container-id> |
docker rm | Xóa container | docker rm <container-id> |
docker images | Liệt kê image đã tải | docker images |
Giải Thích Thuật Ngữ & Lệnh
Port là gì?
Port là điểm cuối( endpoint) ảo cho giao tiếp mạng.
-p 8080:80
nối kết host port 8080 sang container port 80.Truy cập app qua http://localhost:8080 → traffic dẫn đến port 80 trong container.
Ý nghĩa của -d?
- Chạy container ở chế độ detached (nền), giải phóng terminal.
Cách mở terminal (nếu bạn thực sự là người rất mới)
- Windows: Dùng PowerShell, Command Prompt hoặc WSL. (gõ
cmd
,bash
trong thanh tìm kiếm của Windows Taskbar) - macOS/Linux: Dùng Terminal mặc định (Terminal, iTerm, GNOME Terminal).
Hoặc dùng terminal tích hợp trong Docker Desktop.
Thực Hành Ngay
- Chạy Web Server Nginx:
# Tải image Nginx (nếu chưa có):
docker pull nginx
# Khởi chạy container ở chế độ nền, nối kết port 8080 máy bạn sang port 80 container:
docker run -d -p 8080:80 nginx
- Kiểm Tra Trạng Thái:
docker ps # Xem ID và trạng thái container Nginx
Truy Cập Server: Mở trình duyệt, truy cập http://localhost:8080. Bạn sẽ thấy trang welcome của Nginx (xác nhận container hoạt động!).
Dọn Dẹp:
# Dừng container (thay <container-id> bằng ID thực từ `docker ps`):
docker stop <container-id>
# Xóa container:
docker rm <container-id>
```## **Port Binding: Kết Nối Container Và Host**
Container chạy biệt lập. Để truy cập app bên trong, **nối kết port host sang container port**:
Pro Tip: Tránh xung đột port! Nếu
8080
bận, dùng-p 8081:80
thay thế. (Về sau, bạn sẽ gặp nhiều container/Docker Compose dùng chung port.)
Muốn thêm nữa?
Hãy khám phá GitHub và ngịch các project thú vị. Thử chạy theo hướng dẫn trên. Gợi ý: https://github.com/CorentinTh/it-tools - bộ công cụ hữu ích cho người hay làm việc liên quan tới IT.
(Bạn có thể copy-paste lệnh Docker của họ vào terminal:
docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest
Vì khi run image
mà chưa tồn tại( trong máy bạn), Docker sẽ tự động pull image.)
Nếu thành công, bạn có thể truy cập UI của tool này qua localhost:8080
:
Hy vọng bạn đã hiểu căn bản về Docker và tự chạy được image. Nếu chưa, đọc lại và tham khảo các hướng dẫn khác để làm quen dần với những thuật ngữ và khái niệm công nghệ mới.
Vượt Qua Căn Bản: Bước Tiếp Theo Là Gì?
- Docker Compose: Định nghĩa ứng dụng multi-container (vd: app + database) bằng file
docker-compose.yml
. - Docker Containerize: Học cách tự build image.
- Kubernetes: Điều phối container ở quy mô lớn.
- Volumes: Lưu trữ dữ liệu (vd: database) vượt qua vòng đời container.
- Networking: Kết nối container an toàn (mạng tùy chỉnh, DNS).
- CI/CD: Docker trong vòng đời phát triển phần mềm*
Cập Bến! Tài Nguyên Bổ Sung
- Tài Liệu Chính Thức Docker
- Docker Hub
- Khóa Học Docker Của TechWorld with Nana (video)
- Awesome Docker (công cụ & hướng dẫn chọn lọc)
Thuận Buồm Xuôi Gió! 🐳