Ce face Dockerfile: FROM și WORKDIR
Orice Dockerfile începe cu instrucțiunea FROM (singura excepție este ARG declarată înainte de FROM, folosită pentru a parametriza versiunea imaginii de bază). FROM stabilește sistemul de fișiere și uneltele de la care pornești: de exemplu python:3.12-slim, node:20-alpine sau chiar scratch (o imagine complet goală, pentru binare compilate static în Go sau Rust).
Alegerea variantei contează mult pentru dimensiune și securitate: imaginile -alpine (bazate pe Alpine Linux și biblioteca musl) au 5–50 MB, iar cele -slim (Debian minimal, cu glibc) au 50–150 MB și evită incompatibilitățile rare ale pachetelor native cu musl.
Instrucțiunea WORKDIR schimbă directorul curent pentru toate instrucțiunile următoare (RUN, COPY, ADD, CMD, ENTRYPOINT) și îl creează automat dacă nu există. Folosește întotdeauna WORKDIR în loc de RUN mkdir -p /app && cd /app, deoarece cd într-un RUN nu se păstrează în stratul următor.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
FROM imagine:etichetă |
Imaginea de bază; fixează întotdeauna o versiune (nu lăsa latest implicit). |
FROM ... AS nume |
Dă un nume etapei curente, astfel încât să poți copia artefacte din ea într-un build multi-stage (COPY --from=nume). |
FROM scratch |
Imagine specială, complet goală (0 octeți), pentru executabile statice care nu au nevoie de shell sau libc. |
WORKDIR /cale |
Setează directorul curent; dacă este relativă, se raportează la WORKDIR-ul anterior. |
Exemple
Exemplul 1: Începutul tipic al unui Dockerfile cu versiune parametrizabilă
Un ARG plasat înainte de FROM poate fi folosit în eticheta imaginii de bază.
ARG NODE_VERSION=20-alpine
FROM node:${NODE_VERSION}
WORKDIR /app
COPY package*.json ./
Greșeli frecvente
- Scrierea
RUN cd /appîntr-un strat și presupunerea că instrucțiuneaRUNurmătoare va rula tot în/app: fiecareRUNpornește un shell nou în directorulWORKDIR. - Folosirea
FROM ubuntusauFROM nodefără etichetă: peste câteva luni undocker build --no-cachepoate trage o versiune majoră nouă care rupe aplicația.
Comenzi înrudite
docker build: Construiește o imagine pe baza unui Dockerfile și a unui context de build.Dockerfile: Multi-stage builds: Construiește aplicația într-o etapă cu compilatoare și copiază doar rezultatul într-o imagine finală mică.Dockerfile: COPY și ADD: Copiază fișiere și directoare din contextul de build (sau din altă etapă) în imagine.Dockerfile: RUN: Execută comenzi în timpul construirii imaginii și salvează rezultatul într-un strat nou.