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

Comment accéder aux fichiers en dehors d'un conteneur Docker

Si les conteneurs sont isolés, comment peuvent-ils communiquer avec la machine hôte, peut-être pour stocker des données ? Parce que lorsque nous créons un conteneur à partir d'une image, toutes les données générées sont perdues lorsque le conteneur est supprimé.

Nous avons donc besoin d'un moyen d'avoir un stockage permanent.

Nous pouvons le faire en utilisant Bind Mounts et Volumes .

Il n'y a pas beaucoup de différence entre les deux, sauf que les montages liés peuvent pointer vers n'importe quel dossier sur l'ordinateur hôte et ne sont pas gérés directement par Docker.

Commençons par eux. Un exemple classique est les journaux. Supposons que votre application crée un fichier journal, à l'intérieur du conteneur, dans /usr/src/app/logs . Vous pouvez le mapper à un dossier sur la machine hôte, en utilisant le -v (identique à --volume ) indicateur lorsque vous exécutez le conteneur avec docker run , comme ceci :-v ~/logs:/usr/src/app/logs

Cela mappera ce dossier au sous-dossier des journaux dans le répertoire personnel de l'utilisateur.

Nœud :le -m ou --mount flag fonctionne de manière très similaire

C'est le drapeau utilisé avec le examplenode image que nous avons créée précédemment :

docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode

Nous pouvons donc maintenant exécuter notre application Node, et tout journal sera stocké sur l'ordinateur hôte, plutôt que dans le conteneur Docker.

Notez que le examplenode l'application ne génère aucun journal dans /usr/src/app/logs , ce n'est qu'un exemple et vous devez d'abord configurer cette connexion.

Les détails sur le volume seront répertoriés lorsque vous exécuterez docker inspect sur le nom du conteneur, sous "Mounts":

"Mounts": [
    {
        "Type": "bind",
        "Source": "/Users/flavio/logs",
        "Destination": "/usr/src/app/logs",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

Pouvez-vous voir "Type": "bind" ? Cela signifie que nous avons créé un montage lié .

Parlons maintenant des volumes .

La différence entre Bind Mounts et Volumes est qu'en créant des volumes, Docker stockera les données dans un dossier qu'il gère, ce qui signifie qu'il s'occupera des autorisations et de la propriété des fichiers, et il vous donnera les outils pour gérer ces volumes. Bien que les montages liés soient basés sur les chemins du système de fichiers, Docker ne peut pas fournir les outils qui les entourent.

Par exemple, Docker vous permet de supprimer tous les volumes inutilisés en exécutant docker volume prune ou docker system prune --volumes .

Pour créer un volume, nous devons d'abord exécuter docker volume create :

docker volume create logs

Vous pouvez maintenant utiliser docker volume ls et docker volume inspect pour obtenir plus de données sur les volumes système :

Maintenant, lancez docker run avec l'option -v logs:/usr/src/app/logs (dites le nom du volume au lieu d'un dossier)

docker run -d -p 80:3000 -v logs:/usr/src/app/logs --name node-app examplenode

docker inspect en cours d'exécution sur l'image affichera le volume monté :

"Mounts": [
    {
        "Type": "volume",
        "Name": "logs",
        "Source": "/var/lib/docker/volumes/logs/_data",
        "Destination": "/usr/src/app/logs",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],

Voir? Maintenant, les journaux seront stockés dans le /var/lib/docker/volumes/logs/_data dossier.

Les volumes seront indispensables lorsqu'il sera temps de déployer un conteneur sur un service cloud par exemple.

Vous pouvez supprimer un volume exécutant docker volume rm <name> .


Docker
  1. Comment installer WordPress avec Docker

  2. Comment exécuter un programme dans un conteneur Docker ?

  3. Comment exécuter MySQL dans un conteneur Docker

  4. Comment se connecter en SSH à un conteneur Docker

  5. Comment installer Vim dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment ajouter un volume à un conteneur Docker existant

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Comment configurer un conteneur Apache Docker

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

Comment exécuter des conteneurs Docker