Hoe om te Gaan met Docker Container Persistentie en Opslag

0
31

De Docker is een containervervoer service, ontworpen voor het draaien van apps in hun eigen omgeving op elk systeem. Het is de bedoeling om platform-agnostisch, maar als je nodig hebt om gegevens op te slaan op een schijf op, dat kan worden gedaan met een volume-en bind-mounts.

Gebruik een Externe Database of het Object Store

Dit is de methode die de meeste mensen zal aanraden. Opslag staat als een bestand op de schijf is niet in lijn met Docker ‘ s model, en terwijl het kan worden gedaan, is het altijd het beste om te overwegen en dat heb je echt nodig?

Bijvoorbeeld, laten we zeggen dat u een een web-applicatie in Docker dat moet voor het opslaan van gegevens in een database. Het heeft niet veel zin om te draaien MySQL in een Docker container, dus je moet in plaats daarvan inzetten MySQL op RDS of EC2, en hebben het Koppelvenster container verbinding met het direct. De Docker container is volledig stateless zoals het bedoeld is; het kan worden gestopt, gestart, of slaan met een voorhamer, en een nieuwe kan worden gesponnen tot in haar plaats, zonder verlies van gegevens. Met behulp van IAM machtigingen, dit kan worden bereikt veilig, volledig binnen uw VPC.

Als je echt nodig hebt om bestanden op te slaan, zoals gebruiker geüploade foto ‘s en video, je moet echt met AWS’ s Simple Storage Service (S3). Het is veel goedkoper dan EBS-gebaseerde opslag, en veel goedkoper in vergelijking met het EFS-opslag, die is uw eerste keus voor een gedeeld bestandssysteem voor ECS containers. In plaats van het opslaan van een bestand op schijf, kunt u direct uploaden naar S3. Ook deze methode is het mogelijk om extra verwerking met behulp van de Lambda-functies op de geüploade content, zoals het comprimeren van afbeeldingen of video, die kan bespaart u een hoop op de kosten voor bandbreedte.

Eenvoudige Oplossing: Monteer een Schijf naar een Container

De Docker is op twee manieren te bereiken persistentie: volume, en bind-mounts. Bind-mounts kunt u de houder een bepaalde locatie op uw server bestandssysteem op een locatie in het Koppelvenster container. Deze link kan lezen, maar ook het kenmerk lezen/schrijven, waar-bestanden die geschreven zijn door de Docker container blijven op de schijf.

U kunt binden individuele host van de mappen om mappen in het Koppelvenster container, die is handig, maar de aangeraden methode is om een nieuwe “volume” wordt beheerd door de Docker. Dit maakt het makkelijker om back-up, – overdracht en delen van volumes tussen de verschillende instanties van containers.

Een woord van waarschuwing: Als u niet direct toegang hebben tot de server waarop je draait Dokwerker op, zoals het geval is met beheerde implementaties zoals AWS is Elastisch Container Service (ECS) en Kubernetes, zult u wilt om voorzichtig te zijn met deze. Het is gebonden aan de server ‘ s eigen ruimte op de schijf, die is meestal tijdelijk. Wil je gebruik maken van een extern bestand opslaan als EFS een echte persistentie met ECS (daar later meer over).

Echter, binden en volume doen het werk goed als je gewoon met Docker voor het uitvoeren van een eenvoudige installatie van een app op je server, of wilt u gewoon snel persistentie voor test doeleinden. Één van beide manier, de methode van het maken van volumes zal hetzelfde zijn, ongeacht waar je bent ze op te slaan.

Maakt u een nieuw volume uit de command line:

docker volume maken nginx-config

En dan, als je gaat om uw Docker container, koppeling worden gemaakt met het doel in de container met de –mount vlag:

docker run-d
–naam devtest
–mount source=nginx-config,doel=/etc/nginx
nginx:laatste

Als u docker inspecteren <naam>, zie je dat het volume in de lijst onder de Mounts sectie.

Als u Docker Opstellen, de installatie is makkelijk. Voeg dan gewoonweg een volumes vermelding voor elke container service die u hebt vervolgens een volume naam van een locatie in de gast. U zult tevens worden gevraagd om een lijst van de volumes in een top-level volumes key voor het Componeren van een voorziening.

versie: “3.0”
diensten:
web:
afbeelding: nginx:laatste
poorten:
– “80:80”
volumes:
– nginx-config:/etc/nginx/
volumes:
nginx-config:

Dit zal het volume automatisch voor deze Opstellen. Als u wilt gebruiken een premade volume van buiten Samenstellen, specificeren extern: waar in de volume-configuratie:

volumes:
cms-content:
extern: true

Als u wilt in plaats daarvan gewoon een bind de berg en niet lastig vallen met volumes, voer een naam in plaats van de naam van het volume, en afzien van het bepalen van de volume namen.

versie: “3.0”
diensten:
web:
afbeelding: nginx:laatste
poorten:
– “80:80”
volumes:
– /docker/nginx-config/:/etc/nginx/

U kunt lezen Docker de volledige documentatie over het gebruik van de volumes met Componeren of uw gebruik van het geval dat vereist iets meer specifiek zijn dan dit.

Voor Beheerde Implementaties, maken Gebruik van een Gedeeld bestandssysteem (AWS EFS)

Als je de implementatie op AWS ECS, zult u niet in staat zijn om een normaal gebruik van bind-of volume mount, want als je eenmaal het afsluiten van de container, u waarschijnlijk niet zal worden uitgevoerd op dezelfde computer de volgende keer start het op, het verslaan van het doel van de volharding.

Echter, kunt u nog steeds bereiken vasthoudendheid met gebruik van een andere AWS service—Elastische File System (EFS). EFS is een gedeelde netwerk file systeem. U kunt dit koppelen aan meerdere EC2-servers en de gegevens worden gesynchroniseerd op alle van hen. Bijvoorbeeld, u zou dit kunnen gebruiken voor het hosten van de statische inhoud en de code voor uw website, en voer al uw werkprocessen knooppunten op de ECS-voor het verwerken van de daadwerkelijke serveren van uw inhoud. Deze wordt om de beperking van het niet opslaan van gegevens op de schijf, aangezien het volume mount is gebonden aan een externe schijf die blijft bestaan over de ECS-implementaties.

Als u dit wilt instellen, moet u een EFS-bestand systeem. Dit is vrij eenvoudig, en kan worden gedaan vanaf de EFS-Management Console, maar je wilt een notitie maken van de volume-ID als je nodig hebben om te werken met het volume.

Als u handmatig moet toevoegen of wijzigen van bestanden in uw EFS-volume, kunt u dit koppelen aan een EC2 instance. Moet u de installatie van amazon-efs-utils:

sudo yum install -y amazon-efs-utils

En dan mounten met de volgende opdracht, met behulp van het ID:

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

Op deze manier kunt u direct kunt bekijken en bewerken van de inhoud van uw EFS-volume als was het een andere HDD op uw server. U zult willen ervoor zorgen dat u nfs-utils geïnstalleerd om dit allemaal goed te laten werken.

Volgende, je moet aansluiten van ECS om dit volume. Maak een nieuwe taak definitie in de ECS Management Console. Scroll naar beneden en selecteer “Configureren Via JSON.” Vervolgens vervang de lege “volumes” toets met de volgende JSON, het toevoegen van de “familie” – toets aan het einde:

“volumes”: [
{
“naam”: “efs-demo”,
“host”: null,
“dockerVolumeConfiguration”: {
“autoprovision”: true,
“labels”: null,
“scope”: “shared”
“bestuurder”: “lokaal”,
“driverOpts”: {
“type”: “nfs”,
“apparaat”: “:/”,
“o”: “addr=fs-XXXXXX.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport”
}
}
}
],
“familie”:”nginx”,

Vervangen fs-XXXXXX.efs.us-east-1.amazonaws.com met uw EFS-volume van het echte adres. Ziet u een nieuwe volume:

U kunt deze gebruiken in uw container definitie als een mount-punt. Selecteer “Container” (of het bewerken van een bestaande), en onder “Opslag En Registratie’ het nieuwe volume en het opgeven van een container pad.

Sla de taak definitie, en wanneer u start met een cluster met deze nieuwe definitie worden alle containers in staat zal zijn om toegang te krijgen tot uw gedeelde bestandssysteem.