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

Bir uygulamayı Docker ile konteyner haline getirme sürecinde en büyük zorluk, Dockerfile ve compose.yaml gibi yapılandırma dosyalarını hatasız biçimde yazmaktır. Bu dosyaların manuel hazırlanması hem ciddi zaman kaybına neden olur hem de küçük bir hata bile güvenlik açıklarına ve çalıştırma problemlerine yol açabilir.

Docker Init Nedir ve Neden Kullanılır?

docker init, proje dizininizi tarayan ve uygulamanızın kullandığı dil ya da framework’e göre en uygun Docker yapılandırmasını otomatik şekilde oluşturan bir CLI aracıdır.

docker init Hangi Dosyaları Oluşturur?

docker init komutu çalıştırıldığında proje dizinine otomatik olarak bazı temel dosyalar eklenir. Bunların başında projenin Docker ile nasıl çalıştırılacağını anlatan README.docker.md, uygulamanın nasıl paketleneceğini belirleyen Dockerfile, çoklu konteyner yapılandırması için kullanılan compose.yaml ve gereksiz dosyaların imaja dahil edilmesini engelleyen .dockerignore yer alır.

Neden docker init Kullanmalısınız?

docker init, manuel Dockerfile yazımına göre hem daha hızlı hem daha güvenli bir başlangıç sağlar. Aşağıdaki tablo, iki yaklaşım arasındaki farkı net şekilde gösterir.

Ö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 sisteminizde Docker Desktop’ın güncel bir sürümü kurulu olmalıdır. Bu komutun kullanılabilmesi için Docker Desktop sürümünüzün v4.19.0 veya üzeri olması yeterlidir. Sürümü kontrol etmek için terminalde aşağıdaki komutları çalıştıralım.

docker version
docker info

docker init komutunun sisteminizde aktif 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 uygulamalarını konteynerleştirme sürecinde en büyük dert genellikle iki noktada ortaya çıkar. Birincisi, yanlış Dockerfile tercihleri nedeniyle imaj boyutunun kontrolsüz büyümesidir; ikincisi ise güvenlik tarafında root kullanıcıyla çalışma gibi riskli ayarların fark edilmeden bırakılmasıdır. docker init, Python projeleri için bu süreci otomatik hale getirerek hem hız kazandırır hem de daha güvenli bir başlangıç sağlar.

Dosyaların Hazırlanması

Docker’ın Python projesini otomatik olarak tanıyabilmesi için proje dizininde iki dosyanın hazır olması gerekir. Uygulama kodunu içeren app.py dosyası ve bağımlılıkları listeleyen requirements.txt dosyası bu aşamada temel rol oynar. Burada requirements.txt dosya adının yanlış yazılması, docker init komutunun Python projesini otomatik algılamasını engelleyebilir.

Örnek Flask Uygulaması

Aşağıdaki örnekte, Docker init sürecini göstermek için basit bir Flask uygulaması hazırlıyoruz.

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ı

Kurulum soruları tamamlandığında docker init, proje dizinini Docker ile çalıştırılabilir hale getirmek için otomatik olarak bazı dosyalar oluşturur. Bu dosyalar Dockerfile, compose.yaml ve .dockerignore dosyalarıdır. Bu noktadan sonra proje artık Docker ile ayağa kaldırılabilecek bir yapıdadır.

Oluşturulan yapıdan sonra uygulamayı build edip çalıştırmak için yalnızca tek bir komut kullanılır. docker compose up --build komutu çalıştırıldığında Docker önce Dockerfile üzerinden imajı üretir, ardından Compose yapılandırmasını kullanarak 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