Docker tushunchalari, Dockerfile, .dockerignore, docker-compose (api + PostgreSQL), env va volume, deploy
10-sinfAdvanced Python Back-end6-hafta · 18-darsImage va konteyner
Buyruqlar
API + baza
.env fayli qayerga qo'shiladi (GitHub ga tushmasligi uchun)?
.env maxfiy, .gitignore da turadi.Image va konteyner
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
requirements.txt ni kodan oldin nusxalash qatlam keshidan foydalanishni ta'minlaydi: kod o'zgarsa kutubxonalar qayta o'rnatilmaydi. --host 0.0.0.0 bo'lmasa, konteyner tashqarisidan ulanib bo'lmaydi.Image va konteyner farqi?
Buyruqlar
docker build -t book-api .
docker run -d --name api -p 8000:8000 --env-file .env book-api
docker ps
docker logs api
docker stop api
.dockerignore ga .env ni yozish xavfsizlik uchun muhim: aks holda parollar image ichida qoladi va image ni ulashsangiz ham sizib chiqadi.-p 8000:8000 nima qiladi?
API + baza
services:
api:
build: .
ports: ["8000:8000"]
env_file: .env
environment:
DATABASE_URL: postgresql+asyncpg://book:${DB_PASSWORD}@db:5432/books
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
environment:
POSTGRES_USER: book
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: books
volumes: ["pgdata:/var/lib/postgresql/data"]
healthcheck:
test: ["CMD-SHELL", "pg_isready -U book -d books"]
interval: 5s
retries: 5
volumes:
pgdata:
docker compose exec api alembic upgrade head. To'xtatish: docker compose down (volume saqlanadi); down -v esa bazani ham o'chiradi.Compose ichida API baza bilan qaysi host orqali bog'lanadi?
localhost — konteynerning o'zi.«Mening kompyuterimda ishlagan» muammosi kamayadi.
Ilova va muhitning tayyor shabloni
Image ning ishlayotgan nusxasi
Konteynerdan tashqarida saqlanadigan ma'lumot
Ko'p xizmatni bitta fayldan boshqarish
Image retsepti.
api va db.
VPS yoki PaaS da ishga tushiring.
| Buyruq | Nima qiladi | Misol |
|---|---|---|
build | image yasaydi | docker build -t book-api . |
run | konteyner ishga tushiradi | docker run -p 8000:8000 ... |
ps | ishlayotganlarni ko'rsatadi | docker ps |
compose up | xizmatlarni ko'taradi | docker compose up -d --build |
compose down | xizmatlarni to'xtatadi | docker compose down |
Pastga bosing: buyruqlar
Dockerfile va .dockerignore ni yozing.docker build -t book-api . ni ishga tushiring.docker run -p 8000:8000 --env-file .env book-api, so'ng localhost:8000/docs.
DATABASE_URL: postgresql+asyncpg://book:pw@localhost:5432/books
DATABASE_URL: postgresql+asyncpg://book:${DB_PASSWORD}@db:5432/books
Compose bir buyruq bilan butun tizimni ko'taradi.
python:3.12-slim asosida FastAPI uchun Dockerfile yozing.DATABASE_URL hostini nima uchun db qilamiz?Image (shablon) va konteyner (nusxa).
Dockerfile, .dockerignore, docker-compose.yml.
compose up, volume, .env orqali parol.
Uyga vazifa: Dockerfile va docker-compose.
FastAPI da real vaqtli ilova
7-hafta · 19-dars