Örnek Konfigürasyon

Dev

Dockerfile

Django dev ortamında çalışırken dosyalarımızı /code altından çalıştırmalıyız. Aksi halde kodda değişiklik yaptığımızda canlı ortama yansımayacaktır.

Uygulamamız hafif bir uygulama ise Docker Alpine kullanabiliriz. Eğer pillow, pandas, numpy kullanan bir uygulamamız varsa Docker Slim kullanmalıyız. Burada arkadaş meseleyi çok güzel anlatmış. https://stackoverflow.com/a/58210701/6520719

pillow, pandas, numpy yüklemelerinde bazen sorun yaşayabiliriz. stackoverflow da biraz araştırma yapmamız gerekiyor.

Postgres, Nginx, Redis, Celery, de Docker Alpine kullanabiliriz.

# pull official base image
FROM python:3.8.1-slim

# set work directory
WORKDIR /code

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -qq -y \
    build-essential libpq-dev libffi-dev --no-install-recommends git \
    python3-dev python3-setuptools


# install dependencies
RUN pip install --upgrade pip
COPY ./req_dev.txt /code/req_dev.txt
RUN pip install -r req_dev.txt

# copy entrypoint.sh
COPY ./entrypoint.sh /code/

# copy project
COPY . /code/

# run entrypoint.sh
ENTRYPOINT ["/code/entrypoint.sh"]

Dosyayı çalıştırabilmeyiz. chmod +x entrypoint.sh

Docker-compose.yml

Burada postgres bağlantımız yok. Çünkü local makinedeki postgres'e bağlanmayı tercih ediyorum. Problem sayfasına bakın.

.env.dev

Prod

Dockerfile.prod

Slim için

RUN groupadd -r app && useradd -r app -g app

Alpine için

RUN addgroup -S app && adduser -S app -G app

apt-get yerine aşağıdakini kullanmalıyız.

Docker-compose.prod.yml

Bu örnekte docker-nginx-proxy kullanılıyor ve Letsencrypt sertifika yükleniyor. Docker

Postgres'i de container içinden kullanıyoruz.

Bilgisayarımızdan http://localhost:1337 den sitemizi test etmek istersek. portu açıp expose yi kapatmalıyız. networks ve enviroment de kapatılacak.

.env.prod

env.prod.db

Nginx

/nginx dizini altında

Dockerfile

nginx.conf

Last updated