Dockerfile: VOLUME în Docker

Dockerfile Docker 1.0+

Marchează un director din imagine ca punct de montare pentru date persistente; Docker creează automat un volum anonim dacă nu dai altul.

Sintaxă comandă
VOLUME ["/cale"]
VOLUME /cale1 /cale2

Ce face Dockerfile: VOLUME

VOLUME /var/lib/postgresql/data spune că acel director conține date care trebuie să supraviețuiască containerului. La docker run, dacă nu montezi tu ceva acolo (-v nume:/cale), Docker creează un volum anonim, cu nume lung generat aleatoriu, și îl copiază inițial cu conținutul din imagine.

VOLUME e mai mult o declarație pentru cei care folosesc imaginea. În practică, e mai clar să montezi un volum cu nume, la rulare sau în compose.yaml. Atenție: cu builderul clasic (fără BuildKit), modificările făcute în acel director după instrucțiunea VOLUME se pierd la build; cu BuildKit (implicit în versiunile actuale) se păstrează, dar e mai sigur să pregătești datele înainte de VOLUME.

Parametri

Parametru Descriere
VOLUME /date Declară un punct de montare.
VOLUME ["/date", "/jurnale"] Forma JSON, pentru mai multe directoare.
docker run -v nume:/date Montează un volum cu nume în locul celui anonim.
docker run --rm La oprire, șterge containerul și volumele lui anonime.

Exemple

Exemplul 1: Imagine cu director de date declarat

Aplicația scrie fișierele încărcate de utilizatori în /app/incarcari.

FROM python:3.13-slim
WORKDIR /app
COPY . .
RUN mkdir -p /app/incarcari
VOLUME /app/incarcari
CMD ["python", "app.py"]

Exemplul 2: Volum anonim față de volum cu nume

Fără -v apare un volum cu nume aleatoriu; cu -v datele ajung într-un volum ușor de recunoscut.

docker run -d --name galerie1 galerie
docker run -d --name galerie2 -v galerie_incarcari:/app/incarcari galerie
docker volume ls
docker inspect -f '{{json .Config.Volumes}}' galerie

Ieșire în terminal

DRIVER    VOLUME NAME
local     8c4f1e0b7a2d93f5e6c1b0a7d4e2f9c3b8a5d1e6f0c7b2a9e4d3f8c1b6a0e5d2
local     galerie_incarcari
{"/app/incarcari":{}}

Greșeli frecvente

  • Bazarea pe volume anonime pentru date importante: sunt greu de identificat și pot fi șterse de docker volume prune sau de docker run --rm. Dă volumelor un nume.
  • Declararea ca VOLUME a unor directoare cu cod sau dependențe (de exemplu node_modules): la actualizarea imaginii, volumul vechi rămâne montat peste fișierele noi.

Comenzi înrudite

  • Dockerfile: USER: Stabilește utilizatorul (și grupul) cu care rulează instrucțiunile următoare și procesul principal al containerului.
  • Dockerfile: LABEL: Adaugă metadate cheie-valoare imaginii (versiune, autor, depozit sursă), vizibile cu docker inspect și folosite la filtrare.