Generator Dockerfile

Dockerfile
Hasil

Dockerfile adalah salah satu file yang tampak pendek sampai Anda ingat detailnya: urutan layer penting untuk cache, COPY package.json harus sebelum RUN npm install, dan bahasa terkompilasi diuntungkan oleh build multi-stage. Generator ini menulis Dockerfile siap pakai untuk teknologi pilihan Anda dengan pola cache yang sudah benar.

Cara membuat Dockerfile

  1. 1

    Pilih teknologi

    Node.js, Python, PHP, Go, atau Rust. Setiap template memakai base image yang sesuai untuk bahasa tersebut dan perintah instalasi dependensi yang benar.

  2. 2

    Atur direktori kerja dan port

    Pilih WORKDIR dan port yang dipakai aplikasi Anda; keduanya ditulis ke file yang dihasilkan.

  3. 3

    Periksa Dockerfile

    Pastikan baris EXPOSE dan perintah start cocok dengan aplikasi Anda. Template Go dan Rust memakai build multi-stage.

  4. 4

    Salin Dockerfile

    Salin hasilnya dan tempel ke root repositori Anda, lalu build image.

Mengapa build multi-stage

Dockerfile yang naif menginstal seluruh toolchain compiler ke image final. Build multi-stage memberi Anda tahap “builder” yang mengompilasi dan tahap final yang hanya membawa artefak hasil kompilasi:

FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

Image final membuang semua dependensi dev, file sumber, dan cache build, sering kali memangkas ukuran image hingga 60-80 persen.

Varian base image

Template memakai image slim atau alpine jika memungkinkan. Jika Anda menyesuaikan base image sendiri, inilah pilihan umumnya:

Varian Ukuran umum Kapan memilihnya
full 300-900 MB Image pengembangan, dependensi sistem yang tidak biasa
slim 80-200 MB Standar produksi untuk sebagian besar bahasa
alpine 30-100 MB Image kecil, waspadai masalah glibc vs musl
distroless 20-80 MB Keamanan maksimal; tanpa shell, tanpa package manager

Aturan cache layer

Docker men-cache setiap baris; begitu satu layer berubah, semua di bawahnya dibangun ulang. Urutan dari yang paling jarang hingga paling sering berubah:

  1. Base image FROM (jarang berubah).
  2. Paket sistem (apt-get install), perubahan jarang.
  3. Manifest dependensi (package.json, requirements.txt, composer.json).
  4. Langkah instalasi dependensi. Hanya berjalan saat manifest berubah.
  5. Salinan kode sumber. Layer paling sibuk; semua setelahnya dibangun ulang setiap commit.
  6. Kompilasi dan CMD final.

Melanggar urutan ini adalah alasan paling umum build CI menjadi lambat.

Daftar periksa keamanan

  • Jalankan sebagai non-root. Setel USER appuser (atau USER 1000) di dekat akhir.
  • Pin versi. python:3.12.7-slim lebih baik daripada python:3.12, yang lebih baik daripada python:latest.
  • Tetapkan WORKDIR eksplisit daripada mengandalkan /.
  • Gunakan COPY, bukan ADD, untuk file lokal; ADD punya efek samping ekstraksi otomatis.
  • Tambahkan HEALTHCHECK agar orchestrator dapat mendeteksi proses yang macet.
  • Bersihkan cache paket di baris RUN yang sama: apt-get install ... && rm -rf /var/lib/apt/lists/*.

Pertanyaan yang Sering Diajukan

Slim adalah default yang lebih aman karena masih berbasis glibc, seperti kebanyakan wheel terkompilasi pustaka. Alpine memakai musl dan kadang menimbulkan bug runtime misterius di Python (pandas, numpy) atau Node (modul native node-gyp). Pilih alpine saat ukuran image sangat penting dan Anda sudah menguji teknologi tersebut.

Ya, tambahkan satu ke proyek Anda. Tanpa itu, Docker mengirim seluruh repositori ke daemon sebagai build context: riwayat git, node_modules, file .env lokal, tes. Itu lambat, membuang cache, dan membocorkan secret.

Ya. Gunakan docker buildx dengan opsi --platform untuk membangun kedua arsitektur sekaligus. Base image yang dipakai template menerbitkan varian arm64.

Tidak. Pilihan teknologi, direktori kerja, dan port hanya dipakai untuk merender Dockerfile di halaman ini; tidak ada yang disimpan atau dibagikan.

Alat Terkait

Alat ini tersedia dalam bahasa lain