"Enter"a basıp içeriğe geçin

Python Flask İçin Docker Init Dockerfile ve Compose Yapılandırması

Docker projelerinde en büyük zorluk, uygulamayı konteyner haline getirmek için gereken yapılandırma dosyalarını hatasız yazmaktır. Manuel yazım hem vakit alır hem de güvenlik açıklarına yol açabilir.

Docker ekibi tarafından geliştirilen docker init komutu, bu süreci tamamen otomatiğe bağlayarak manuel hata payını sıfıra indirir.

Docker init Nedir ve Neden Kullanmalıyız?

docker init, projenizin dizinini analiz eden ve uygulamanızın diline göre en iyi Docker yapılandırmasını otomatik oluşturan bir CLI aracıdır.

docker init Hangi Dosyaları Oluşturur?

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.

Neden docker init Kullanmalısınız?

ÖzellikManuel Dockerfiledocker init
HızOrta Yazma + Hata AyıklamaÇok Hızlı Saniyeler içinde
GüvenlikKullanıcıya bağlıRoot olmayan (non-root) kullanıcı atar
PerformansDeğişkenÇok katmanlı (Multi-stage) yapılandırma sunar
Hata PayıYüksekMinimum (Standart şablonlar kullanılır)

Sistem Gereksinimleri

docker init komutunu kullanabilmek için Docker Desktop v4.19.0 veya üzeri bir sürüme sahip olmanız yeterlidir. Terminalinizde docker version yazarak bunu kontrol edebilirsiniz.

docker version
docker info

docker init komutunun sisteminde olup olmadığını kontrol etmek için de aşağıdaki komutu uygulayalım. Eğer yardım ekranı açılıyorsa komut kullanılabilir durumdadır.

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 büyük dert, imajın çok büyük olması ve güvenlik ayarlarının unutulmasıdır.

Dosyaların Hazırlanması

Docker’ın Python projesini otomatik tanıması için dizininizde mutlaka şu iki dosya bulunmalıdır.

  • app.py: Uygulama kodunuz.
  • requirements.txt: Bağımlılıklarınız

Dosya adı mutlaka requirements.txt olmalıdır. Yanlış yazılmış bir dosya adı docker init’in Python projesini otomatik algılamasını engelleyebilir.

Örnek Flask Uygulaması

Aşağıdaki gibi basit bir Flask uygulaması oluşturabilirsiniz.

app.py

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 çalıştığında ekranda bazı sorular görürsünüz. Bu soruları aşağıdaki mantıkla cevaplamak en doğru yaklaşımdır:

  • Select Application Platform: Python zaten çoğu zaman otomatik algılar.
  • Python Version: Varsayılan sürüm (ör. 3.11.x) en stabil ve güvenli seçenek genelde budur.
  • Port: Uygulamanız hangi portu dinliyor? flask projelerinde çoğunlukla 5000 veya 8000 kullanılır.
  • Command: Uygulamayı nasıl başlatıyorsunuz?
    • python3 app.py
    • gunicorn app:app

Bu soruların amacı, Docker’ın sizin yerinize doğru Dockerfile ve Compose dosyasını üretebilmesidir.

docker init Tarafından Oluşturulan Yapı

Sorular tamamlandıktan sonra Docker, proje dizinine otomatik olarak şu dosyaları ekler. Bu noktadan sonra proje Docker ile çalıştırılabilir hale gelir.

  • Dockerfile
  • compose.yaml
  • .dockerignore

Bu noktadan sonra proje Docker ile çalıştırılabilir hale gelir.

Oluşturulan yapıdan 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çindeki port yönlendirmelerini uygular

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir