Skip to content

Cum să scrii un Dockerfile eficient

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să scrii un Dockerfile eficient. We cover key concepts, practical examples, and best practices.

Vei învăța cum să scrii un Dockerfile eficient care produce imagini sigure, rapide și ușor de întreținut.

Problema

Un Dockerfile scris necorespunzător produce imagini mari (1GB+), build-uri lente și vulnerabilități de securitate. Straturi prost ordonate și lipsa multi-stage builds duc la timpi de deploy lenți și costuri ridicate de stocare.

Modul Greșit

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y nodejs npm
COPY . .
RUN npm install
CMD ["npm", "start"]

Imaginea rezultată este mare, include pachete inutile și expune codul sursă.

Modul Corect

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

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

Output:

docker images myapp
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myapp        latest    a1b2c3d4e5f6   About a minute ago   89.5MB

Pași Detaliați

1. Alege o imagine de bază optimizată

FROM node:18-alpine   # ~120MB vs ~1GB pentru ubuntu
FROM python:3.11-slim # ~150MB vs ~900MB pentru python:3.11

2. Ordonează straturile pentru cache optim

Copiază fișierele care se schimbă rar primele.

COPY package*.json ./
RUN npm install
COPY . .

3. Folosește multi-stage build

Separă mediul de build de cel de producție.

FROM golang:1.21 AS build
COPY . .
RUN go build -o /app

FROM alpine
COPY --from=build /app /app
CMD ["/app"]

Sfaturi de Prevenire

  • Combină instrucțiunile RUN apt-get update && apt-get install într-un singur strat
  • Adaugă .dockerignore pentru a exclude fișiere inutile
  • Nu folosi latest ca tag -- specifică versiunea exactă
  • Verifică imaginea finală cu docker scout sau trivy pentru vulnerabilități

Greșeli Comune

  1. Ordinea greșită a straturilor -- cache-ul este invalidat des și build-ul devine lent
  2. Un singur strat masiv -- combină prea multe operații într-un singur RUN
  3. Secret leak -- chei API și parole incluse în imagine
  4. Multi-stage nefolosit -- uneltele de build (compilator, test) ajung în imaginea finală
  5. Imagine de bază prea mare -- ubuntu:latest în loc de alpine sau slim

Întrebări Frecvente

### Care este diferența dintre CMD și ENTRYPOINT?

CMD oferă argumente implicite care pot fi suprascrise la docker run. ENTRYPOINT definește comanda executată și nu poate fi suprascrisă ușor, doar argumentele.

De ce să folosesc alpine?

Imaginile alpine sunt de 5-10 ori mai mici, reducând timpul de download și spațiul de stocare, dar pot lipsi biblioteci comune.

Ce este un multi-stage build?

Este o tehnică Docker care folosește mai multe instrucțiuni FROM, permițând copierea doar a artifactelor necesare din mediul de build în imaginea finală.

Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Docker pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro