MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Docker :changer le dossier où stocker les volumes Docker

Les volumes nommés seront stockés dans le dossier de docker (/var/lib/docker). Si vous souhaitez créer un volume dans un dossier hôte spécifique, utilisez un volume hôte avec la syntaxe suivante :

docker run -v /home/ubuntu/data/app-data:/app-data my-image

Ou depuis votre fichier de composition :

version: '2'
services:
    mongo:
        container_name: "CaseBook-db"
        restart: always
        image: mongo:3.2.7
        ports:
            - "27017"
        volumes:
            - /home/ubuntu/data/db:/data/db
        labels:
            - "ENVIRONMENT_TYPE=meteor"

    app:
        container_name: "CaseBook-app"
        restart: always
        image: "meteor/casebook"
        build: .
        depends_on:
            - mongo
        environment:
            - MONGO_URL=mongodb://mongo:27017/CaseBook
        ports:
            - "80:3000"
        volumes:
            - /home/ubuntu/data/uploads:/Meteor-CaseBook-Container/.uploads
        labels:
            - "ENVIRONMENT_TYPE=meteor"

Avec les volumes hôtes, tout contenu du volume à l'intérieur de l'image sera superposé avec le contenu exact du dossier hôte, y compris les UID du dossier hôte. Un dossier hôte vide n'est pas initialisé à partir de l'image comme l'est un volume nommé vide. Les mappages UID ont tendance à être la partie la plus difficile de l'utilisation d'un volume hôte.

Modifier :à partir des commentaires ci-dessous, si vous avez besoin d'un volume nommé qui agit comme un volume hôte, il existe un plug-in de volume persistant local répertorié dans la liste des plug-ins de Docker. Après avoir installé le plugin, vous pouvez créer des volumes qui pointent vers des dossiers hôtes, avec la fonctionnalité que même après avoir supprimé le volume nommé, le répertoire hôte est laissé derrière. Exemple d'utilisation du plug-in :

docker volume create -d local-persist -o mountpoint=/data/images --name=images
docker run -d -v images:/path/to/images/on/one/ one
docker run -d -v images:/path/to/images/on/two/ two

Ils incluent également un fichier de composition v2 avec l'exemple de volume suivant :

volumes:
  data:
    driver: local-persist
    driver_opts:
      mountpoint: /data/local-persist/data

Une option supplémentaire dont j'ai été informé au cours du mois dernier consiste à utiliser les options de montage du pilote de volume local pour créer manuellement un montage lié. Ceci est similaire à un volume hôte dans Docker avec les différences suivantes :

  • Si le répertoire n'existe pas, la tentative de démarrage d'un conteneur avec un volume nommé pointant vers un montage lié échouera. Avec les volumes hôtes, docker l'initialisera dans un répertoire vide appartenant à root.
  • Si le répertoire est vide, un volume nommé initialisera le montage lié avec le contenu de l'image à l'emplacement de montage, y compris la propriété/les autorisations du fichier et du répertoire. Avec un volume hôte, il n'y a pas d'initialisation du contenu du répertoire hôte.

Pour créer un volume nommé en tant que montage lié, vous pouvez le créer à l'avance avec :

docker volume create --driver local \
  --opt type=none \
  --opt device=/home/user/test \
  --opt o=bind \
  test_vol

À partir d'une docker run commande, cela peut être fait avec --mount :

docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
    foo

Ou dans un fichier de composition, vous pouvez créer le volume nommé avec :

volumes:
  data:
    driver: local
    driver_opts:
      type: none
      o: bind 
      device: /home/user/test 

Ma préférence serait d'utiliser le volume nommé avec le pilote local au lieu du pilote tiers persistant local si vous avez besoin des fonctionnalités de volume nommé.