Waar worden Docker-afbeeldingen en -containers op de host opgeslagen?

0
186

Docker gebruikt twee soorten indelingen om afbeeldingen van actieve processen weer te geven, en containers, en beide slaan gegevens op de schijf van uw computer op. We zullen het hebben over de opdrachten die Docker biedt voor het verwerken van gegevens, en hoe u deze kunt gebruiken om toegang te krijgen tot afbeeldings- en containerbestanden.

Het verschil tussen Afbeeldingen en containers

Afbeeldingen zijn wat u maakt wanneer u docker build uitvoert; ze worden opgeslagen in een containerregister zoals de Docker Hub en bevatten alle bestanden en code om een ​​app uit te voeren. Je kunt ze zien als ISO-bestanden voor een besturingssysteem voor een virtuele machine.

Containers worden gemaakt op basis van afbeeldingen en ze zijn als de eigenlijke virtuele machine waarop de applicatie draait. Mogelijk hebt u meerdere containers parallel lopen op dezelfde afbeelding. Elke container heeft zijn eigen bestandssysteem, optioneel gemaakt met “volume mounts” die gegevens van de host aan de container binden.

Werken met Docker Image Storage

Afbeeldingen slaan de volledige inhoud van de afbeelding op uw schijf op. Telkens wanneer u een afbeelding van internet haalt, wordt deze gedownload en opgeslagen, meestal voor altijd. Afbeeldingen kunnen erg groot zijn, dus dit kan in de loop van de tijd oplopen, vooral voor laptops met beperkte opslagruimte.

Als u rechtstreeks toegang wilt tot de afbeeldingsgegevens, worden deze meestal op de volgende locaties opgeslagen:

  • Linux: /var/lib/docker/
  • Windows: C:ProgramDataDockerDesktop
  • macOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

Advertentie

Het aanraken van deze gegevens is echter waarschijnlijk een slecht idee. De opslag van Docker is ingewikkeld en varieert enorm, afhankelijk van het opslagstuurprogramma dat het gebruikt. Linux is nu standaard ingesteld op overlay2 op de meeste distributies, wat niet eens toegankelijk is voor de meeste eindgebruikers. Als u hiermee rommelt, kan dit leiden tot gegevensverlies.

In plaats daarvan biedt Docker beheerde opdrachten om afbeeldingen te verwerken. U kunt alle versies van gedownloade afbeeldingen bekijken met een eenvoudige opdracht:

docker image ls

Gelukkig is het niet zo erg als het lijkt, aangezien Docker-afbeeldingen versies stapsgewijs opslaan. Dat betekent dat wanneer u een nieuwe versie downloadt, deze alleen de gewijzigde onderdelen vervangt. Als je vaak dezelfde afbeelding gebruikt, zul je waarschijnlijk niet te veel opslagkosten oplopen.

Als u echter veel verschillende afbeeldingen gebruikt, heeft u mogelijk veel afbeeldingen opgeslagen die niet eens meer worden gebruikt. Om deze op te ruimen, biedt Docker een ingebouwde opdracht om garbagecollection uit te voeren. Hiermee worden alle afbeeldingen verwijderd die geen verwijzingen hebben, dat wil zeggen die niet zijn getagd of waarnaar niet wordt verwezen door een container.

docker image prune

Als u alle oude afbeeldingen wilt verwijderen die niet door bestaande containers worden gebruikt, voert u deze uit met de -a vlag:< /p> docker image prune -a

Dat dekt de belangrijkste use case, maar er zijn nog een paar handige commando's:

  • inspecteren: geeft informatie weer over een containerversie.
  • save & load: slaat afbeeldingen op en laadt ze in een tar-archief.
  • rm: verwijdert een afbeelding rechtstreeks.
  • pull/push: updates van een extern register.
  • geschiedenis : biedt een changelog.

Werken met Docker Container Storage

U kunt alle informatie over een container bekijken met docker inspect, die de stuurprogramma's en gegevens van het bestandssysteem toont, evenals alle bestaande koppelingen en volumes.

docker inspect containerID

Advertentie

Containers slaan gegevens op twee manieren op. De eerste is het basisbestandssysteem, dat wordt gekopieerd van de afbeelding en uniek is voor elke container. Docker gebruikt een “lagere dir” en “bovenste dir,” dat zijn afzonderlijke lagen die worden samengevoegd tot één hybride bestandssysteem. In de onderste map worden de basisafbeeldingsgegevens opgeslagen en in de bovenste map wordt alles opgeslagen dat tijdens runtime is gewijzigd, zoals logbestanden. In beide gevallen hangt de opslag hiervan af van het bestandssysteemstuurprogramma dat Docker is geconfigureerd om te gebruiken.

Dan zijn er mounts, die mappen van de host aan de container binden, meestal automatisch beheerd met een Docker-functie genaamd volumes. Deze worden normaal opgeslagen en zijn toegankelijk voor eindgebruikers. Als u enig werk doet waarbij u gegevens over draaiende containers moet wijzigen, moet u waarschijnlijk een volume wijzigen of een binding koppelen.

Toegang tot volumes

Bind-koppelingen zijn direct toegankelijk en zijn een goede keuze als u configuratie wilt opslaan die voor veel containers wordt gebruikt, of toegankelijke gegevens wilt opslaan die blijven bestaan ​​tijdens het opnieuw opstarten van containers.

Als u wilt wijzigen gegevens die in volumes zijn opgeslagen, kunt u dat ook doen. Ze worden opgeslagen in een standaard formaat dat toegankelijk is vanuit Linux:

/var/lib/docker/volumes/volumeID/_data

Je kunt de volume-ID en informatie krijgen met docker volume inspect.

Advertentie

Net als afbeeldingen kunnen ook volumes oud worden. Je kunt ze gemakkelijk verwijderen, maar een back-up maken en ze overzetten is een lastiger proces.

docker volume prune docker volume rm volumeID

Het bestandssysteem van een Docker Container aanpassen

Als je wilt om het bestandssysteem van de container te wijzigen, net zoals afbeeldingen, is dit een slecht idee. In de meeste gevallen moet u een nieuwe versie van de container maken met de bijgewerkte wijzigingen en een update implementeren.

Als je echter wat snelle wijzigingen wilt aanbrengen zonder de container te stoppen, is de beste manier om gewoon een bash-shell in de container te openen en deze aan te passen via Docker. Als u dit doet, is het heel eenvoudig om Docker exec op de container uit te voeren en “bash” als het commando:

docker exec -it container bash

Vanaf hier ben je vrij om normale Linux-commando's te gebruiken. Als u dit op afstand wilt doen, kunt u een SSH-server in uw container installeren en poort 22 aan een andere poort op de host binden.

GERELATEERD: Hoe te SSH in een Docker-container