Görüntülenme: 153
Yayın Tarihi: 23-08-2023
Öncelikle Docker hakkında genel bilgi edinmek için şu yazımı okumanızı tavsiye ederim.
Bu yazıda, 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.
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
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
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.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.
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… 😊🙋♂️