Python Flask İçin Docker Init ile Otomatik Dockerfile Oluşturma

Konteyner dünyasında en büyük zorluk, uygulamayı Docker’a uygun hale getirmek için gerekli yapılandırma dosyalarını doğru formatta ve hatasız şekilde yazabilmektir. Dockerfile ve compose.yaml gibi dosyalar manuel hazırlanırsa hem zaman kaybedilir hem de yanlış ayarlar güvenlik açıklarına ve deploy sorunlarına davetiye çıkarabilir.

Docker Init Nedir?

docker init, proje dizinindeki dosyaları analiz ederek uygulamanızın dilini tespit eden ve buna uygun Docker yapılandırmasını otomatik hazırlayan 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.

docker init Ne Kazandırır?

docker init, Dockerfile yazımını hızlandırmakla kalmaz; aynı zamanda güvenlik ve performans tarafında da doğru bir başlangıç sağlar. Aşağıdaki karşılaştırma, iki yöntemin farkını açık şekilde ortaya koyar.

ÖzellikManuel Dockerfiledocker init
HızOrta (Yazma + hata ayıklama)Çok hızlı (Saniyeler içinde)
GüvenlikKullanıcıya bağlıRoot olmayan kullanıcıyla çalışır
PerformansDeğişkenMulti-stage yaklaşımını destekler
Hata PayıYüksekMinimum (Standart şablonlar)

Sistem Gereksinimleri

Bu rehberde kullanılandocker init komutu Docker Desktop ile birlikte gelir ve çalışması için belirli bir sürüm gerektirir. Docker Desktop sürümünüzün 4.19.0 veya daha yeni olduğundan emin olmanız yeterlidir. Terminal üzerinden sürüm kontrolünü aşağıdaki komutlarla yapabiliriz.

docker version
docker info

Son olarak docker init komutunun sisteminizde bulunup bulunmadığını doğrulamak için aşağıdaki komutu çalıştıralım. Yardım ekranı görüntüleniyorsa komut hazır demektir.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 problem, imaj boyutunun gereksiz şekilde büyümesi ve güvenlik ayarlarının (özellikle root olmayan kullanıcı kullanımı gibi) gözden kaçırılmasıdır. docker init, daha ilk aşamada doğru bir Dockerfile yapısı oluşturarak bu sorunları en baştan kontrol altına almayı kolaylaştırır.

Dosyaların Hazırlanması

Docker’ın Python projesini otomatik olarak tanıyabilmesi için proje dizininde mutlaka iki temel dosya bulunmalıdır. Bunlardan ilki uygulama kodunun yer aldığı app.py, diğeri ise bağımlılıkların listelendiği requirements.txt dosyasıdır. Burada dosya adının mutlaka requirements.txt olması gerekir, çünkü yanlış yazılmış bir dosya adı docker init komutunun Python projesini otomatik algılamasını engelleyebilir.

Örnek Flask Uygulaması

Aşağıdaki gibi basit bir Flask uygulaması oluşturarak docker init sürecini rahatça test edebilirsiniz. Bu örnekte uygulama dosyamız app.py olacaktır.

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 (çoğu zaman otomatik algılar)
  • Python Version: Varsayılan sürüm (ör. 3.11.x) genelde en stabil ve güvenli seçenektir
  • Port: Uygulamanız hangi portu dinliyor? Flask projelerinde çoğunlukla 5000 veya 8000 kullanılır
  • Command: Uygulamayı nasıl başlatıyorsunuz? Örnek komutlar: python3 app.py veya gunicorn app:app

Bu soruların amacı, Docker’ın sizin yerinize doğru Dockerfile ve Compose yapılandırmasını otomatik üretmesidir.

docker init Tarafından Oluşturulan Yapı

docker init soruları tamamlandıktan sonra Docker, projenizi Docker ile çalıştırılabilir hale getirmek için dizine otomatik olarak bazı dosyalar ekler. Bu dosyalar Dockerfile, compose.yaml ve .dockerignore dosyalarıdır. Bu noktadan sonra proje artık standart bir Docker yapısına sahip olur.

Bu aşamadan sonra uygulamayı build edip çalıştırmak için tek komut yeterlidir. docker compose up --build komutu çalıştırıldığında Docker önce Dockerfile üzerinden imajı oluşturur, ardından Compose yapılandırması üzerinden uygulamayı konteyner içinde 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