Home>>Django>>Docker ile Django Uygulamasını Ayağa Kaldırmak
Django

Docker ile Django Uygulamasını Ayağa Kaldırmak

Bu yazıda, Django Docker Windows 10 işletim sisteminde Docker nasıl kullanılır? Django projemi Docker’da nasıl çalıştırırım? PostgreSql nasıl kullanılır sorularını cevaplayacağım.

Öncelikle Docker hakkında genel bilgi edinmek için şu yazımı okumanızı tavsiye ederim.

📖 İçindekiler

📌 Django Projesi

Ben, adım adım makalesini yazdığım Web Galerim projesini kullanacağım. Github’dan indirebilirsiniz veya kendi projenizi kullanabilirsiniz.

Docker tarafından indirileceği için kullanılan modülleri requirements.txt dosyasına atmamız gerekiyor.

Bunun için:

pip3 freeze > requirements.txt

🐳 Docker Kurulum

Bu makale Windows 10 üzerinden anlatılacaktır. Bu yüzden ben windows kurulumunu gerçekleştirdim. Sizde kendi sisteminize uygun kurulum yapabilirsiniz. Bu adrese giderek dockeri indirip kurabilirsiniz.1

🛠 Docker Dosya Ayarları: Dockerfile & docker-compose.yml

Bu kısımda Docker’ı çalıştırabilmek için bazı ayarlar yapmamız gerekiyor.

Proje dizinimizde Dockerfile ve docker-compose.yml isimli dosya oluşturalım.

Dizin şu şekilde olmalı:

Klasör
- ProjeKlasörü
- manage.py
- requirements.txt
- Dockerfile
- docker-compose.yml

İlk önce Dockerfile’ı anlatmak istiyorum.

Kısaca Dockerfile, bir Docker imajının nasıl oluşturulacağını belirleyen bir dosyadır.

Bu dosyayı(Dockerfile) açalım.

FROM python:3.10

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /proje

COPY requirements.txt /proje/

RUN pip install -r requirements.txt

COPY . .
  • FROM python:3.10 : Projenizde kullanılacak Python sürümü.
  • PYTHONDONTWRITEBYTECODE=1: Python’ın derlenmiş kod dosyalarını (.pyc dosyaları) oluşturmasını engeller. Bu, Docker imajının boyutunu azaltabilir ve uygulamanın performansını artırabilir.
  • PYTHONUNBUFFERED=1: Python’ın standart çıktısının ve hatalarının tamponlanmasını engeller. Bu, uygulamanın hata ayıklamasını ve loglama işlemlerini kolaylaştırabilir.
  • WORKDIR : Docker tarafından oluşturulacak dizin adı.
  • COPY : Docker imajına modülleri kurmak için bu dosyayı(requiments.txt) oluşturduğumuz dizine kopyalar.
  • RUN : Kopyaladığımız requirements.txt dosyasındaki modüllerin kurulumunu yapar.
  • COPY : Tüm dizini WORKDIR /proje olarak belirttiğimiz dizine kopyalar.

Dockerfile’da işlemimiz bitti, kaydedip çıkalım.

Nedir Bu docker-compose.yml Dosyası?

Bir Docker Compose projesindeki tüm konteynerları nasıl yapılandıracağınızı ve yöneteceğinizi belirleyen bir dosyadır.

Şimdi docker-compose.yml dosyasını açalım.

version: "3.10"
services:
app:
build: .
volumes:
- .:/proje
ports:
- 8000:8000
image: app:django
container_name: django_container
command: python manage.py runserver 0.0.0.0:8000
  • version: Docker Compose dosyasının sürümünü belirtir. Bu dosya, 3.10 sürümünde yazılmıştır.
  • services: Docker Compose’da çalıştırılacak her bir servisi tanımlar.
  • app: Servisin adıdır.
  • build: Dockerfile’dan bir imaj oluşturmak için kullanılacak olan dosya yolunu belirtir. Bu durumda, . mevcut dizini belirtir, yani Dockerfile’ın bulunduğu dizindir.
  • volumes: Servise bağlanacak olan birimlerin belirtildiği alandır. Bu durumda, ana dizin “.” /proje klasörüne bağlanır.
  • ports: Bağlantı yapılacak portu belirler.
  • image: Dockerfile’ın sonucu olarak oluşacak olan imajın adını belirler.
  • container_name: Docker tarafından oluşturulacak olan konteynerin adını belirtir.
  • command: Docker konteyneri çalıştırıldığında çalıştırılacak komutu belirtir. Bu durumda, Django sunucusunu 0.0.0.0:8000 adresinde çalıştıracak olan komut belirtilmiştir.

🚀 Docker Çalıştırma

Tüm ayarlamaları yaptığımızdan emin olduktan sonra konsol ekranımızı açıp aşağıdaki komutu yazarak dockerize işlemine başlatabiliriz.

docker-compose up -d --build

İlk imaj yarattığı için uzun sürebilir. İşlem bittikten sonra aşağıdaki gibi bir mesajla karşılaşacağız.

Docker arayüzünden oluşturduğumuz konteynere bakalım.

Yada konsol ekranına docker ps yazarak çalışan konteynerleri görebilirsiniz.

http://localhost:8000/ adresini kontrol ettiğimde projem çalışır vaziyette karşıma çıkıyor.

❓ Peki Sqlite Değil de PostgreSql Kullanırsak Nasıl Yapılandırırız?

Django projemizin settings.py’de veri tabanı ayarını yaptığımızdan emin olalım.

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'galerim',
'USER': "postgres",
'PASSWORD': "enes",
'HOST': "db",
'PORT': 5432,
}
}

docker-compose.yml dosyasını yapılandıracağız.

version: "3.10"
services:
app:
build: .
volumes:
- .:/proje
ports:
- 8000:8000
image: app:django
container_name: django_container
command: python manage.py runserver 0.0.0.0:8000
depends_on:
- db
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- postgres_db=galerim
- postgres_user=postgres
- postgres_password=enes
container_name: postgres_db

volumes:
postgres_data
  • depends_on: Veritabanı servisinin oluşturulmasında önce db servisinin oluşmasını gerektiren bir diğer servis ile bağlantı kurar. Bu durumda, app servisi, veritabanı servisinin (db) oluşmasını bekler.
  • db: Servisin adıdır.
  • image: Docker Hub’daki postgres imajını kullanacak şekilde belirtilmiştir.
  • volumes: Veritabanı için bir Docker volume’u oluşturur. postgres_data adında bir Docker volume’u oluşturulur ve /var/lib/postgresql/data/ dizinine bağlanır. Bu, verilerin kalıcı olarak saklanmasını sağlar.
  • environment: Veritabanı oluşturulurken kullanılacak ortam değişkenlerini belirtir.
  • container_name: Docker tarafından oluşturulacak olan konteynerin adını belirtir.

Tekrar build edelim. docker-compose up -d — build

Veritabanı sıfırdan oluşturulduğu için siteye girmek istediğimizde hata ile karşılaşacağız. Bu yüzden öncelikle migrate işlemlerini yapalım.

docker-compose run app python3 manage.py migrate

Migrate işlemi yaptık, artık sitemizi ziyaret edebiliriz.

Veritabanı boş olduğu için, beni bomboş sayfa karşılıyor 🙂

Admin paneline girebilmek için super user oluşturalım:

docker-compose run app python3 manage.py createsuperuser

Yukarıda ki yapıyı kullanarak Django komutlarını çalıştırabiliriz.

Bu makale buraya kadardı. Bir sonraki yazıda görüşmek üzere… 😊🙋‍♂️

Adblock Detected

Lütfen reklam engelleyicinizi devre dışı bırakarak bizi destekleyin.

Refresh Page