Comment monter un volume Docker tout en excluant un sous-répertoire

0
93

Les volumes Docker fournissent un stockage persistant à vos conteneurs. Les données stockées dans des volumes sont stockées indépendamment des conteneurs afin de pouvoir être restaurées après les redémarrages et les remplacements. Les volumes prennent en charge l'utilisation simultanée de plusieurs conteneurs, ce qui facilite les situations de partage de données.

Le montage d'un volume Docker rend son contenu disponible dans un chemin de répertoire spécifique à l'intérieur du conteneur cible. Tout ce qui se trouve dans l'arborescence du système de fichiers du volume devient accessible. Cela peut créer un défi si vous souhaitez exclure des sous-répertoires spécifiques dans les données de volume. Dans cet article, vous apprendrez une technique simple pour monter des volumes tout en évitant certains chemins.

Pourquoi feriez-vous cela ?

Le comportement par défaut consistant à monter le volume entier est normalement souhaitable. Les volumes sont destinés à stocker les données créées par les conteneurs afin que leur contenu soit pertinent pour vos applications.

Les volumes peuvent également être remplis à l'aide de montages liés à l'hôte. Ceux-ci mappent directement un répertoire sur votre machine à un chemin à l'intérieur de votre conteneur. Les modifications apportées dans le répertoire hôte seront automatiquement répercutées dans le conteneur.

Les montages liés sont couramment utilisés pour accélérer le développement d'applications. Vous pouvez modifier le code source et observer vos modifications sans avoir à reconstruire votre image Docker. Les répertoires de travail du projet contiennent souvent des dossiers que vous ne souhaitez pas mettre en miroir, tels que node_modules et vendor. Ceux-ci peuvent déjà exister dans votre conteneur, remplis lors des étapes de création d'image. L'exclusion de vos dossiers locaux du montage vous permet de tester votre code de manière fiable à l'aide des dépendances fournies par votre image.

Comment exclure Sous-répertoires de Docker Volume Mounts

Les sous-répertoires peuvent être exclus d'un montage de volume à l'aide d'une technique simple : créez un autre montage sur le chemin que vous souhaitez ignorer. Si vous montez ~/app sur /opt/app dans votre conteneur, vous pouvez exclure le répertoire ~/app/node_modules en montant un deuxième volume vide sur /opt/app/node_modules :

$ docker run –name app -v ~/app:/opt/app -v /opt/app/node_modules app-image:latest

Ce conteneur commencera avec le contenu de ~/app de votre hôte répertoire accessible à /opt/app. Cependant, /opt/app/node_modules contiendra le contenu original fourni par l'image de base, au lieu du répertoire ~/app/node_modules de votre hôte.

Cela fonctionne car Docker remplit automatiquement les volumes vides nouvellement créés avec le contenu existant du chemin de destination sur lequel ils sont montés. Si vous exécutez npm install dans le cadre de votre Dockerfile, /opt/app/node_modules contiendra déjà toutes vos dépendances. Le premier montage de volume lie votre répertoire hôte dans le conteneur, mais le second le remplace par un volume vide dans /opt/app/node_modules. Celui-ci est ensuite rempli avec les fichiers et dossiers inclus dans l'image.

L'ordre de vos supports de volume est important – le montage du sous-répertoire doit s'appliquer après la liaison parent moins spécifique. Sinon, le contenu de ~/app, y compris sa version de node_modules, finira par écraser le volume vide destiné à créer l'exclusion.

Excluding Files

Vous pouvez utiliser une technique similaire pour exclure efficacement des fichiers individuels. Le montage de /dev/null de votre hôte sur le chemin du fichier l'effacera, comme s'il n'avait aucun contenu.

$ docker run –name app -v /dev/null:/opt/app/config.yaml app-image:latest

Cela ne fonctionne que pour exclure les fichiers – /dev/null ne sera pas mappé sur les chemins de répertoire. La méthode ne fonctionne pas non plus pour omettre un fichier tout en conservant la version originale de votre image de base. Il mappera /dev/null sur le chemin, remplaçant tout fichier existant qui s'y trouve.

Utilisation de Docker Compose

Ces techniques fonctionnent également avec Docker Compose. Ajustez la section des volumes de votre définition de service pour inclure votre montage de liaison habituel et un remplacement de volume vide approprié.

services : app : image : app-image:latest build : . volumes : – ~/app:/opt/app – /dev/null:/opt/app/config.yaml # Exclure le fichier – /opt/app/node_modules # Exclure le répertoire

L'exécution de docker-compose up aura le même effet comme dans l'exemple d'exécution simple du docker ci-dessus.

Résumé

Les montages de volume Docker remplacent tout dans le chemin de destination du conteneur par le contenu du répertoire hôte lié. Dans certaines situations, vous souhaiterez peut-être personnaliser ce comportement en excluant des chemins d'hôte spécifiques du montage.

Dans cet article, vous avez vu comment le montage d'un volume vide dans un sous-répertoire à l'intérieur du conteneur remplacera le premier lier. Le contenu du sous-répertoire du conteneur reviendra au contenu d'origine fourni par votre image. Une variante de cette technique peut également être utilisée pour les fichiers, bien que le chemin soit remplacé par /dev/null à la place.

LIRE LA SUITE

  • › 10 fonctionnalités iPad géniales que vous devriez utiliser
  • › Examen du clavier mécanique Keychron Q8 : un clavier avancé pour toutes les utilisations
  • &rsaquo ; 10 fonctionnalités cachées d'Android 13 que vous auriez pu manquer
  • &rsaquo ; JBL Live Free 2 Review : excellente suppression du bruit, son correct
  • › Il est normal de lésiner sur ces 10 produits technologiques
  • &rsaquo ; Android 13 est sorti : nouveautés et date de disponibilité