Hur man Handskas med Docker Behållare Persistens och Lagring

0
187

Docker är en containerization service, utformad för att köra applikationer i deras egna miljö på alla system. Det är avsett att vara plattform-agnostiker, men om du behöver lagra data på en hårddisk, som kan göras med volym och binder fästen.

Använda en Extern Databas eller Objekt Butik

Detta är den metod som de flesta människor kommer att rekommendera. Lagring av staten som en fil på disk inte är i linje med Docker är modell, och även om det kan vara gjort, det är alltid bäst att överväga—behöver du verkligen?

Till exempel, låt oss säga att du kör ett webbprogram i Docker som behöver lagra data i en databas. Det gör inte mycket mening med att köra MySQL i en Docker behållare, så ska du istället använda MySQL på RDS eller EC2, och har Docker behållare ansluta till den direkt. Den Docker behållaren är helt statslösa som det är avsett att vara, det kan vara slutat, börjat, eller slå med en slägga, och en ny kan spinnas upp i dess ställe, alla utan förlust av data. Med hjälp av IAM-behörigheter, detta kan göras på ett säkert sätt, helt inom din VPC.

Om du verkligen behöver för att lagra filer som användaren laddat upp foton och video, du borde verkligen vara med AWS ‘ s Simple Storage Service (S3). Det är mycket billigare än EBS-baserad lagring, och mycket billigare jämfört med EFS-lagring, vilket är ditt primära val för ett gemensamt filsystem för ECS behållare. Istället för att lagra en fil på hårddisken, kan du ladda upp direkt till S3. Denna metod gör också att du kan köra ytterligare bearbetning med hjälp av Lambda-funktioner på upp innehåll, till exempel komprimera bilder eller video, vilket kan spara dig en hel del på kostnader för bandbredd.

Enkel Lösning: Montera en Enhet till en Container

Docker har två sätt att uppnå uthållighet: volym fästen, och binder fästen. Bind-fästen kan du montera en viss plats på serverns filsystem på en plats inne i Docker behållare. Denna länk kan vara skrivskyddade, men också att läsa/skriva, där filer som skrivits av Docker container kommer att finnas kvar på disk.

Du kan binda enskilda värd kataloger kataloger mål i Docker behållare, som är användbar, men den rekommenderade metoden är att skapa en ny “volym” som förvaltas av Docker. Detta gör det enklare att säkerhetskopiera, överföra och dela med volymer mellan olika instanser av behållare.

Ett varningens ord: Om du inte har direkt tillgång till den server som du kör Docker på, vilket är fallet med lyckats distributioner som AWS är Elastisk Container Service (ECS) och Kubernetes, vill du vara försiktig med detta. Den är knuten till serverns disk utrymme, som är vanligtvis tillfälliga. Du vill använda en extern fil butik som EFS för att uppnå verklig uthållighet med ECS (mer om det senare).

Men, binda och volym fästen fungerar bra om du bara använda Docker att köra en enkel installation av en app på din server, eller bara vill ha snabb uthållighet för teständamål. Antingen sätt, att metoden för att skapa volymer kommer att vara samma oavsett var du lagra dem.

Du kan skapa en ny volym från kommandoraden med:

docker volym skapa tuxpaint-config

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

docker kör -d
–namn devtest
–mount source=tuxpaint-config,target=/etc/nginx
nginx:senaste

Om du kör docker inspektera <namn>, kommer du att se den volym som anges under Fästen avsnitt.

Om du använder Docker Komponera installationen är lätt också. Helt enkelt lägga till en volymer post för varje container service som du har, och sedan mappa en volym som namnet på en plats i guest. Du måste också ange en lista med volymer i en topp-nivå volymer-tangenten för att Komponera bestämmelse.

version: “3.0”
tjänster:
webb:
bild: uim:senaste
portar:
– “80:80”
volymer:
– nginx-config:/etc/nginx/
volymer:
tuxpaint-config:

Detta kommer att skapa volymen automatiskt för den här Komponera. Om du vill använda en premade volym från utanför Komponera, ange yttre: sant i volym konfiguration:

volymer:
cms-content:
yttre: sanna

Om du vill istället bara göra en bindmontera och inte bry sig om volymer, skriv helt enkelt in i en bana namn i stället för volymen namn, och avstå från att definiera volymen namn.

version: “3.0”
tjänster:
webb:
bild: uim:senaste
portar:
– “80:80”
volymer:
– /docker/tuxpaint-config/:/etc/nginx/

Du kan läsa Docker är fullständig dokumentation om användningen av volymer med att Komponera om användningen kräver något mer specifika än så här.

För Hanterade Driftsättningar, Använda en Delad Fil System (AWS EFS)

Om du installerar på AWS ECS, du kommer inte kunna använda en vanlig binda eller volym mount, eftersom när du stänger av behållaren, du kommer förmodligen inte att köra på samma maskin nästa gång du startar upp det, genom att besegra syftet för uthållighet.

Du kan dock fortfarande uppnå uthållighet med hjälp av en annan AWS service—Elastisk File System (EFS). EFS är en gemensam network file system. Du kan montera den på flera EC2 servrar, och data hämtas kommer att synkroniseras över dem alla. Till exempel, du kan använda detta för att vara värd för statiskt innehåll och koden för din webbplats, kör sedan alla dina arbetare noder på ECS att hantera själva servering av ditt innehåll. Detta blir runt den begränsning av att inte lagra data på skivan, eftersom volymen mount är bundna till en extern hårddisk som kvarstår över ECS-distributioner.

Att sätta upp detta, du kommer att behöva skapa en EFS-filsystem. Detta är ganska enkel och kan göras från EFS Management Console, men du vill göra en anteckning av volym-ID som du kommer att behöva det för att arbeta med volym.

Om du måste manuellt lägga till eller ändra filerna i din EFS-volym, kan du montera den till någon EC2 exempel. Du måste installera amazon-efs-utils:

sudo installera yum -y amazon-efs-utils

Och sedan montera det med följande kommando, med ID:

sudo mount -t efs-fs-12345678:/ /mnt/efs

På detta sätt kan du direkt visa och redigera innehållet i dina EFS volym som om det var en annan HDD på din server. Du kommer att vilja se till att du har en nfs-common installerat för att allt detta ska fungera.

Nästa, du måste koppla upp ECS till denna volym. Skapa en ny uppgift definition i ECS Management Console. Bläddra längst ned och välj “Konfigurera Via JSON.” Sedan, byt ut det tomma “volymer” – knappen med följande JSON, att lägga till den “familj” – knappen i slutet:

“volymerna”: [
{
“name”: “efs-demo”,
“host”: null,
“dockerVolumeConfiguration”: {
“autoprovision”: true,
“etiketter”: null,
“scope”: “delad”,
“föraren”: “lokal”,
“driverOpts”: {
“typ”: “nfs”,
“enhet”: “:/”,
“o”: “addr=fs-XXXXXX.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport”
}
}
}
],
“familjen”:”python”,

Ersätta fs-XXXXXX.efs.us-east-1.amazonaws.com med din EFS volym verkliga adress. Du bör se en ny volym:

Du kan använda detta i din behållare definition som monteringspunkt. Välj “Lägg till Container” (eller redigerar en befintlig), och under “Lagring Och Avverkning,” välj den nyskapade volymen och ange en container väg.

Spara uppgift definition, och när du startar ett kluster med denna nya definition, alla containrar kommer att kunna komma åt dina delade filsystem.