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 prunesau dedocker run --rm. Dă volumelor un nume. - Declararea ca
VOLUMEa unor directoare cu cod sau dependențe (de exemplunode_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.