De titel zegt het al. Ik heb een paar volumes ingesteld als alleen-lezen (:ro
), maar ik wil :cached
en :delegated
testen om te helpen met bestand i /o performance, maar kon er niet achter komen hoe dit in te stellen in een opstelbestand.
O, ik heb al getest:
volumes:
- external:internal:cached
Antwoord 1, autoriteit 100%
Uitleg: het doel van het gebruik van volumes
-configuratie op docker is om gegevens te delen tussen de host en de docker-container en om gegevensconsistentie tussen beide te waarborgen (wat gebeurt er in A(host/container) wordt weergegeven in B(host/container) en vice versa) . Het gemonteerde volume is “onderdeel” van de container en relevant. Het algemene gebruik is om gedeelde gegevensback-up op te slaan, zowel in de container als op het bestandssysteem in de machine. Als de container wordt verwijderd, bestaat het volume nog steeds en is het onafhankelijk van de containerstatus en wordt het opnieuw gebruikt en geladen vanaf de laatste persistente status.
TLDR:
- Gebruik
cached
: wanneer de host wijzigingen uitvoert, bevindt de container zich in de alleen-lezen modus. - Gebruik
delegated
: wanneer docker container wijzigingen uitvoert, is host in read
enige modus. - Gebruik
default
: wanneer zowel container als host actief zijn en
continu wijzigingen aan gegevens doorvoeren. - Zorg ervoor dat u een bijgewerkte docker-compose- en docker-versie op uw computer gebruikt
Uit documentatie:
Mac gebruikt
osxfs
om mappen en bestanden die vanuit macOS worden gedeeld naar de Linux-VM te verspreiden. Deze verspreiding maakt deze mappen en bestanden beschikbaar voor Docker-containersdie draaien op Docker Desktop voor Mac.
**Standaard zijn deze shares volledig consistent, wat betekent dat elke keer dat er wordt geschreven op de macOS-host of via een koppeling in een container, de wijzigingen naar de schijf worden gewist, zodat alle deelnemers aan de share een volledig consistent beeld hebben .Volledige consistentie kan in sommige gevallen ernstige gevolgen hebben voor de prestaties.**
Docker 17.05 en hoger introduceren opties om de consistentie af te stemmen
instelling op een per-mount, per-container basis. De volgende opties zijn:
beschikbaar:De optie
consistency
, indien aanwezig, kan een van de optiesconsistent
,delegated
ofcached
zijn. Deze instelling is alleen van toepassing op Docker Desktop voor Mac en wordt genegeerd op alle andere platforms.
De Docker-volumevlaggen zijn:
consistent
ofdefault
: de standaardinstelling met volledige consistentie, zoals hierboven beschreven.delegated
: de weergave van de mount door de containerruntime is gezaghebbend. Er kunnen vertragingen optreden voordat updates die in een container zijn gemaakt, zichtbaar zijn op de host.
Wanneer gebruik je het? U gebruikt het bijvoorbeeld wanneer de container de gegevens continu verandert en u een back-up van deze gegevens op de host wilt maken, dit is een alleen-lezen bewerking vanuit hostperspectief en daarom zou de juiste keuze worden gedelegeerd.cached
: de weergave van de mount door de macOS-host is gezaghebbend. Er kunnen vertragingen optreden voordat updates op de host zichtbaar zijn in een container. Wanneer u het gebruikt?Bijvoorbeeld wanneer uw host continu gegevens wijzigt die de containerservice leest en gebruikt (zoals configuratie / broncode / weergegeven gegevens van server enz …)
Gebruik:
- <my-first-host-volume>:<first-container-volume-path>:delegated
- <my-second-host-volume>:<second-container-volume-path>:cached
Voorbeeld:
version: '3.4'
services:
jenkins:
image: jenkins/jenkins:lts
environment:
- JENKINS_HOME=/var/jenkins_home
container_name: jenkins
volumes:
- '~/jenkins/:/var/jenkins_home:delegated'
- '~/environment_keys:/var/data:cached'
ports:
- 0.0.0.0:8080:8080
expose:
- 5000
restart: unless-stopped
Antwoord 2, autoriteit 33%
In mijn geval wilde ik een readonly
(:ro
) volume dat ook :cached
of :delegated
. Om dit te doen, gebruik je gewoon deze syntaxis:
volumes:
- /external/folder:/internal/folder:ro,cached
Antwoord 3, autoriteit 13%
Ik gebruikte geen nieuwe genoeg (edge channel) versie van Docker, dus de commando’s werkten niet. Na het upgraden werkte alles zoals verwacht.
Antwoord 4, autoriteit 8%
Dit antwoord is niet direct gerelateerd aan de vraag, maar heeft hetzelfde doel.
Het docker-sync-project is bedoeld om de problemen van langzame synchronisatie op macOS en Windows op te lossen. Ik heb het ingesteld voor een Ruby on Rails-app en de resultaten waren verbluffend. De resultaten zouden hetzelfde moeten zijn voor andere soorten projecten.
Hier is mijn sjabloon dockerfile-compose
version: '3.4'
volumes:
app-code:
external: true
services:
backend:
volumes:
- app-code/:/app:rw
En het docker-sync-bestand
version: 2
syncs:
app-code:
src: './'
sync_strategy: 'native_osx'
sync_excludes:
- '.git'
- 'coverage'
- .gitignore'
watch_excludes:
- '.*/.git'
- '.gitignore'
- 'log'
- 'docker-*.yml'
Vervolgens kunt u docker-sync start
volgen of de documentatie volgen om docker-sync te gebruiken in plaats van docker-compose
om de synchronisatie automatisch te starten/stoppen wanneer dat nodig is.
p>
Een van de belangrijkste nadelen is de afhankelijkheid van het docker-sync-juweel dat u op uw besturingssysteem moet installeren, maar als het eenmaal is ingesteld, werkt het fantastisch.
Antwoord 5
Ik vond dat deze thread moest worden bijgewerkt om de huidige situatie beter weer te geven.
Sinds Docker voor Mac gRPC-FUSE omvatte, zijn deze vlaggen verwijderd uit de Docker-documentatie omdat ze niet langer nodig zijn. Het is veilig om ze uit uw docker-compose.yml-bestanden te verwijderen.
https://github.com/docker/for-mac/issues/5402
Je kunt zien dat gRPC-FUSE standaard is geselecteerd in Docker Desktop. Ga naar Instellingen > Tabblad Algemeen.