docker --version buyrug'ini ishga tushiringmy_fastapi_app/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── models.py
│ └── routers/
│ ├── __init__.py
│ └── users.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
└── .dockerignorefrom 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)fastapi==0.104.1
uvicorn[standard]==0.24.0
python-multipart==0.0.6
pydantic==2.5.0# 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"]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__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# 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 .# 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# 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# 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# 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# 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"]# .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" >> .envname: 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# 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# 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 topBu 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.