docker volume în Docker

Volume și rețele Docker 1.9+

Creează, listează, inspectează și șterge volume gestionate de Docker pentru date persistente.

Sintaxă comandă
docker volume <create|ls|inspect|rm|prune> [opțiuni]

Ce face docker volume

Sistemul de fișiere al unui container este efemer: tot ce scrie aplicația în interiorul containerului se pierde când rulezi docker rm. Volumele gestionate de Docker (named volumes) rezolvă această problemă stocând datele într-un director separat pe gazdă (pe Linux, în /var/lib/docker/volumes/), independent de ciclul de viață al containerelor.

Volumele sunt metoda recomandată pentru baze de date (PostgreSQL, MySQL, MongoDB), fișiere încărcate de utilizatori sau cache-uri: funcționează identic pe Linux, macOS și Windows, au performanță mai bună decât bind mount-urile pe Docker Desktop și pot fi partajate între mai multe containere.

Docker nu șterge niciodată singur un volum cu nume când ștergi containerul; trebuie să îl ștergi explicit cu docker volume rm sau docker volume prune.

Opțiuni și argumente

Opțiune / Parametru Descriere
create [nume] Creează un volum nou cu numele dat (sau cu un nume generat aleatoriu dacă lipsește).
ls Listează toate volumele existente pe mașină.
inspect nume Afișează detalii JSON despre volum, inclusiv calea fizică (Mountpoint).
rm nume... Șterge unul sau mai multe volume care nu sunt folosite de niciun container.
prune [-a] Șterge volumele nefolosite: implicit doar pe cele anonime, cu -a și pe cele cu nume.
-f, --filter Filtrează lista sau curățarea, de exemplu dangling=true (volume neatașate niciunui container).

Exemple

Exemplul 1: Crearea și inspectarea unui volum pentru PostgreSQL

Vedem unde este stocat volumul pe discul gazdei.

docker volume create pgdata
docker volume inspect pgdata

Ieșire în terminal

pgdata
[
    {
        "CreatedAt": "2024-10-23T08:12:04Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/pgdata/_data",
        "Name": "pgdata",
        "Options": null,
        "Scope": "local"
    }
]

Exemplul 2: Backup al unui volum într-o arhivă .tar.gz

Pornim un container temporar Alpine care montează volumul read-only și directorul curent, apoi arhivează conținutul.

docker run --rm -v pgdata:/sursa:ro -v "$(pwd):/backup" alpine tar czf /backup/pgdata-backup.tar.gz -C /sursa .

Exemplul 3: Listarea volumelor orfane (nefolosite de niciun container)

Filtru util înainte de a face curățenie pe disc.

docker volume ls -f dangling=true

Ieșire în terminal

DRIVER    VOLUME NAME
local     4f8a2b1c9d0e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a
local     vechi_cache

Greșeli frecvente

  • Rularea docker volume prune -a sau docker compose down -v pe un server de producție: șterge ireversibil volumele bazelor de date care nu sunt atașate unui container activ în acel moment.
  • Editarea directă a fișierelor din /var/lib/docker/volumes/ de pe gazdă în timp ce containerul rulează: poate corupe permisiunile sau baza de date.

Comenzi înrudite

  • docker run -v / --mount: Atașează volume, directoare de pe gazdă (bind mounts) sau memorie RAM (tmpfs) la un container.
  • docker run: Creează și pornește un container nou dintr-o imagine.
  • docker inspect: Afișează în format JSON toate detaliile de nivel jos ale unui obiect Docker.
  • docker system prune: Verifică spațiul ocupat de Docker (system df) și șterge resursele nefolosite (system prune).