Python Flask Projesinde Docker Init ile Compose Dosyası

Docker projelerinde çoğu kişinin en çok zorlandığı nokta, uygulamayı konteynerleştirmek için gereken Dockerfile ve Compose yapılandırmalarını doğru şekilde oluşturmaktır. Manuel yazım süreci hem vakit alır hem de gözden kaçan küçük ayarlar yüzünden güvenlik açıkları ve beklenmeyen hatalar ortaya çıkabilir.

Docker Init Ne İşe Yarar ve Neden Tercih Edilmelidir?

docker init, projenizin bulunduğu dizini analiz eder ve uygulama tipinize göre Dockerfile ile Compose yapılandırmasını en iyi pratiklere uygun şekilde otomatik üretir.

docker init Hangi Dosyaları Otomatik Oluşturur?

docker init, proje dizinini analiz ettikten sonra Docker ile çalıştırma için gereken dosyaları otomatik üretir. Bu süreçte çalıştırma talimatlarının bulunduğu README.docker.md, imajın nasıl oluşturulacağını tanımlayan Dockerfile, Compose ile servisleri yönetmek için compose.yaml ve gereksiz dosyaları build sürecinden hariç tutan .dockerignore dosyaları proje içine eklenir.

README.docker.md Projenin nasıl çalıştırılacağına dair talimatlar.

Dockerfile Uygulamanın nasıl paketleneceğini belirler.

compose.yaml Çoklu konteyner yapılandırması için.

.dockerignore Gereksiz dosyaların imaja dahil edilmesini önler.

docker init Kullanmanın Avantajı Nedir?

Manuel Dockerfile yazımı çoğu zaman hem zaman kaybı hem de hata riski demektir. docker init ise standart şablonlarla daha güvenli ve hızlı bir başlangıç oluşturur.

ÖzellikManuel Dockerfiledocker init
HızOrta (Yazma + hata ayıklama)Çok hızlı (Saniyeler içinde)
GüvenlikKullanıcıya bağlıNon-root kullanıcı ile çalıştırır
PerformansDeğişkenMulti-stage yapılandırma üretebilir
Hata PayıYüksekMinimum (Standart yapı)

Sistem Gereksinimleri

docker init özelliğini kullanmak için Docker Desktop’ın belirli bir sürümün üzerinde olması gerekir. Bu komut için Docker Desktop sürümünüzün 4.19.0 veya üzeri olması yeterlidir. Mevcut sürümünüzü görmek için terminal üzerinden aşağıdaki komutları çalıştırabilirsiniz.

docker version
docker info

Ardından docker init komutunun sisteminizde bulunup bulunmadığını kontrol etmek için şu komutu çalıştıralım. Eğer yardım ekranı görüntüleniyorsa komut kullanılabilir demektir

docker init --help

docker init Nasıl Çalışır?

docker init, projenizi otomatik tanıyabilmek için dizin içinde genelde bir bağımlılık dosyası arar.

  • Python için requirements.txt
  • Go için go.mod
  • Node.js için package.json

Komutu Çalıştırma

Terminali açalım ve projenin ana dizinine geçelim. Ardından komutu çalıştıralım.

docker init

Python Projelerinde docker init Kullanımı

Python projelerinde Docker kullanırken en sık yapılan hata, Dockerfile’ın eksik veya yanlış yazılması nedeniyle imaj boyutunun büyümesi ve konteynerin güvenli olmayan şekilde çalıştırılmasıdır. Bu süreç manuel ilerletildiğinde hem zaman kaybı yaşanır hem de küçük ayarlar gözden kaçabilir. docker init ise Python projeleri için otomatik şablon oluşturarak süreci daha güvenli ve daha yönetilebilir hale getirir.

Dosyaların Hazırlanması

Docker’ın Python projesini otomatik tespit edebilmesi için proje dizininde iki dosya bulunması gerekir. Bunlardan biri uygulama kodunu içeren app.py, diğeri ise bağımlılıkların yer aldığı requirements.txt dosyasıdır. Bu noktada özellikle requirements.txt dosya adının doğru yazılması kritik bir detaydır, çünkü yanlış isimlendirilmiş bir dosya docker init tarafından otomatik tespiti engelleyebilir.

Örnek Flask Uygulaması

Aşağıdaki örnekte, test amacıyla basit bir Flask uygulaması oluşturuyoruz. Bu uygulamayı docker init ile Dockerfile ve Compose dosyaları üretmek için kullanacağız ve ilk dosyamız app.py olacak.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1>Docker Init ile Flask Hazır!</h1>"

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=8000)

requirements.txt

flask
gunicorn

docker init çalıştırdıktan sonra uygulama tipini Python seçelim. Giriş dosyasını ve portu belirtelim. Dosyalar oluştuktan sonra şu komutla güncele alalım.

docker compose up --build

docker init sürecinde Docker, yapılandırmayı doğru oluşturmak için sizden bazı bilgiler ister. Python projelerinde sorulara şu mantıkla cevap vermek gerekir:

  • Select Application Platform: Python seçilir (çoğu zaman otomatik önerilir)
  • Python Version: Varsayılan sürüm (ör. 3.11.x) seçmek genelde en sorunsuz seçenektir
  • Port: Flask projelerinde en yaygın portlar 5000 ve 8000’dir
  • Command: Uygulama komutu olarak python3 app.py veya gunicorn app:app girilebilir

Bu sorular, Docker’ın Dockerfile ve Compose dosyalarını otomatik üretmesi için gereklidir.

docker init Tarafından Oluşturulan Yapı

docker init ile sorular tamamlandıktan sonra Docker, proje dizinine otomatik olarak gerekli dosyaları ekler ve böylece proje Docker ortamında çalıştırılabilir hale gelir. Bu işlem sonunda dizinde Dockerfile, compose.yaml ve .dockerignore dosyaları oluşur.

Bu aşamadan sonra uygulamayı build edip çalıştırmak için tek bir komut yeterlidir. docker compose up --build komutu çalıştırıldığında Docker önce Dockerfile üzerinden imajı oluşturur, ardından compose.yaml içinde tanımlı port yönlendirmeleri ve servis ayarlarıyla konteyneri başlatır.

Sık Sorulan Sorular

docker init hangi dosyaları otomatik oluşturur?

docker init çalıştırıldığında proje dizinine otomatik olarak Dockerfile, compose.yaml, .dockerignore ve çoğu senaryoda README.docker.md dosyaları eklenir.

docker init Python projesini neden algılamıyor?

En yaygın sebep, bağımlılık dosyasının eksik olması veya yanlış isimlendirilmesidir. Python projelerinde dizinde mutlaka requirements.txt bulunmalıdır.

docker init ile oluşturulan Dockerfile güvenli midir?

Üretilen Dockerfile genellikle root olmayan kullanıcı (non-root) ile çalışma mantığını içerir. Bu yaklaşım, konteyner ele geçirilse bile yetki kapsamını sınırlandırır.

docker init sonrası Docker Compose çalışmıyor, “network not found” hatası neden olur?

Bu hata genellikle eski Compose projelerinden kalan network tanımları, silinmiş Docker ağları veya compose.yaml içinde referans verilen bir ağın sistemde bulunmaması nedeniyle oluşur.

Yorum yapın