Opslagconcepten voor containers
Windows-containers gebruiken standaard tijdelijke opslag (scratchruimte) voor alle invoer en uitvoer. Elke container heeft een eigen opslagruimte, waar het aanmaken en bewerken van bestanden wordt vastgelegd, zodat ze niet naar de host weglekken. Wanneer een containerinstantie wordt verwijderd, worden alle wijzigingen die zijn opgetreden in de scratchruimte weggegooid. Wanneer een nieuwe containerinstantie wordt gestart, wordt er een nieuwe tijdelijke opslagruimte voor de instantie voorzien.
Opslaglaag
Alle containers worden gemaakt op basis van containerafbeeldingen. Een container-image is een bundel bestanden georganiseerd in een stapel lagen (ook wel laagopslag genoemd) die zich op uw lokale computer of in een extern containerregister bevindt. De containerafbeelding bestaat uit de gebruikersmodus besturingssysteembestanden die nodig zijn om te:
- Uw app ondersteunen
- Elke toepassingsruntime
- Afhankelijkheden van uw app
- Alle andere overige configuratiebestanden die uw app nodig heeft om goed te worden uitgevoerd
In een Windows-omgeving worden lagen opgeslagen met CimFS en worden ze ondersteund op NTFS (New Technology File System), ReFS of RefDisks voor laagopslag. U kunt wijzigen waar de bestanden worden opgeslagen met behulp van de configuratie van de docker-root
(of gelijkwaardig aan containerconfiguratie), maar u moet geen bestanden in de laagmappen wijzigen. Ze worden zorgvuldig beheerd met docker (of gelijkwaardige opdrachten).
Permanente opslag
Mogelijk hebt u gevallen waarin uw app gegevens in een container moet kunnen opslaan. Of misschien wilt u bestanden opslaan in een container die niet is geïntegreerd tijdens het bouwen van de container. U kunt uw Windows-containers op een aantal manieren permanente opslag geven:
- Bindingskoppelingen
- Benoemde volumes
Bindingskoppelingen
Met koppelpunten kan een container een map met de host delen door een map op de host naar een map in de container te koppelen. Koppelpunten zijn handig als u een locatie wilt voor het opslaan van bestanden op de lokale computer die beschikbaar blijven nadat u een container opnieuw opstart en uw tijdelijke werkruimte kwijtraakt. Of als u een bestand wilt delen met meerdere containers.
Als u echter wilt dat een container wordt uitgevoerd op meerdere computers met toegang tot dezelfde bestanden, moet in plaats daarvan een benoemde volume- of SMB-koppeling (Server Message Block) worden gebruikt. Het is belangrijk dat u geen gevoelige mappen, zoals C:\
, koppelt aan een niet-vertrouwde container. Met deze binding kan het bestanden op de host wijzigen waartoe deze normaal gesproken geen toegang heeft en kan leiden tot een beveiligingsschending.
In het volgende voorbeeld ziet u de Docker-opdracht voor het maken van een bindingskoppeling naar map C:\ContainerData
op de host, naar C:\data
binnen de container, met standaard lees-/schrijftoegang.
docker run -v c:\ContainerData:c:\data
Benoemde volumes
Met benoemde volumes kunt u een volume op naam maken, toewijzen aan een container en later opnieuw gebruiken met dezelfde naam. Volumes bieden u een manier om een speciale locatie op de host te maken en te beheren die is toegewezen aan het opslaan van containergegevens. U hoeft het werkelijke pad van waar het is gemaakt niet bij te houden, alleen de naam.
De Docker engine op Windows heeft een ingebouwde plugin voor named volume waarmee volumes op de lokale machine kunnen worden gemaakt. Als u benoemde volumes op meerdere computers wilt gebruiken, is een andere invoegtoepassing vereist.
In het volgende voorbeeld ziet u de Docker-opdrachten voor het maken en starten van een container met de naam mycontainer die is toegewezen aan het lokale volume c:data
:
docker volume create myvolume
docker run -v myvolume:c:\data microsoft/windowsservercore
Hoewel bindingskoppelingen afhankelijk zijn van de mapstructuur en het besturingssysteem van de hostcomputer, beheert Docker volumes volledig. Volumes hebben verschillende voordelen ten opzichte van bindingskoppelingen:
- Volumes zijn eenvoudiger te back-uppen of te migreren dan bind mounts.
- U kunt volumes beheren met behulp van Docker CLI-opdrachten of de Docker-API.
- Volumes werken zowel in Linux- als Windows-containers.
- Volumes kunnen veiliger worden gedeeld tussen meerdere containers.
- Met volumestuurprogramma's kunt u volumes opslaan op externe hosts of cloudproviders, de inhoud van volumes versleutelen of andere functionaliteit toevoegen.
- Nieuwe volumes kunnen hun inhoud vooraf laten vullen door een container.
Bovendien zijn volumes vaak een betere keuze dan het behouden van gegevens in de schrijfbare laag van een container (scratchruimte). Een volume vergroot de grootte van de containers die het gebruiken niet (net als bij een bind mount), en de inhoud van een volume bestaat buiten de levenscyclus van een bepaalde container.