Zum Inhalt springen

Mount & Storage Strategien

Die Container unterscheiden sich primär durch ihre Mount-Konfiguration.

Über Bind Mounts, Volumes und tmpfs wird gesteuert:

  • welche Daten persistent sind
  • welche Verzeichnisse beschreibbar sind
  • welche Bereiche isoliert bleiben
  • welche Inhalte Container gemeinsam nutzen

Der Projektcode wird auf dem Host-System ausgecheckt und über einen Bind Mount in die Container eingebunden.

compose.yml

- ..:/workspaces/security-oriented-dev-container-project

Dieser Mount stellt sicher, dass alle Container auf denselben Sourcecode zugreifen können. Je nach Container erfolgt der Zugriff read-write oder read-only.

Read-only Zugriff:

compose.yml

- ..:/workspaces/security-oriented-dev-container-project:ro

Verzeichnisse, die während Build oder Installation entstehen und nicht im Repository landen sollen, werden über Named Volumes bereitgestellt.

Typisches Beispiel sind node_modules.

compose.yml

- root_node_modules:/workspaces/security-oriented-dev-container-project/node_modules

Diese Volumes können von mehreren Containern gemeinsam genutzt werden, ohne den gemounteten Workspace auf dem Host zu verändern.

Je nach Container erfolgt der Zugriff read-only oder read-write.

compose.yml

- root_node_modules:/workspaces/security-oriented-dev-container-project/node_modules:ro

Verzeichnisse, die ausschließlich temporär benötigt werden, werden über tmpfs bereitgestellt.

compose.yml

tmpfs:
- /tmp:rw,nosuid,nodev

Daten in diesen Verzeichnissen werden nicht persistent gespeichert und beim Stoppen des Containers verworfen.

Dieses Muster wird auch verwendet, um bestimmte Workspace-Verzeichnisse gezielt auszublenden.

compose.yml

tmpfs:
- /workspaces/security-oriented-dev-container-project/.git:rw,nosuid,nodev

Dadurch bleibt der Workspace insgesamt eingebunden, einzelne Verzeichnisse sind jedoch im Container nicht sichtbar.


Konfigurationsdateien werden read-only eingebunden.

compose.yml

- ./.npmrc.deps:/tmp/.npmrc:ro

Dieses Muster wird auch für SSH- oder Git-Konfigurationen verwendet.

Dadurch können Container die Konfigurationsdatei nutzen, ohne sie zu verändern.


Tool- und Paketmanager-Caches werden gezielt in temporäre Verzeichnisse gelegt.

compose.yml

environment:
NPM_CONFIG_CACHE: /tmp/npm-cache

Dadurch werden keine persistenten Cache-Daten erzeugt und Container bleiben reproduzierbar.