Docker – wolumeny

Mapowanie wolumenu hosta na kontener – dostęp z poziomu kontenera i hosta

# docker run -v /host_dir/:kontener_dir

# docker run -it -v /home/john/wwwdir/:/data ubuntu

# docker volume ls        - sprawdzenie nazwy


Bez mapowania – doker powiąże dynamicznie z wybranym katalogiem hosta – możliwość przenoszenia między hostami

# docker run -it -v /data2 ubuntu

Mapowanie pojedyńczych plików. Można mapować wiele wolumenów i plików dla jednego kontenera

docker run -it -v ~/.bash_history:/root/.bash_history ubuntu

Obraz dockera wyłącznie dla danych – współużytkowanie między kontenerami

# docker run --volumes-from kontener_źródłowy <obraz>

// np. dodajemy ręcznie wolumen do kontenera źródłowego myUbuntu
# docker run -itd --name myUbuntu  -v /data ubuntu 

// do kontenera myBusyBox dołączamy te same wolumeny co w myUbuntu
# docker run -it  --name myBusyBox --volumes-from myUbuntu busybox

--wolumes-from może być użyte wiele razy

Utworzenie wolumenu z nazwą – takie wolumeny służą tylko do posiadania danych. Najepiej wybrać obraz taki sam jak aplikacji, która go dołączy (mniej zajmie miejsca). Obraz i tak nie będzie uruchamiany – tylko system plików.

# docker create -v ~/nginx/html:/usr/share/html --name  myWebData nginx 

# docker run --name docker-nginx -p 80:80 -d --volumes-from myWebData nginx

Utworzenie wolumenu przed uruchomieniem kontenera

# docker volume create --name data

# docker volume ls

# docker run -it -v data:/data ubuntu 

Sprawdzenie wolumenów – opcja -f filtrowania

# docker volume ls -f dangling=true   // wolumeny nie używane przez żaden kontener

# docker volume ls -f driver=local    // korzystające z danego sterownika (local)

# docker volume ls -f name=da         // dopasowanie do nazwy tu 'da'
# docker volume inspect <nazwa wolumenu>  - pokaże np. powiązanie z katalogiem hosta

Usuwanie wolumeny – poprzez nazwę kontenera

# docker rm -v <nazwa_kontenera>

# docker rm -v myUbuntu

Usuwanie odwołując się do wolumenu

# docker volume rm <nazwa_wolumenu> 

# docker volume ls
# docker volume rm data

// Usuwa wszystkie wolumeny do których nie odwołuje się żaden kontener
# docker volume rm $(docker volume ls -qf dangling=true)