Docker là gì? Tại sao bạn cần nó?
Docker là một nền tảng mã nguồn mở giúp bạn đóng gói ứng dụng và tất cả thư viện phụ thuộc vào một "container" — giống như một chiếc hộp nhỏ gọn, có thể chạy ở bất kỳ đâu: máy tính local, server, hay cloud.
Hãy tưởng tượng: bạn code xong một ứng dụng Python trên máy tính Windows, nó chạy ngon lành. Nhưng khi đưa lên server Linux, nó báo lỗi vì thiếu thư viện, sai phiên bản Python, hoặc xung đột cổng. Với Docker, bạn không bao giờ gặp vấn đề đó — vì ứng dụng của bạn đã được "đóng hộp" cùng với toàn bộ môi trường cần thiết.
Docker container khác với máy ảo (VM) ở chỗ: container nhẹ hơn, khởi động nhanh hơn và dùng chung kernel với hệ điều hành host, trong khi VM cần một hệ điều hành riêng cho mỗi máy ảo.
| Tiêu chí | Docker Container | Máy ảo (VM) |
|---|---|---|
| Tốc độ khởi động | ✅ Giây | ❌ Phút |
| Dung lượng | ✅ MB | ❌ GB |
| Dùng chung kernel | ✅ Có | ❌ Không — mỗi VM có kernel riêng |
| Hiệu năng | ✅ Gần như native | ⚠️ Chậm hơn do ảo hóa |
| Phù hợp | Microservices, DevOps, phát triển web | Hệ thống cần cô lập mạnh, môi trường khác kernel |
1. Cài đặt Docker
Trên Windows / macOS
Truy cập docker.com, tải Docker Desktop và cài đặt. Sau khi cài, mở terminal chạy thử:
docker --version
Nếu hiện số phiên bản, bạn đã cài thành công!
Trên Linux (Ubuntu/Debian)
Mở terminal và chạy các lệnh sau:
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
docker --version
Để chạy Docker không cần sudo:
sudo usermod -aG docker $USER
Sau đó đăng xuất và đăng nhập lại để áp dụng thay đổi.
2. Các lệnh Docker cơ bản bạn cần biết
2.1. Image và Container
- Image: bản mẫu (template) để tạo container. Giống như file ISO để cài hệ điều hành.
- Container: một instance chạy từ image. Bạn có thể tạo nhiều container từ cùng một image.
2.2. Lệnh Docker thường dùng
# Kéo image từ Docker Hub
docker pull ubuntu:latest
# Xem danh sách image đã tải
docker images
# Chạy container từ image
docker run -it --name my-ubuntu ubuntu bash
# Xem container đang chạy
docker ps
# Xem tất cả container (kể cả đã dừng)
docker ps -a
# Dừng container
docker stop my-ubuntu
# Xóa container
docker rm my-ubuntu
# Xóa image
docker rmi ubuntu
Giải thích: Lệnh docker run -it ubuntu bash sẽ tạo một container từ image Ubuntu và mở terminal bash bên trong. Khi bạn gõ exit, container sẽ dừng lại.
2.3. Chạy ứng dụng web với Docker
Hãy thử chạy một web server Nginx chỉ với một dòng lệnh:
docker run -d -p 8080:80 --name my-nginx nginx
Ý nghĩa:
-d: chạy ngầm (detached)-p 8080:80: ánh xạ cổng 8080 máy host vào cổng 80 container--name my-nginx: đặt tên container
Mở trình duyệt và gõ http://localhost:8080 — bạn sẽ thấy trang chào mừng của Nginx!
3. Tự tạo image với Dockerfile
Dockerfile là file cấu hình để build image của riêng bạn. Dưới đây là ví dụ tạo một ứng dụng Python Flask đơn giản:
Bước 1: Tạo file app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Xin chào từ Docker! 🐳"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Bước 2: Tạo file requirements.txt:
flask==3.0.0
Bước 3: Tạo file Dockerfile:
# Sử dụng image Python chính thức
FROM python:3.11-slim
# Thiết lập thư mục làm việc
WORKDIR /app
# Copy requirements và cài đặt thư viện
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy mã nguồn
COPY . .
# Cổng ứng dụng
EXPOSE 5000
# Lệnh chạy ứng dụng
CMD ["python", "app.py"]
Bước 4: Build image và chạy container:
docker build -t flask-app .
docker run -d -p 5000:5000 --name my-flask flask-app
Giờ bạn đã có một ứng dụng Flask chạy trong container Docker tại http://localhost:5000!
4. Docker Compose — Chạy nhiều container cùng lúc
Trong thực tế, ứng dụng thường gồm nhiều dịch vụ: web server, database, cache... Docker Compose giúp bạn định nghĩa và chạy tất cả chỉ với một file docker-compose.yml.
Ví dụ: Ứng dụng web + MySQL
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Chạy toàn bộ hệ thống chỉ với một lệnh:
docker-compose up -d
Để dừng:
docker-compose down
Lợi ích lớn nhất của Docker Compose: Bạn có thể share file docker-compose.yml cho đồng nghiệp, họ chạy một lệnh là có ngay môi trường giống hệt bạn — không cần cài đặt thủ công từng thứ.
5. Một số mẹo hay khi dùng Docker
- Dùng .dockerignore: Giống
.gitignore, giúp Docker bỏ qua file không cần thiết khi build (node_modules, .env, .git...), giúp build nhanh hơn. - Khai báo volume để lưu dữ liệu: Khi container bị xóa, dữ liệu trong đó cũng mất. Dùng volume để lưu trữ bền vững:
docker run -v mydata:/data ... - Xóa container/image không dùng:
docker system prune -a— dọn dẹp toàn bộ container, image, network không dùng đến, giải phóng dung lượng ổ cứng. - Xem log container:
docker logs <tên_container>— rất hữu ích khi debug. - Chạy lệnh trong container đang chạy:
docker exec -it <tên_container> bash— mở terminal bên trong container.
6. Docker Hub — Kho image khổng lồ
Docker Hub là nơi bạn có thể tải hàng ngàn image có sẵn: Ubuntu, Nginx, MySQL, Python, Node.js... và cũng là nơi bạn đẩy image của mình lên để chia sẻ với team.
Để đẩy image lên Docker Hub:
# Đăng nhập
docker login
# Gắn tag
docker tag flask-app yourusername/flask-app:v1
# Đẩy lên
docker push yourusername/flask-app:v1
Kết luận
Docker là một công cụ không thể thiếu trong bộ kỹ năng của bất kỳ lập trình viên hay DevOps engineer nào. Nó giúp bạn:
- ✅ Loại bỏ vấn đề "máy tôi chạy được mà"
- ✅ Triển khai nhanh chóng — chỉ cần kéo image về và chạy
- ✅ Quản lý môi trường dễ dàng với Dockerfile và Docker Compose
- ✅ Mở rộng linh hoạt — thêm container, cân bằng tải, scale dễ dàng
Bắt đầu ngay hôm nay: cài Docker, chạy thử vài lệnh cơ bản, rồi tự build một image cho ứng dụng của bạn. Chỉ mất 30 phút nhưng sẽ thay đổi hoàn toàn cách bạn làm việc!
Bạn đã dùng Docker chưng? Có khó khăn gì trong quá trình học không? Hãy để lại bình luận bên dưới để FTechx Solutions có thể hỗ trợ bạn nhé! 🚀