🎯 Mục tiêu bài học
Docker giúp package AI applications thành containers có thể chạy trên bất kỳ môi trường nào. Bài này cover Docker fundamentals cho AI deployment.
Sau bài này, bạn sẽ:
✅ Hiểu Docker architecture: images, containers, registry ✅ Viết Dockerfile cho Python AI applications ✅ Build và run Docker containers ✅ Sử dụng multi-stage builds để tối ưu image size ✅ Quản lý environment variables và volumes
🔍 Docker Architecture
- Image: Blueprint của application (read-only)
- Container: Running instance của image
- Dockerfile: Instructions để build image
- Registry: Nơi lưu trữ images (Docker Hub, ECR)
Checkpoint
Bạn đã hiểu các khái niệm cơ bản của Docker (Image, Container, Dockerfile, Registry) chưa?
💻 Dockerfile cho Python AI App
1# Dockerfile2FROM python:3.11-slim3 4# Set working directory5WORKDIR /app6 7# Install system dependencies8RUN apt-get update && apt-get install -y \9 build-essential \10 && rm -rf /var/lib/apt/lists/*11 12# Copy requirements first (caching layer)13COPY requirements.txt .14RUN pip install --no-cache-dir -r requirements.txt15 16# Copy application code17COPY . .18 19# Expose port20EXPOSE 800021 22# Health check23HEALTHCHECK --interval=30s --timeout=10s \24 CMD curl -f http://localhost:8000/health || exit 125 26# Run application27CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]Checkpoint
Bạn đã hiểu các instructions cơ bản trong Dockerfile chưa?
🛠️ Build và Run
1# Build image2docker build -t ai-api:latest .3 4# Run container5docker run -d \6 --name ai-api \7 -p 8000:8000 \8 -e OPENAI_API_KEY=sk-xxx \9 ai-api:latest10 11# Check status12docker ps13docker logs ai-api14 15# Stop16docker stop ai-api17docker rm ai-apiCheckpoint
Bạn đã build và run được Docker container chưa?
⚡ Multi-stage Build
1# Stage 1: Build2FROM python:3.11-slim AS builder3 4WORKDIR /app5COPY requirements.txt .6RUN pip install --user --no-cache-dir -r requirements.txt7 8# Stage 2: Production9FROM python:3.11-slim AS production10 11WORKDIR /app12 13# Copy installed packages14COPY --from=builder /root/.local /root/.local15ENV PATH=/root/.local/bin:$PATH16 17# Copy app18COPY app/ ./app/19 20# Non-root user21RUN useradd -m appuser22USER appuser23 24EXPOSE 800025CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]Checkpoint
Bạn đã hiểu multi-stage builds giúp giảm image size như thế nào chưa?
🛠️ Environment Variables
1# .env file2OPENAI_API_KEY=sk-xxx3REDIS_URL=redis://redis:63794LOG_LEVEL=info5MAX_TOKENS=10001# Run with env file2docker run --env-file .env -p 8000:8000 ai-api:latest3 4# Or individual env vars5docker run \6 -e OPENAI_API_KEY=sk-xxx \7 -e LOG_LEVEL=debug \8 -p 8000:8000 ai-api:latestCheckpoint
Bạn đã hiểu cách truyền environment variables vào Docker container chưa?
📝 Volumes và Data
1# Mount volume for persistent data2docker run -d \3 -v $(pwd)/data:/app/data \4 -v $(pwd)/logs:/app/logs \5 -p 8000:8000 \6 ai-api:latestDocker Commands Cheat Sheet
1# Images2docker images # List images3docker build -t name:tag . # Build image4docker rmi image_name # Remove image5docker pull image_name # Pull from registry6 7# Containers8docker ps # Running containers9docker ps -a # All containers10docker exec -it name bash # Enter container11docker logs -f name # Follow logs12 13# Cleanup14docker system prune # Clean unused15docker image prune # Clean dangling images.dockerignore
1# .dockerignore2__pycache__3*.pyc4.env5.git6.vscode7node_modules8*.md9tests/10.pytest_cacheCheckpoint
Bạn đã hiểu cách sử dụng volumes và các Docker commands phổ biến chưa?
🎯 Tổng kết
Best Practices
- Layer caching: Put COPY requirements.txt trước COPY .
- Slim images: Dùng python:3.11-slim thay vì python:3.11
- Multi-stage: Giảm image size với multi-stage builds
- Non-root: Chạy container với non-root user
- Health checks: Add HEALTHCHECK cho monitoring
- .dockerignore: Exclude files không cần thiết
Bài tập thực hành
- Dockerize FastAPI AI app từ bài trước
- Build multi-stage image
- Run container với env variables
- Setup health check
Target: Docker image nhỏ hơn 500MB chạy được AI API
Câu hỏi tự kiểm tra
- Dockerfile có những instructions cơ bản nào (FROM, COPY, RUN, CMD) và mỗi instruction đóng vai trò gì?
- Tại sao layer caching lại quan trọng và việc đặt
COPY requirements.txttrướcCOPY .giúp tối ưu build time như thế nào? - Multi-stage builds giúp giảm Docker image size như thế nào? Hãy giải thích quy trình.
- Tại sao nên chạy container với non-root user và .dockerignore file có tác dụng gì?
🎉 Tuyệt vời! Bạn đã hoàn thành bài học Docker Basics!
Tiếp theo: Chúng ta sẽ áp dụng Docker chuyên sâu cho AI Applications.
