Content is user-generated and unverified.

FastAPI Docker bilan konteynerlash - Windows uchun to'liq qo'llanma

1. Tayyorgarlik

Docker Desktop o'rnatish (Windows)

  1. Docker Desktop for Windows yuklab oling
  2. WSL 2 backend yoqilganligini tekshiring
  3. PowerShell yoki Command Prompt'da docker --version buyrug'ini ishga tushiring

Loyiha strukturasi

my_fastapi_app/
├── app/
│   ├── __init__.py
│   ├── main.py
│   ├── models.py
│   └── routers/
│       ├── __init__.py
│       └── users.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
└── .dockerignore

2. FastAPI Application yaratish

main.py

python
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import uvicorn

app = FastAPI(
    title="My FastAPI App",
    description="Docker bilan konteynerlashtirilgan FastAPI application",
    version="1.0.0"
)

# CORS middleware
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/")
async def root():
    return {"message": "Salom, Docker!"}

@app.get("/health")
async def health_check():
    return {"status": "healthy"}

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    return {"user_id": user_id, "name": f"User {user_id}"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

requirements.txt

txt
fastapi==0.104.1
uvicorn[standard]==0.24.0
python-multipart==0.0.6
pydantic==2.5.0

3. Dockerfile yaratish

Dockerfile

dockerfile
# Python 3.11 slim image'ini base sifatida ishlatish
FROM python:3.11-slim

# Muhit o'zgaruvchilari
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1

# Ishchi user yaratish (xavfsizlik uchun)
RUN groupadd -r appuser && useradd -r -g appuser appuser

# Ishchi katalog yaratish
WORKDIR /app

# Tizim paketlarini yangilash va kerakli toollarni o'rnatish
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Dependencylarni o'rnatish
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Application kodni nusxalash
COPY . .

# Fayllar huquqlarini sozlash
RUN chown -R appuser:appuser /app
USER appuser

# Port ochish
EXPOSE 8000

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

# Application ishga tushirish
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

4. Docker Compose konfiguratsiyasi

docker-compose.yml

yaml
version: '3.8'

services:
  fastapi_app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: fastapi_container
    ports:
      - "8000:8000"
    environment:
      - ENVIRONMENT=development
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
    volumes:
      - ./app:/app/app  # Development uchun hot reload
    depends_on:
      - db
    restart: unless-stopped
    networks:
      - app_network

  db:
    image: postgres:15-alpine
    container_name: postgres_db
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: unless-stopped
    networks:
      - app_network

  redis:
    image: redis:7-alpine
    container_name: redis_cache
    ports:
      - "6379:6379"
    restart: unless-stopped
    networks:
      - app_network

volumes:
  postgres_data:

networks:
  app_network:
    driver: bridge

5. .dockerignore fayli

.dockerignore

__pycache__/
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.venv/
pip-log.txt
pip-delete-this-directory.txt
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.log
.git
.mypy_cache
.pytest_cache
.hypothesis
.DS_Store
*.sqlite3
*.db
node_modules/
.env
.env.local
.env.*.local

6. Windows PowerShell buyruqlari

Docker image yaratish

powershell
# Joriy katalogda
docker build -t my-fastapi-app .

# Tag bilan
docker build -t my-fastapi-app:v1.0 .

# Build jarayonini kuzatish
docker build -t my-fastapi-app --progress=plain .

Container ishga tushirish

powershell
# Oddiy ishga tushirish
docker run -d -p 8000:8000 --name fastapi-container my-fastapi-app

# Environment variables bilan
docker run -d -p 8000:8000 --name fastapi-container -e ENVIRONMENT=production my-fastapi-app

# Volume mount qilish
docker run -d -p 8000:8000 --name fastapi-container -v ${PWD}/app:/app/app my-fastapi-app

Docker Compose bilan ishga tushirish

powershell
# Barcha servicelarni ishga tushirish
docker-compose up -d

# Faqat bitta service
docker-compose up -d fastapi_app

# Buildni qayta qilish
docker-compose up -d --build

# Loglarni ko'rish
docker-compose logs -f fastapi_app

7. Foydali Docker buyruqlari

Monitoring va debugging

powershell
# Ishlab turgan containerlar
docker ps

# Container loglarini ko'rish
docker logs fastapi-container

# Container ichiga kirish
docker exec -it fastapi-container /bin/bash

# Container ma'lumotlarini ko'rish
docker inspect fastapi-container

# Container statistikasi
docker stats fastapi-container

Tozalash buyruqlari

powershell
# Container to'xtatish va o'chirish
docker stop fastapi-container
docker rm fastapi-container

# Image o'chirish
docker rmi my-fastapi-app

# Barcha to'xtatilgan containerlarni o'chirish
docker container prune

# Ishlatilmagan imagelarni o'chirish
docker image prune

# Barcha resourcelarni tozalash
docker system prune -a

8. Production uchun optimizatsiya

Multi-stage Dockerfile

dockerfile
# Build stage
FROM python:3.11-slim as builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# Production stage
FROM python:3.11-slim

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PATH="/home/appuser/.local/bin:$PATH"

RUN groupadd -r appuser && useradd -r -g appuser appuser

WORKDIR /app

# Copy dependencies from builder stage
COPY --from=builder /root/.local /home/appuser/.local

# Copy application code
COPY --chown=appuser:appuser . .

USER appuser

EXPOSE 8000

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]

Environment variables

powershell
# .env fayl yaratish
echo "DATABASE_URL=postgresql://user:password@localhost:5432/mydb" > .env
echo "REDIS_URL=redis://localhost:6379" >> .env
echo "SECRET_KEY=your-secret-key-here" >> .env

9. CI/CD uchun GitHub Actions

.github/workflows/docker.yml

yaml
name: Docker Build and Deploy

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    
    - name: Build Docker image
      run: docker build -t my-fastapi-app .
    
    - name: Test Docker image
      run: |
        docker run -d -p 8000:8000 --name test-container my-fastapi-app
        sleep 10
        curl -f http://localhost:8000/health
        docker stop test-container

10. Debugging va Troubleshooting

Keng tarqalgan muammolar

powershell
# Port band bo'lsa
netstat -ano | findstr :8000

# Container to'xtab qolsa
docker logs fastapi-container --tail 50

# Memory muammosi
docker stats --no-stream

# Network muammosi
docker network ls
docker network inspect bridge

Performance testing

powershell
# ApacheBench bilan test
docker run --rm httpd:2.4 ab -n 1000 -c 10 http://host.docker.internal:8000/

# Container resource usage
docker exec fastapi-container top

Xulosa

Bu qo'llanma orqali siz FastAPI applicationni Docker bilan to'liq konteynerlashtirishni o'rgandingiz. Windows muhitida Docker Desktop va PowerShell yordamida barcha operatsiyalarni amalga oshirish mumkin. Production muhitida ko'p containerli architecture va monitoring toollarini ham qo'shish tavsiya etiladi.

Content is user-generated and unverified.
    FastAPI Docker bilan konteynerlash - Windows uchun to'liq qo'llanma | Claude