GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak přistupovat k souborům mimo kontejner Docker

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:-m nebo --mount flag 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 examplenode aplikace 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 .


Docker
  1. Jak nainstalovat WordPress pomocí Docker

  2. Jak přiřadit statickou IP ke kontejneru Docker

  3. Jak vypsat Docker kontejnery

  1. Jak spustit program uvnitř kontejneru Docker?

  2. Jak spustit MySQL v kontejneru Docker

  3. Jak SSH do kontejneru Docker

  1. Jak nainstalovat Vim do kontejneru Docker

  2. Jak opustit kontejner Docker

  3. Jak získat přístup k síťovému jmennému prostoru Docker Container z hostitele