Docker2 min čítania
Volumes a bind mounts: kde ukladať dáta vo vývoji
Ako správne uložiť perzistentné dáta a ako mať živý reload kódu v kontajneri.
Bez perzistentného úložiska je Docker frustrujúci: reštartuješ kontajner a databáza či uploady zmiznú. Tento článok ti ukáže, kedy použiť volume a kedy bind mount.
Volume vs bind mount v praxi
- Volume: spravuje Docker, ideálne pre databázy a produkčné dáta.
- Bind mount: priamo mapuje priečinok z hosta, ideálne pre lokálny vývoj kódu.
Pravidlo:
- app source kód -> bind mount
- DB dáta -> volume
Named volume pre perzistenciu dát
docker volume create mysql_datadocker run --name mysql-dev -d \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=app \ -v mysql_data:/var/lib/mysql \ -p 3306:3306 mysql:8.4Ak kontajner zmažeš a spustíš znova s rovnakým volume, dáta ostanú.
Bind mount pre live reload
docker run --name node-dev -it --rm \ -v "$(pwd)":/app \ -w /app \ -p 3000:3000 node:22-alpine shZmeny v lokálnych súboroch sa okamžite prejavia v kontajneri.
Overenie a údržba
docker volume lsdocker volume inspect mysql_datadocker volume rm mysql_dataVolume maž až keď si si istý, že už ho nepotrebuješ.
Najčastejšie chyby
- Databáza beží bez volume a po reštarte je „čistá“.
- Bind mount prepíše obsah, ktorý bol zabudovaný v image.
- Zlý mount path (napr. preklep v
/var/lib/mysql) a perzistencia nefunguje.
Mini úloha
- Spusť MySQL s named volume.
- Vlož testovaciu tabuľku.
- Zmaž kontajner a spusti ho znova s tým istým volume.
- Over, že tabuľka stále existuje.
Overenie v praxi
- Spusť
docker compose psa over, že všetky potrebné služby súUp. - Skontroluj logy cez
docker compose logs --tail=100a hľadaj chyby pri štarte. - Over prístupnosť služby cez jej reálny endpoint (HTTP, DB port, healthcheck).
Čo bude ďalej
Nasleduje sieť: bridge network a izolácia služieb, aby API, DB a pomocné služby spolu komunikovali bezpečne.