Docker là gì? ứng dụng chạy flask vào trong docker
1️⃣ Docker là gì?
Docker là một nền tảng cho phép đóng gói ứng dụng và toàn bộ môi trường chạy của nó (thư viện, dependencies, cấu hình, runtime…) thành container.
👉 Nhờ đó, ứng dụng:
-
Chạy giống nhau trên mọi máy
-
Không phụ thuộc hệ điều hành
-
Dễ deploy, scale, versioning
2️⃣ Vấn đề trước khi có Docker
| Vấn đề | Mô tả |
|---|---|
| “Chạy được trên máy tôi” | Máy dev chạy OK nhưng server lỗi |
| Khác phiên bản Python | 3.8 vs 3.11 gây lỗi |
| Cài thư viện thủ công | Dễ xung đột |
| Môi trường phức tạp | Khó triển khai |
👉 Docker giải quyết tất cả.
3️⃣ Docker hoạt động như thế nào?
3 khái niệm cốt lõi
| Thành phần | Vai trò |
|---|---|
| Image | Bản đóng gói bất biến (template) |
| Container | Image đang chạy |
| Dockerfile | File mô tả cách build image |
4️⃣ Kiến trúc Docker (đơn giản)
Dockerfile → Image → Container
5️⃣ Docker so với Virtual Machine
| Docker | Virtual Machine |
|---|---|
| Nhẹ | Nặng |
| Chạy nhanh | Chậm |
| Dùng chung OS kernel | Mỗi VM có OS riêng |
| Phù hợp microservices | Phù hợp hệ thống lớn |
🚀 DOCKER + FLASK (ÁP DỤNG THỰC TẾ)
6️⃣ Cấu trúc project Flask + Docker
flask-app/
│
├── app.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
7️⃣ Ví dụ file Flask (app.py)
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def home():
return {"message": "Flask API is running"}
@app.route("/health")
def health():
return {"status": "OK"}
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
8️⃣ requirements.txt
flask
9️⃣ Dockerfile (CỰC QUAN TRỌNG)
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
🔟 Build image Docker
docker build -t flask-api .
Kiểm tra:
docker images
1️⃣1️⃣ Chạy container
docker run -p 5000:5000 flask-api
Truy cập:
http://localhost:5000
🧱 DOCKER COMPOSE (QUẢN LÝ NHIỀU CONTAINER)
docker-compose.yml
version: "3.9"
services:
api:
build: .
container_name: flask_api
ports:
- "5000:5000"
restart: always
Chạy bằng docker-compose
docker compose up --build
Dừng:
docker compose down
📦 CÁC LỆNH DOCKER QUAN TRỌNG NHẤT
🔹 Kiểm tra
docker --version
docker info
docker ps
docker ps -a
docker images
🔹 Image
docker build -t myapp .
docker rmi myapp
docker pull python:3.10
🔹 Container
docker run -d -p 5000:5000 myapp
docker stop <container_id>
docker rm <container_id>
docker logs <container_id>
🔹 Docker Compose
docker compose up
docker compose up --build
docker compose down
🔹 Dọn dẹp Docker
docker system prune
docker image prune
docker container prune
🔹 Đẩy image lên Docker Hub
docker login
docker tag flask-api username/flask-api
docker push username/flask-api
12️⃣ Những lỗi thường gặp & cách sửa
❌ ModuleNotFoundError: flask
➡️ Chưa cài flask trong container
✅ Fix: thêm vào requirements.txt
❌ port already in use
➡️ Port 5000 đang bị chiếm
✅ Dùng port khác:
docker run -p 8000:5000 flask-api
❌ No such image
➡️ Gõ sai tên image
👉 dùng:
docker images
13️⃣ Tóm tắt ngắn gọn
| Thành phần | Mục đích |
|---|---|
| Docker | Đóng gói ứng dụng |
| Image | Bản build |
| Container | Ứng dụng đang chạy |
| Dockerfile | Công thức tạo image |
| Docker Compose | Quản lý nhiều container |
| Flask | Web API framework |
✅ KẾT LUẬN
Docker giúp bạn viết 1 lần – chạy mọi nơi
Flask giúp bạn tạo API nhanh – gọn – dễ mở rộng