Docker va Docker Compose Bilan Django Loyihasini Sozlash
Muallif: Javohir Abdullayev · · Server va DevOps

Kirish: Nega aynan Docker?
Dasturchilar orasida eng ko'p uchraydigan hazillardan biri — "Mening kompyuterimda ishlayotgan edi" jumlasidir. Har xil operatsion tizimlar, Python versiyalari va ma'lumotlar bazasi drayverlari o'rtasidagi farqlar loyihani boshqa kompyuterda yoki serverda ishga tushirishda kutilmagan xatoliklarga olib keladi.
Ushbu muammoni tubdan hal qilish uchun Docker va Docker Compose vositalaridan foydalanamiz. Ushbu amaliy qo'llanmada biz Django loyihasi va PostgreSQL ma'lumotlar bazasini Docker yordamida konteynerlashtirishni noldan boshlab bosqichma-bosqich ko'rib chiqamiz.
1-qadam: Loyiha tuzilmasini tayyorlash
Dastlab loyihamiz uchun alohida katalog yaratamiz va kerakli fayllarni joylashtiramiz. Loyihangizning ildiz papkasi quyidagicha ko'rinishda bo'ladi:
myproject/
├── docker-compose.yml
├── Dockerfile
├── .dockerignore
├── requirements.txt
└── src/
├── manage.py
└── myproject/Dastlab requirements.txt fayliga Django va PostgreSQL bilan ishlash uchun drayverni yozamiz:
Django>=5.0,<5.1
psycopg2-binary>=2.9.9
gunicorn>=21.2.02-qadam: Dockerfile yaratish
Dockerfile — bu bizning Django ilovamiz ishlaydigan muhitning (image) retsepti hisoblanadi. Loyiha ildizida Dockerfile nomli fayl oching va unga quyidagi ko'rsatmalarni kiriting:
FROM python:3.11-slim
# Python buferlashini o'chirish (loglar darhol ko'rinishi uchun)
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
WORKDIR /app
# Tizim paketlarini yangilash
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Bog'liqliklarni o'rnatish
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
# Loyiha kodini nusxalash
COPY . /app/
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]Ortiqcha fayllar konteyner ichiga tushib qolmasligi uchun .dockerignore faylini ham yaratishni unutmang:
__pycache__
*.pyc
*.pyo
*.pyd
.git
.env
venv/
env/3-qadam: Docker Compose orqali xizmatlarni bog'lash
Bizga Django ilovasi bilan bir qatorda alohida PostgreSQL bazasi ham kerak bo'ladi. Ularning ikkalasini bitta tarmoqda qulay boshqarish uchun docker-compose.yml faylidan foydalanamiz:
version: '3.8'
services:
db:
image: postgres:16-alpine
container_name: django_postgres_db
environment:
POSTGRES_DB: myproject_db
POSTGRES_USER: postgres_user
POSTGRES_PASSWORD: secretpassword123
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
web:
build: .
container_name: django_web_app
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
environment:
- DB_NAME=myproject_db
- DB_USER=postgres_user
- DB_PASSWORD=secretpassword123
- DB_HOST=db
- DB_PORT=5432
depends_on:
- db
volumes:
postgres_data:4-qadam: Django sozlamalarini (settings.py) moslashtirish
Django Docker konteyneridagi PostgreSQL bilan bog'lanishi uchun settings.py faylidagi DATABASES konfiguratsiyasini muhit o'zgaruvchilari (Environment Variables) orqali o'qiydigan qilib o'zgartiramiz:
import os
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DB_NAME', 'myproject_db'),
'USER': os.environ.get('DB_USER', 'postgres_user'),
'PASSWORD': os.environ.get('DB_PASSWORD', 'secretpassword123'),
'HOST': os.environ.get('DB_HOST', 'localhost'),
'PORT': os.environ.get('DB_PORT', '5432'),
}
}5-qadam: Loyihani ishga tushirish va tekshirish
Barcha konfiguratsiyalar tayyor bo'lgach, terminalda quyidagi buyruqni bering:
docker compose up --buildUshbu buyruq Python va PostgreSQL obrazlarini yuklab oladi, Dockerfile orqali Django ilovasini quradi va ikkala konteynerni ishga tushiradi.
Migratsiyalarni bajarish va superuser yaratish uchun alohida terminal oynasida konteyner ichiga buyruq yuboramiz:
# Migratsiyalarni amalga oshirish
docker compose exec web python manage.py migrate
# Superuser yaratish
docker compose exec web python manage.py createsuperuserEndi brauzeringizda http://localhost:8000 manziliga kirsangiz, Django tabrik sahifasi, http://localhost:8000/admin manzilida esa boshqaruv paneli ishlayotganiga guvoh bo'lasiz.
Foydali tavsiyalar va xulosa
- Live-reload:
volumes: - .:/appqatori yordamida kodingizga o'zgartirish kiritishingiz bilan konteynerdagi server avtomatik qayta ishga tushadi. - Ma'lumotlar xavfsizligi:
postgres_datahajmi (volume) tufayli konteyner o'chirilsa ham bazadagi ma'lumotlar saqlanib qoladi. - Fayl hajmini kichraytirish: Dockerfile uchun
python:3.11-slimyokialpineasosidagi yengil obrazlardan foydalanish tavsiya etiladi.
Docker va Docker Compose orqali Django loyihangizni sozlash jamoaviy ishlashni osonlashtiradi va serverga yuklash (deploy) jarayonidagi muammolarni deyarli butunlay yo'qotadi.
Teglar: #Docker #Django #DevOps #PostgreSQL #Docker Compose