Dockerfile-generator
Een Dockerfile is zo’n bestand dat kort lijkt totdat je de details onthoudt: laagvolgorde is belangrijk voor de cache, COPY package.json gaat vóór RUN npm install, en gecompileerde talen profiteren van een multi-stage build. Deze generator schrijft een kant-en-klaar Dockerfile voor de stack die je kiest, met het cachepatroon al correct.
Zo genereer je een Dockerfile
-
1
Kies de stack
Node.js, Python, PHP, Go of Rust. Elke sjabloon gebruikt een passend basis-image voor die taal en het juiste commando om afhankelijkheden te installeren.
-
2
Stel de werkmap en poort in
Kies de WORKDIR en de poort waar je app op luistert; beide worden in het gegenereerde bestand gezet.
-
3
Controleer het Dockerfile
Controleer of de EXPOSE-regel en het startcommando bij je app passen. De Go- en Rust-sjablonen gebruiken een multi-stage build.
-
4
Kopieer het Dockerfile
Kopieer het resultaat, plak het in de hoofdmap van je repository en bouw daarna de image.
Waarom multi-stage builds
Een naïef Dockerfile installeert de hele compiler-toolchain in de uiteindelijke image. Multi-stage builds geven je een “builder”-fase die compileert en een eindfase die alleen het gecompileerde artefact bevat:
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"]
De eindimage laat elke ontwikkelafhankelijkheid, elk bronbestand en de buildcache weg, waardoor de image vaak 60-80 procent kleiner wordt.
Basis-imagevarianten
De sjablonen gebruiken waar mogelijk slim- of alpine-images. Pas je het basis-image zelf aan, dan zijn dit de gebruikelijke opties:
| Variant | Typische grootte | Wanneer kiezen |
|---|---|---|
| full | 300-900 MB | Ontwikkelimages, ongebruikelijke systeemafhankelijkheden |
| slim | 80-200 MB | Productiestandaard voor de meeste talen |
| alpine | 30-100 MB | Kleine images, let op glibc-vs-musl-problemen |
| distroless | 20-80 MB | Maximale beveiliging; geen shell, geen pakketbeheerder |
Regels voor laagcaching
Docker cached elke regel; zodra een laag verandert, wordt alles eronder opnieuw gebouwd. Volgorde van minst naar meest veranderlijk:
- Basis-image
FROM(verandert zelden). - Systeempakketten (
apt-get install), zeldzame wijzigingen. - Afhankelijkheidsmanifests (
package.json,requirements.txt,composer.json). - Installatiestap voor afhankelijkheden. Draait alleen wanneer het manifest verandert.
- Kopie van de broncode. De drukste laag; alles erna wordt bij elke commit herbouwd.
- Compileren en uiteindelijke
CMD.
Deze volgorde doorbreken is de meest voorkomende reden dat CI-builds traag worden.
Beveiligingscontrolelijst
- Uitvoeren als niet-root. Zet
USER appuser(ofUSER 1000) aan het einde. - Versies vastpinnen.
python:3.12.7-slimverslaatpython:3.12, datpython:latestverslaat. - Stel een expliciete
WORKDIRin in plaats van op/te vertrouwen. - Gebruik
COPYin plaats vanADDvoor lokale bestanden;ADDheeft bijwerkingen door automatische extractie. - Voeg een
HEALTHCHECKtoe zodat orchestrators een vastgelopen proces kunnen detecteren. - Ruim pakketcaches op in dezelfde
RUN-regel:apt-get install ... && rm -rf /var/lib/apt/lists/*.
Veelgestelde vragen
Slim is een veiligere standaard omdat het nog steeds op glibc is gebaseerd, net als de meeste voorgecompileerde wheels van bibliotheken. Alpine gebruikt musl en veroorzaakt af en toe mysterieuze runtime-bugs in Python (pandas, numpy) of Node (node-gyp native modules). Kies alpine wanneer imagegrootte cruciaal is en je de stack hebt getest.
Ja, voeg er een toe aan je project. Zonder die file stuurt Docker je hele repository als buildcontext naar de daemon: git-geschiedenis, node_modules, lokale .env-bestanden, tests. Dat is traag, verspilt cache en lekt geheimen.
Ja. Gebruik docker buildx met de optie --platform om voor beide architecturen tegelijk te bouwen. De basis-images die de sjablonen gebruiken, leveren arm64-varianten.
Nee. De keuzes voor stack, werkmap en poort worden alleen gebruikt om het Dockerfile op deze pagina te genereren; er wordt niets opgeslagen of gedeeld.
Gerelateerde tools
ASCII-tabelreferentie
Volledige ASCII-tabel van 0 tot 127 met decimale, hexadecimale, octale en binaire waarden en HTML-numerieke referentienotatie, inclusief control codes zoals NUL, LF en DEL.
HTML-tekenreferentie
Een doorzoekbare lijst met HTML-entiteiten, hun benoemde en numerieke codes, plus kopiëren met één klik voor speciale tekens en symbolen.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
HAR-bestandsviewer
Open HAR-netwerkopnamen lokaal, filter verzoeken, bekijk gemaskeerde headers en timing en exporteer opgeschoonde samenvattingen zonder upload.
ASCII naar binair-converter
Converteer elke ASCII-string naar zijn binaire representatie. Elk teken wordt acht bits, gescheiden door spaties, klaar voor protocoltrace of huiswerk.
Telefoonnummers controleren
Controleer de structuur van telefoonnummers per land en bekijk regio, type en E.164-, internationale, nationale en RFC 3966-notatie.
Tool beschikbaar in andere talen
- Dockerfile Oluşturucu [TR]
- Generador de Dockerfile [ES]
- مولد ملفات Docker [AR]
- Générateur de Dockerfile [FR]
- Dockerfile 생성기 [KO]
- Generator Dockerfile [ID]
- Dockerfile Generator [EN]
- Trình tạo Dockerfile [VI]
- Dockerfile 生成器 [ZH]
- Dockerfile生成 [JA]
- ตัวสร้าง Dockerfile [TH]
- Gerador de Dockerfile [PT]
- Dockerfile-Generator [DE]
- Dockerfile-generator [SV]
- Generator Dockerfile [PL]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]