CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Dockerfile

Bir web uygulaması için Dockerfile yazarsın.

Meydan okuma: üretime hazır Dockerfile

Bu meydan okumada bir Node.js API'si için iyi uygulamaların hepsini tek Dockerfile'da birleştireceksin:

  • Sürümü sabit, küçük temel image
  • Önbellek dostu sıra (önce package*.json)
  • Yalnızca üretim bağımlılıkları
  • Root olmayan kullanıcı
  • Exec biçiminde başlangıç komutu
FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --chown=node:node . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]

Uygulama Dockerfile'ı yaz

Karttaki Dockerfile'ı yaz: node:20-alpine; ENV NODE_ENV=production; WORKDIR /app; package*.json'u kopyalayıp npm ci --omit=dev; kodu --chown=node:node ile kopyala; USER node; EXPOSE 3000; exec biçiminde node server.js.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --chown=node:node . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]

Beklenen çıktı

[+] Building 7.1s (12/12) FINISHED
 => naming to docker.io/library/api:1.0 done

Uygulama .dockerignore ekle

Aynı proje için .dockerignore yaz: node_modules, .git, .env, npm-debug.log ve Dockerfile dışlansın.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
node_modules
.git
.env
npm-debug.log
Dockerfile

Beklenen çıktı

 => [internal] load .dockerignore
 => => transferring context: 21.3kB

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yukarıdaki Dockerfile'da yalnızca server.js değişirse hangi adım yeniden çalışır?

  • Yalnızca FROM
  • Hiçbiri
  • COPY --chown=node:node . . ve sonrası Doğru cevap
  • npm ci dahil hepsi

Açıklama: package*.json değişmediği için npm ci önbellekten gelir.

2 Yalnızca üretim bağımlılıklarını kur.

Soru
RUN npm ci ____
Cevap
RUN npm ci --omit=dev

Açıklama: npm ci --omit=dev devDependencies'i atlar.

3 Uygulamaları amaçlarıyla eşleştir.

Kavram Anlamı
node:20-alpine Küçük ve sabit temel
önce package*.json Önbellek
USER node En az yetki
["node", "server.js"] Sinyal işleme

Başlangıç bölümündeki tüm dersler