GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment monter un répertoire hôte dans un conteneur Docker

Docker fournit des outils pour relier les systèmes de fichiers des conteneurs et le système d'exploitation hôte exécutant le conteneur, tels que les montages de liaison et les volumes. Ceux-ci peuvent être très utiles dans les environnements de développement et de production.

Pourquoi monter depuis l'hôte ?

Généralement, avec Docker, vous voudriez que les images s'exécutent indépendamment du système hôte. Si vous vouliez, par exemple, mettre à jour le code ou les fichiers de configuration d'une application, vous voudriez probablement créer une nouvelle version du conteneur et la redéployer. Cela vous permet de redimensionner et de déplacer rapidement des images sans vous soucier du matériel sur lequel elles s'exécutent.

Cependant, dans un environnement de développement, pouvoir monter directement un répertoire pour permettre le rechargement à chaud de la configuration ou du code peut être très utile. Par exemple, vous travaillez peut-être sur un fichier JS ou un plugin PHP que vous pouvez simplement glisser-déposer dans le conteneur. Ou vous pouvez monter un répertoire de configuration NGINX entier pour travailler sur votre site Web. Quel que soit votre cas d'utilisation, le montage de fichiers n'est pas une mauvaise solution.

C'est également utile en production, si vous avez des services hôtes qui dépendent de fichiers dans des conteneurs. Par exemple, vous pouvez avoir un service d'ingestion et d'agrégation de journaux qui préférerait que les fichiers journaux du conteneur se trouvent dans un répertoire accessible depuis l'hôte. Bien qu'il existe probablement des solutions pures dans Docker à vos problèmes, il est parfois plus simple de simplement monter un volume.

Compatibilité macOS

Remarque :étant donné que les montages sont gérés via l'API Docker, ils fonctionneront quel que soit le système d'exploitation hôte. Cependant, macOS dispose de protections supplémentaires et les montages en dehors de quelques répertoires hôtes peuvent échouer avec des "montages refusés" au moment de l'exécution. Cela inclut /Users , qui couvre la plupart des opérations, mais si vous en avez besoin, vous pouvez résoudre ce problème dans les paramètres Docker sous Préférences > Ressources > Partage de fichiers en ajoutant le répertoire cible à la liste.

Monter un répertoire hôte

La création d'un montage lié est assez simple. Ajoutez-le avec le --mount type=bind drapeau au démarrage, spécifiant un répertoire source et cible sur lequel monter.

docker run -d 
-it 
--name container 
--mount type=bind,source=/nginxconfig,target=/etc/nginx 
nginx:latest

Les montages liés sont les plus simples, mais Docker fournit l'API Volume pour gérer un peu mieux ces types de montages. Les données stockées seront gérées par Docker et le répertoire de volume sera créé automatiquement dans le répertoire de Docker. Ce n'est peut-être pas ce que vous voulez si vous avez un répertoire existant à l'esprit, mais cette méthode est meilleure car elle ne dépend pas de la structure de fichiers du système d'exploitation hôte.

docker volume create nginx-config

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

Vous pouvez également utiliser Docker Compose pour définir des volumes :

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx/
volumes:
  nginx-config:

Ceux-ci sont stockés dans un format standard accessible à Linux :

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

Cependant, sur macOS, vous devrez vous connecter à la machine virtuelle Docker pour pouvoir afficher les volumes.

CONNEXE : Que sont les volumes Docker et comment les utilisez-vous ?

Montage de fichiers uniques

Le montage de répertoires entiers fonctionne bien lorsque vous souhaitez modifier de nombreux fichiers de configuration/code stockés sur l'hôte. Cependant, il se peut que vous souhaitiez parfois monter un seul fichier à modifier, sans toucher aux autres fichiers.

Pour ce faire, vous pouvez exécuter le conteneur avec un montage lié, qui prend en charge les fichiers individuels si vous spécifiez le chemin :

docker run -it 
--mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg 
nginx sh

Si vous avez de nombreux fichiers à monter de cette manière, vous pouvez tous les placer dans le même répertoire hôte et monter ce répertoire à un emplacement différent dans le conteneur. Vous pouvez ensuite utiliser des liens symboliques à l'intérieur du conteneur pour lier les fichiers du répertoire monté à l'emplacement approprié.


Docker
  1. Comment exécuter MySQL dans un conteneur Docker

  2. Comment se connecter en SSH à un conteneur Docker

  3. Comment monter ou lier symboliquement un seul fichier dans un conteneur Docker

  4. Comment attribuer une adresse IP statique à un conteneur Docker

  5. Comment répertorier les conteneurs Docker

Comment exécuter Grafana dans un conteneur Docker

Comment se connecter en SSH aux conteneurs Docker [étape par étape]

Comment configurer un conteneur Apache Docker

Comment copier des fichiers entre l'hôte et le conteneur Docker

Comment exécuter des conteneurs Docker

Comment se connecter en SSH à un conteneur Docker