📝 Dockerfile
Dockerfile: Dockerfile, kendi image'ını inşa etmek için bir tariftir — her satır bir adımdır ve bir katman olarak pişer.
Dockerfile, kendi image'ını inşa etmek için bir tariftir — her satır bir adımdır ve bir katman olarak pişer. Docker Compose ise aynı anda birden fazla müzisyeni başlatan şef gibidir: 5 ayrı "docker run" komutunu elle yazmak yerine, tek bir "docker compose up" uygulamanı, veritabanını ve test runner'ını doğru sırayla bir arada ayağa kaldırır. Peki neden her şeyi tek bir dev Dockerfile'da başlatmıyoruz? Çünkü uygulama + veritabanı + test runner'ı tek bir image'da karıştırmak, birbiriyle hiç ilgisi olmayan yaşam döngülerini birbirine kenetler — uygulama kodunda tek satır düzeltsen bile veritabanı image'ını yeniden derlemiş olursun. Bu, Java'da birbiriyle alakasız sorumlulukları tek bir class'a tıkıştırmamanın arkasındaki mantıkla aynıdır; Compose'un YAML'ı aslında altyapı seviyesinde bir dependency injection'dır, ayrı ayrı versiyonlanan servisleri birbirine bağlar. QA mühendisi için bunun somut karşılığı şudur: flaky bir integration testi çoğu zaman senin test kodundan değil, test runner'ı veritabanı container'ının health check'i bitmeden başlatan bir "docker compose up"tan kaynaklanır.
Python test projesi için Dockerfile
Micro Lab: Dockerfile duzeltme
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Dockerfile'daki Satır Sırası Neden Build Hızını Belirler?
Docker, Dockerfile'ı SATIR SATIR çalıştırır…
Docker, Dockerfile'ı SATIR SATIR çalıştırır ve HER satırı ayrı bir KATMAN (layer) olarak CACHE'ler — bir satır DEĞİŞMEDİĞİ sürece o katman TEKRAR ÇALIŞTIRILMAZ.
requirements.txt'in COPY . .'DAN ÖNCE…
`requirements.txt`'in `COPY . .`'DAN ÖNCE kopyalanması KASITLIDIR: kod her değiştiğinde `COPY . .` katmanı BOZULUR ama `pip install` katmanı (requirements DEĞİŞMEDİYSE) CACHE'DEN gelir — dakikalar süren kurulumu ATLAR.
CMD, container BAŞLADIĞINDA çalışır…
`CMD`, container BAŞLADIĞINDA çalışır — `RUN` ise SADECE build SIRASINDA bir kez çalışır. Bu ikisini KARIŞTIRMAK, testlerin build ANINDA çalışıp SONUCUN hiçbir yere kaydedilmemesine yol AÇAR.
🎬 Dockerfile'dan Çalışan Container'a
RUN (Bağımlılık) Katmanı
Image (docker build)