Latihan 1 dari materi Dockerfile & Images di DevOps — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Isi function generateDockerfile(config) yang menyusun teks Dockerfile dari object config dan mengembalikannya sebagai satu string.
config berisi baseImage, workdir, dependencyFiles (daftar pasangan [sumber, tujuan] untuk file daftar dependency), runCommands (daftar perintah), sourceFiles (daftar pasangan [sumber, tujuan] untuk sisa kode), expose (angka port), dan cmd (daftar kata perintah jalan).
- Baris pertama
FROM <baseImage>, lalu WORKDIR <workdir>.
- Satu baris
COPY <sumber> <tujuan> untuk tiap pasangan di dependencyFiles, berurutan.
- Satu baris
RUN <perintah> untuk tiap isi runCommands.
- Satu baris
COPY <sumber> <tujuan> untuk tiap pasangan di sourceFiles.
- Lalu
EXPOSE <expose>.
- Terakhir
CMD [...]: tiap isi cmd dibungkus tanda kutip ganda dan dipisah koma plus satu spasi, misalnya CMD ["node", "server.js"].
- Gabungkan baris-barisnya dengan
\n, tanpa baris kosong di akhir.
Urutan ini yang bikin cache layer kepakai: file dependency di-COPY dulu dan di-install, baru kode sisanya. Mengubah kode cuma membangun ulang layer setelah COPY . ., jadi npm ci gak jalan lagi.
Panggilan console.log di kode awal biarkan. Yang diuji adalah string yang dikembalikan, dibandingkan persis:
- Untuk config di kode awal (
node:20-alpine), hasilnya tujuh baris ini:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
- Ada satu config PHP yang dicek diam-diam, dengan dua file dependency (
composer.json dan composer.lock), jadi pakai nilai dari config, jangan tulis teksnya langsung.