Bu bölümde Microblog Docker container teknolojisiyle dağıtılıyor. Docker, uygulamayı bağımlılıklarıyla birlikte izole bir ortamda çalıştıran hafif sanallaştırma çözümüdür. Linux, Windows ve macOS'ta çalışır; geliştirme ve üretim ortamını birbirine yaklaştırır.
https://docs.docker.com/get-docker/ adresinden Docker Desktop indirin ve kurun.
Kurulumu doğrulayın:
$ docker version
Dockerfile (proje kök dizininde)FROM python:slim
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
RUN pip install gunicorn pymysql cryptography
COPY app app
COPY migrations migrations
COPY microblog.py config.py boot.sh ./
RUN chmod a+x boot.sh
ENV FLASK_APP microblog.py
RUN flask translate compile
EXPOSE 5000
ENTRYPOINT ["./boot.sh"]
Komutların açıklaması:
| Komut | Açıklama |
|---|---|
FROM python:slim |
Temel imaj: minimal Python imajı |
COPY |
Dosyaları host'tan container dosya sistemine kopyalar |
RUN pip install |
Bağımlılıkları kurar |
RUN chmod a+x boot.sh |
Başlatma scriptini çalıştırılabilir yapar (Windows uyumluluğu için) |
ENV FLASK_APP |
Container içinde ortam değişkeni tanımlar |
RUN flask translate compile |
Çeviri dosyalarını derler |
EXPOSE 5000 |
Container'ın 5000 portunu açar |
ENTRYPOINT |
Container başladığında çalışacak komutu belirtir |
boot.sh — Başlatma Scripti#!/bin/bash
while true; do
flask db upgrade
if [[ "$?" == "0" ]]; then
break
fi
echo Upgrade command failed, retrying in 5 secs...
sleep 5
done
exec gunicorn -b :5000 --access-logfile - --error-logfile - microblog:app
while true döngüsü — MySQL'in hazır olmasını bekler; veritabanı bağlantısı kurulana kadar yeniden dener.exec gunicorn — exec ile bash süreci Gunicorn ile değiştirilir; Docker container ömrü bu sürece bağlıdır.-access-logfile - ve -error-logfile - — logları stdout'a yönlendirir; Docker tarafından yakalanır.