Vad är Docker -volymer och hur använder du dem?

0
176

Som standard är Docker -behållare helt statslösa. Data som lagras på behållaren är flyktiga och kommer att rensas när behållaren stängs av. Detta är uppenbarligen inte idealiskt för många applikationer, så Docker tillhandahåller några sätt att hantera tillstånd.

Vad är volymer?

Det enklaste sättet att göra Docker -data ihållande är bindfästen, som bokstavligen binder en plats på värdens disk till en plats på behållarens disk. Dessa är enkla att skapa och använda, men är lite skräpiga eftersom du behöver konfigurera katalogerna och hantera dem själv.

Volymer är som virtuella hårddiskar som hanteras av Docker. Docker hanterar lagring av dem på disken (vanligtvis i/var/lib/docker/volumes/) och ger dem ett enkelt minnesvärt enda namn snarare än en katalogväg. Det är enkelt att skapa och ta bort dem med Docker CLI.

Dessa har några andra fördelar förutom att hanteras av Docker. De fungerar på både Linux- och Windows -behållare, de kan säkrare dela mellan flera behållare och volymdrivrutinerna tillåter molnleverantörer att tillhandahålla fjärrhotell för underliggande data. Sammantaget är volymer enklare att använda än bindfästen och rekommenderas av Docker för hantering av tillstånd.

Naturligtvis bör du överväga om du verkligen behöver Docker -data för att lagras på servern. För många applikationer räcker det med att använda en extern fjärrdatalagring som Amazon S3 eller en extern databas för att lagra data de använder utan att binda den på frontend-servern.

Hur använder du dem?

Du kan skapa en ny volym från kommandoraden med följande kommando:

dockervolym skapa nginx-config Annonsering

Och sedan , när du kör din Docker -behållare, länka den till målet i behållaren med –mount -flaggan:

docker run -d –name devtest –mount source = nginx -config, target =/etc/nginx nginx: senaste

Om du kör docker inspektera & lt; name & gt ;, ser du volymen listad under avsnittet Fästen.

Om du använder Docker Compose är installationen också enkel. Lägg bara till en volympost för varje containertjänst du har och mappa sedan ett volymnamn till en plats i gästen. Du måste också tillhandahålla en lista över volymer i en volymnyckel på högsta nivå för att skriva till tillhandahållande.

version: “3.0” -tjänster: web: image: nginx: senaste portar: -“80:80” volymer: -nginx -config:/etc/nginx/volumes: nginx -config:

Detta skapar volymen automatiskt för denna komponera. Om du vill använda en färdiggjord volym utifrån Skriv, ange extern: sann i volymkonfigurationen:

volymer: cms-innehåll: extern: sann

Om du vill istället helt enkelt göra en bindning och inte bry dig om volymer, helt enkelt ange ett söknamn i stället för volymnamnet och avstå från att definiera volymnamnen.

version: “3.0” -tjänster: web: image: nginx: senaste portar: -“80:80” volymer: -/docker/nginx -config/:/etc/nginx/Annonsering

Du kan läsa Docker &# 8217; s fullständiga dokumentation om användning av volymer med Compose om ditt användningsfall kräver något mer specifikt än detta.

Överföra Docker-volymer

Dockervolymer är bara mappar som skapas automatiskt och lagras på/var/lib/docker/volumes/, där varje volym lagras under ./volumename/_data/. För att säkerhetskopiera och återställa kan du helt enkelt säkerhetskopiera dessa volymer direkt.

Om du istället skulle vilja använda Docker CLI ger de tyvärr inget enkelt sätt att göra detta. För att säkerhetskopiera en behållares volymer behöver du behållarnamnet, liksom monteringsplatsen som data lagras i.

Sättet att göra det är lite ett hack — du kommer att behöva köra ett kommando i en ny Docker -behållare, binda montera den aktuella skalkatalogen, montera volymen till den behållaren och tjära sedan katalogen till en säkerhetskopia. Du kommer att få en backup.tar av volymen:

docker run –rm –volumes -from containername -v $ (pwd):/backup ubuntu tar cvf /backup/backup.tar/mountlocation

Sedan kan du på liknande sätt extrahera arkivet i målkatalogen:

docker run –rm –volumes -from containername -v $ (pwd):/backup ubuntu bash -c “cd/mountlocation & amp; & amp; tar xvf /backup/backup.tar –strip 1 “

Detta är fortfarande bättre än att behöva känna till värdplatsen, så du kan automatisera detta om du vill.