sql >> Database >  >> NoSQL >> MongoDB

Docker:map wijzigen waar docker-volumes worden opgeslagen

Benoemde volumes worden opgeslagen in de map van docker (/var/lib/docker). Als u een volume in een specifieke hostmap wilt maken, gebruikt u een hostvolume met de volgende syntaxis:

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

Of uit je opstelbestand:

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"

Bij hostvolumes wordt de inhoud van het volume in de afbeelding overlappen met de exacte inhoud van de hostmap, inclusief de UID's van de hostmap. Een lege hostmap wordt niet geïnitialiseerd vanuit de afbeelding zoals een leeg benoemd volume is. UID-toewijzingen zijn meestal het moeilijkste onderdeel van het gebruik van een hostvolume.

Bewerken:uit de onderstaande opmerkingen, als je een benoemd volume nodig hebt dat fungeert als een hostvolume, is er een lokale persistente volume-plug-in die wordt vermeld op de plug-inlijst van docker. Na het installeren van de plug-in kunt u volumes maken die verwijzen naar hostmappen, met de functie dat zelfs na het verwijderen van het genoemde volume, de hostdirectory achterblijft. Voorbeeldgebruik van de plug-in omvat:

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

Ze bevatten ook een v2-opstelbestand met het volgende volumevoorbeeld:

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

Een extra optie waar ik de afgelopen maand van op de hoogte ben gebracht, is om de aankoppelopties van het lokale volumestuurprogramma te gebruiken om handmatig een bind-montage te maken. Dit is vergelijkbaar met een hostvolume in docker met de volgende verschillen:

  • Als de directory niet bestaat, zal het proberen om een ​​container te starten met een benoemd volume dat naar een bind-mount verwijst, mislukken. Bij hostvolumes initialiseert docker het naar een lege map die eigendom is van root.
  • Als de directory leeg is, zal een benoemd volume de bind-mount initialiseren met de inhoud van de afbeelding op de mount-locatie, inclusief eigendom/machtigingen van bestanden en directory's. Met een hostvolume is er geen initialisatie van de inhoud van de hostdirectory.

Om een ​​benoemd volume te creëren als bind mount, kunt u het van tevoren aanmaken met:

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

Van een docker run commando kan dit gedaan worden met --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

Of u kunt in een samengesteld bestand het genoemde volume maken met:

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

Mijn voorkeur zou zijn om het genoemde volume te gebruiken met het lokale stuurprogramma in plaats van het lokaal blijvende stuurprogramma van derden als u de genoemde volumefuncties nodig hebt.



  1. Gratis implementatie en monitoring van open source databases met ClusterControl Community Edition

  2. mangoest schema maken

  3. Mongoose-indexering in productiecode

  4. Gebeurtenis op sleutel verloopt