Arrière-plan
Docker Volume nous permet de monter dynamiquement certains fichiers (comme les fichiers de configuration) pour écraser les fichiers originaux dans l’image lors du lancement d’un conteneur Docker, mais que se passe-t-il si nous montons un dossier ou un fichier qui n’existe pas encore sur l’hôte dans le conteneur ? LZ a rencontré un tel problème dans son travail, il l’a donc pratiqué lui-même et a consigné les résultats expérimentaux comme suit :
Montage de dossier
Le comportement de Docker lors du montage des dossiers est uniforme, comme suit :
- Si le dossier n’existe pas, il est créé en premier (ou récursivement s’il s’agit d’un dossier multi-niveaux)
- Écraser le contenu du dossier dans le conteneur avec le contenu du dossier sur l’hôte
Les détails sont les suivants :
Le dossier sur l’hôte existe et n’est pas vide
hôte | conteneur | Résultat du montage | | Le dossier non vide A existe | Dossier B qui n’existe pas | Créez d’abord le dossier B dans Contanier, puis copiez tous les fichiers du dossier A dans B | | Le dossier non vide A existe | Le dossier non vide B existe | D’abord, videz le contenu original du dossier chinois contenant B, puis copiez la copie chinoise A vers B |
Que le dossier B existe ou non dans le conteneur, A écrasera complètement le contenu de B
Le dossier sur l’hôte existe, mais est vide
hôte | conteneur | Résultat du montage | | Dossier vide A qui existe | Le dossier non vide B existe | Le contenu du conteneur du dossier chinois B est vidé |
Le contenu du dossier correspondant dans le conteneur est vidé
Le dossier hôte n’existe pas
hôte | conteneur | Résultat du montage | | Dossier A qui n’existe pas | Le dossier non vide B existe | Créez le dossier A sur l’hôte, et le contenu du dossier chinois B du conteneur est vidé | | Dossiers A/B/C qui n’existent pas | Le dossier non vide B existe | Créer les dossiers A/B/C sur l’hôte, et le contenu du dossier chinois contenant B est vidé |
Le contenu du dossier correspondant dans le conteneur est vidé
résumé
Le dossier hôte écrasera certainement le dossier chinois conteneur :
hôte | conteneur | Résultat du montage | | Le dossier n’existe pas/le dossier existe mais est vide | Le dossier n’existe pas/n’existe pas mais est vide/existe et n’est pas vide | Un morceau chinois du contenant est couvert (vidé) | | Le dossier existe et n’est pas vide | Le dossier n’existe pas/n’existe pas mais est vide/existe et n’est pas vide | le contenu du dossier chinois contenant est écrasé (le contenu original est vidé, et le contenu du dossier sur l’hôte est écrasé) |
Montage de fichier
La plus grande différence entre le montage de fichiers et le montage de dossiers est :
- Docker interdit de monter des fichiers qui n’existent pas sur l’hôte vers des fichiers déjà présents dans le conteneur
- Le montage des fichiers n’a aucun effet sur les autres fichiers dans le même dossier
De plus, son comportement d’écrasement est cohérent avec le montage de dossiers, c’est-à-dire :
- Écraser le contenu du fichier dans le conteneur avec le contenu du fichier sur l’hôte
Les détails sont les suivants :
hôte
hôte | conteneur | Résultat du montage | | Des fichiers qui n’existent pas configA.js | Des documents déjà existants congfigB.js | Erreur, essayez-vous de monter un dossier sur un fichier (ou inversement) ? Vérifiez si le chemin hôte spécifié existe et est le type attendu. Il génère deux répertoires vides configA.js et configB.js sur l’hôte en même temps, mais le conteneur ne peut pas démarrer |
hôte
hôte | conteneur | Résultat du montage | | Dossier actuel configA.js | Dossier actuel congfigB.js | l’élément chinois contenant configB.js reste le même, mais le contenu du fichier est écrasé par le contenu congfigA.js | | Dossier actuel configA.js | Des fichiers qui n’existent pas congfigB.js | Un nouveau fichier configB.js dans le conteneur avec le contenu du fichier configA.js reste inchangé configB.js tous les autres fichiers du fichier |
résumé
Le fichier sur l’hôte écrasera toujours le dossier chinois du conteneur
hôte | conteneur | Résultat du montage | | Fichiers qui n’existent pas | Documents déjà existants | Actes interdits | | Documents existants | Fichiers qui n’existent pas / fichiers qui existent déjà | Ajout/écraser (crée un répertoire s’il n’existe pas) |
conclusion
Montage de dossier
- Si vous autorisez le montage de dossiers inexistants ou vides dans le conteneur, les dossiers correspondants seront vidés
- Attacher un dossier non vide à un conteneur écrasera le dossier original dans le conteneur
Montage de fichier
- Il est interdit de monter des fichiers inexistants sur des fichiers déjà présents dans le conteneur
- Les fichiers existants seront écrasés lorsqu’ils seront attachés au conteneur, et si ces fichiers n’existent pas, ils seront créés
Scénarios d’application
- D’après l’analyse ci-dessus, on peut voir que le montage de dossier sert à écraser des fichiers dans l’ensemble du dossier, ce qui permet d’être utilisé lorsqu’un grand nombre de fichiers doit être monté dans le conteneur, de plus, si un dossier vide ou inexistant est monté, il est généralement utilisé à l’envers : c’est-à-dire qu’après le démarrage du conteneur, certains fichiers (comme les logs) peuvent être générés sous le dossier du point de montage dans le conteneur, et à ce moment-là, ils peuvent être directement vus dans le dossier sur l’hôte correspondant.
- Le montage de fichiers est souvent utilisé pour monter des fichiers de configuration afin de modifier dynamiquement la configuration par défaut à l’exécution, car cela ne remplace qu’un seul fichier sans affecter les autres fichiers du même dossier dans le conteneur.
Transféré depuis :La connexion hyperlientérée est visible.
(Fin) |