Dockerfile: bir konteyner imajı oluşturmak
Kısaca: Dockerfile, Docker’ın konteynerlerin şablonu olan imajı oluşturduğu adımları içeren bir metin dosyasıdır.
Biraz daha ayrıntılı: Bir imaj programı, çalışma zamanını ve bağımlılıkları içerir; konteynerler ondan başlatılır. Dockerfile, imajın komut komut nasıl oluşturulduğunu tanımlar. Her komut önbelleğe alınan bir katman oluşturur; böylece yeniden derlemede yalnızca değişen katmanlar yeniden oluşturulur.
Ayrıntılı
Bir Node.js uygulaması için örnek
FROM node:22-alpine # temel imaj
WORKDIR /app # çalışma dizini
COPY package*.json ./ # önce yalnızca paket listeleri
RUN npm ci --omit=dev # bağımlılıkları kur
COPY . . # sonra geri kalanı kopyala
EXPOSE 3000 # port hakkında not
USER node # root olarak çalıştırma
CMD ["node", "server.js"] # başlatma komutuDerleme ve başlatma:
docker build -t my-app:1.0 .
docker run -p 3000:3000 my-app:1.0
Önemli yönergeler
FROM: temel imaj (mümkün olduğunca küçük ve sabit sürümlü).RUN: derleme zamanında bir komut yürütür.COPY/ADD: dosyaları içeri kopyalar (COPYtercih edin).ENV,ARG: değişkenler.CMD,ENTRYPOINT: konteynerin başlangıcındaki komut.HEALTHCHECK: uygulamanın çalışıp çalışmadığını denetler.
İyi uygulama
- Sıradan yararlanın: nadiren değişenler (bağımlılıklar) önce, kaynak kod en son; böylece önbellek işe yarar.
.gitignoregibi.dockerignore:node_modules,.git, sırları imaja koymayın.- Çok aşamalı derlemeler (multi-stage): bir aşamada derleyin, yalnızca sonucu ince bir son imaja kopyalayın.
- Root olarak çalıştırmayın, temel imajı güncel tutun ve açıkları denetleyin (
docker scout, Trivy). - Dockerfile’da parola olmasın: katmanlarda görünür kalırlar.
Çok aşamalı örnek
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /app
FROM gcr.io/distroless/static
COPY --from=build /app /app
CMD ["/app"]Son imaj yalnızca bitmiş programı içerir, derleyiciyi değil; bu yüzden küçüktür ve saldırıya daha az açıktır.
Ayrıca bak: Docker, Konteyner güvenliği, Podman ve Docker, Ortam değişkenleri