Generator Dockerfile

Buat Dockerfile siap produksi untuk Node.js, Python, Go, Java, .NET, Rust, atau situs statis: build multi-stage, pengguna non-root, dan .dockerignore yang sesuai.

Dockerfile
.dockerignore

Kunci versi image atau digest yang tepat di produksi, dan build ulang secara rutin untuk mendapatkan pembaruan keamanan.

Alat Terkait

Lihat Semua

Apa itu Generator Dockerfile?

Buat Dockerfile yang mengikuti praktik terbaik terkini untuk Node.js, Python, Go, Java (Maven), .NET (ASP.NET Core), Rust, atau Situs statis (build Node + Nginx). Opsinya mencakup build multi-stage untuk image yang lebih kecil, menjalankan sebagai pengguna non-root, versi runtime, port, dan perintah start, dan alat ini juga menghasilkan .dockerignore yang sesuai.

Cara menggunakan Generator Dockerfile

  1. Pilih Bahasa / stack.
  2. Atur Versi runtime (tag image), Port, dan nama file awal, modul, JAR, atau binary.
  3. Biarkan Build multi-stage (image lebih kecil) dan Jalankan sebagai pengguna non-root tercentang kecuali Anda punya alasan lain.
  4. Unduh Dockerfile dan .dockerignore ke root proyek Anda dan jalankan docker build -t myapp ..

Contoh

Masukan
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
Keluaran
# syntax=docker/dockerfile:1

# ---- dependencies (production only) ----
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

# ---- build ----
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---- runtime ----
FROM node:22-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=deps --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
COPY --chown=node:node package.json ./
# The official Node images ship an unprivileged "node" user
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

Kapan menggunakan Generator Dockerfile

Pakai untuk mengonteinerisasi layanan web atau API biasa dengan cepat dengan default yang masuk akal. Tinjau file hasil untuk proyek Anda: perintah build, folder keluaran, dan entry point bervariasi, dan dependensi native mungkin memerlukan paket sistem tambahan. Kunci versi image atau digest yang persis untuk build produksi yang dapat direproduksi.

Cara kerja Generator Dockerfile

Setiap stack punya template yang ditulis untuk image resminya. Build multi-stage menginstal dan mengompilasi di image SDK penuh dan hanya menyalin hasilnya ke runtime ramping: Node menginstal dependensi produksi dengan npm ci --omit=dev di stage terpisah; Python membangun virtualenv dan menyalinnya ke python:<ver>-slim; Go mengompilasi binary statis (CGO_ENABLED=0, -trimpath -ldflags="-s -w") ke distroless/static:nonroot; Java menyalin JAR ke image Temurin yang hanya berisi JRE; .NET mempublikasikan ke image runtime aspnet dan memakai pengguna bawaannya $APP_UID; Rust menyalin binary rilis ke debian:bookworm-slim. Mode non-root memakai pengguna tanpa hak istimewa milik image (node, nonroot, app) atau membuat satu dengan UID 10001. Manifes dependensi disalin sebelum kode sumber agar cache layer Docker melewati instalasi ulang ketika hanya kode yang berubah.

Kasus Penggunaan Umum

  • Mengonteinerisasi API Node.js atau Python untuk deployment
  • Memperkecil image layanan Go dengan runtime distroless
  • Menyajikan hasil build React/Vue/Astro dengan Nginx non-root
  • Mengajarkan atau meninjau praktik terbaik Dockerfile

Catatan Keamanan

Jangan pernah COPY file .env atau kredensial ke dalam image; berikan rahasia saat runtime atau dengan secret mount BuildKit.

Pertanyaan Umum

Mengapa memakai build multi-stage?

Compiler, dependensi dev, dan file sumber tetap di stage build, sehingga image akhir lebih kecil, lebih cepat dijalankan, dan memiliki lebih sedikit paket yang mungkin mengandung kerentanan.

Mengapa menjalankan sebagai pengguna non-root?

Jika aplikasi diretas, penyerang tidak mendapat root di dalam container, yang membatasi kerusakan dan menghalangi beberapa teknik container escape.

Apa fungsi .dockerignore?

File ini mengecualikan file seperti node_modules, .git, dan .env dari konteks build, membuat build lebih cepat dan menjaga rahasia tetap di luar image.

Jelajahi kategori lainnya