Pokud jsou kontejnery izolované, jak mohou komunikovat s hostitelským počítačem, třeba kvůli ukládání dat? Protože když vytvoříme kontejner z obrázku, všechna vygenerovaná data se při odstranění kontejneru ztratí.
Takže potřebujeme způsob, jak mít trvalé úložiště.
Můžeme tak učinit pomocí Bind Mounts a Svazky .
Mezi těmito dvěma není velký rozdíl, kromě toho, že Bind Mounts může ukazovat na libovolnou složku na hostitelském počítači a nejsou spravovány přímo Dockerem.
Začněme s nimi. Jedním z klasických příkladů jsou protokoly. Předpokládejme, že vaše aplikace vytvoří soubor protokolu v kontejneru v /usr/src/app/logs . Můžete to namapovat do složky na hostitelském počítači pomocí -v (stejné jako --volume ) příznak při spuštění kontejneru pomocí docker run , například takto:-v ~/logs:/usr/src/app/logs
Tím se tato složka namapuje na podsložku logs v domovském adresáři uživatele.
Uzel:
-mnebo--mountflag funguje velmi podobným způsobem
Toto je příznak používaný s examplenode obrázek, který jsme vytvořili dříve:
docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode Nyní tedy můžeme spustit naši aplikaci Node a jakýkoli protokol bude uložen v hostitelském počítači, nikoli v kontejneru Docker.
Všimněte si, že
examplenodeaplikace negeneruje žádné přihlášení/usr/src/app/logs, je to jen příklad a toto přihlašování byste museli nejprve nastavit.
Podrobnosti o svazku budou uvedeny, když spustíte docker inspect u názvu kontejneru v části „Mounts“:
"Mounts": [
{
"Type": "bind",
"Source": "/Users/flavio/logs",
"Destination": "/usr/src/app/logs",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
Vidíte "Type": "bind" ? To znamená, že jsme vytvořili bind mount .
Nyní si promluvme o svazcích .
Rozdíl mezi Bind Mounts a Volumes spočívá v tom, že vytvořením svazků bude Docker ukládat data do složky, kterou spravuje, což znamená, že se bude starat o oprávnění k souborům a vlastnictví, a poskytne vám nástroje pro správu těchto svazků. Zatímco připojení připojení jsou založena na cestách souborového systému a Docker kolem nich nemůže poskytnout nástroje.
Docker vám například umožňuje odstranit všechny nepoužívané svazky spuštěním docker volume prune nebo docker system prune --volumes .
Chcete-li vytvořit svazek, musíme nejprve spustit docker volume create :
docker volume create logs
Nyní můžete použít docker volume ls a docker volume inspect Chcete-li získat další data o systémových svazcích:

Nyní spusťte docker run s volbou -v logs:/usr/src/app/logs (sdělte název svazku místo složky)
docker run -d -p 80:3000 -v logs:/usr/src/app/logs --name node-app examplenode
Nyní běží docker inspect na obrázku se zobrazí připojený svazek:
"Mounts": [
{
"Type": "volume",
"Name": "logs",
"Source": "/var/lib/docker/volumes/logs/_data",
"Destination": "/usr/src/app/logs",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
Vidět? Nyní budou protokoly uloženy v /var/lib/docker/volumes/logs/_data složka.
Objemy budou zásadní, když bude čas například nasadit kontejner v cloudové službě.
Svazek se spuštěným docker volume rm <name> můžete odebrat .