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.
Kunci versi image atau digest yang tepat di produksi, dan build ulang secara rutin untuk mendapatkan pembaruan keamanan.
Alat Terkait
Lihat SemuaApa 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
- Pilih Bahasa / stack.
- Atur Versi runtime (tag image), Port, dan nama file awal, modul, JAR, atau binary.
- Biarkan Build multi-stage (image lebih kecil) dan Jalankan sebagai pengguna non-root tercentang kecuali Anda punya alasan lain.
- Unduh Dockerfile dan .dockerignore ke root proyek Anda dan jalankan
docker build -t myapp ..
Contoh
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
# 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.