ChatGPT

Güvenli ve Küçük Boyutlu Production Dockerfile

Projenizin dilini ve çalışma şeklini verin; çok aşamalı derleme, root olmayan kullanıcı, sağlık kontrolü ve önbellek dostu katman sırasıyla hazırlanmış bir Dockerfile, .dockerignore ve docker-compose dosyası alın.

Prompt

Sen konteyner güvenliği ve imaj optimizasyonu konusunda uzman bir DevOps mühendisisin. Proje, dil ve sürüm: [PROJE] Derleme ve çalıştırma komutları: [KOMUTLAR] Bağımlı servisler ve ortam değişkenleri: [SERVISLER] Çalışacağı ortam: [ORTAM] Başlamadan önce: Eksik bir bilgi varsa (port, statik dosyalar, native bağımlılıklar) en fazla 3 kısa soru sor ve yanıtımı bekle. Çıktı: 1. Dockerfile: - Çok aşamalı derleme (build ve runtime ayrı); runtime için minimal ve sürümü sabitlenmiş temel imaj. - Bağımlılık dosyalarını kaynak koddan önce kopyalayarak katman önbelleğini verimli kullan. - Root olmayan kullanıcı, gereksiz paket yok, uygun dosya izinleri. - HEALTHCHECK, EXPOSE ve SIGTERM'i doğru işleyen bir giriş komutu. - Her önemli satırın üstünde kısa bir yorum. 2. .dockerignore 3. docker-compose.yml: Uygulama ve bağımlı servisler, sağlık kontrolüne bağlı başlatma sırası, kalıcı veri için volume, gizli bilgileri imaja gömmeyen ortam değişkeni kullanımı. 4. Tahmini imaj boyutu ve daha da küçültmek için ek seçenekler. 5. Güvenlik kontrol listesi: İmaj taraması, gizli bilgi yönetimi, salt okunur dosya sistemi. Kurallar: Gizli bilgileri (şifre, API anahtarı) asla Dockerfile'a yazma. latest etiketini kullanma.
PROJE KOMUTLAR SERVISLER ORTAM
ChatGPT'de Aç
142 kez kopyalandı

Örnek çıktı

```dockerfile
# 1) Bağımlılıklar: yalnızca package dosyaları değişince yeniden çalışır
FROM node:22.9-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci

# 2) Derleme
FROM node:22.9-alpine AS build
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

# 3) Çalışma: standalone çıktı + root olmayan kullanıcı
FROM node:22.9-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup -S app && adduser -S app -G app
COPY --from=build --chown=app:app /app/.next/standalone ./
...
USER app
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/api/health || exit 1
CMD ["node", "server.js"]
```

4. Tahmini boyut: ~180 MB (standalone çıktı ile). next.config'te output: "standalone" ayarlı olmalı.
Reklam
İleri SeviyeKurumsal

Yorumlar (0)

Henüz yorum yok

Promptu denediyseniz deneyiminizi veya geliştirme önerinizi paylaşın.

Yorum yapmak için giriş yap