Meydan okuma - Dockerfile
- Docker & Kubernetes kursu
- Başlangıç
- Ders 78/82
- 5 dk
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
# buraya yazÖrnek çözüm
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
# buraya yazÖrnek çözüm
node_modules
.git
.env
npm-debug.log
DockerfileBeklenen çı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.
RUN npm ci ____
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 |