sql >> Database teknologi >  >> NoSQL >> MongoDB

Docker:skift mappe, hvor docker-volumener skal opbevares

Navngivne volumener vil blive gemt i dockers mappe (/var/lib/docker). Hvis du vil oprette en diskenhed i en bestemt værtsmappe, skal du bruge en værtsdiskenhed med følgende syntaks:

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

Eller fra din skrivefil:

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"

Med værtsvolumener vil alt indhold af volumen inde i billedet blive overlejret med det nøjagtige indhold af værtsmappen, inklusive UID'er for værtsmappen. En tom værtsmappe initialiseres ikke fra billedet, som en tom navngivet diskenhed er. UID-tilknytninger plejer at være den sværeste del af at bruge en værtsvolumen.

Rediger:fra kommentarerne nedenfor, hvis du har brug for et navngivet volumen, der fungerer som en værtsvolumen, er der et lokalt persist volume plugin, der er opført på dockers plugin liste. Efter installation af pluginnet, kan du oprette volumener, der peger på værtsmapper, med den funktion, at selv efter at have fjernet den navngivne diskenhed, efterlades værtsmappen. Eksempel på brug fra pluginnet inkluderer:

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

De inkluderer også en v2-komponeringsfil med følgende volumeneksempel:

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

En yderligere mulighed, som jeg er blevet gjort opmærksom på i den seneste måned, er at bruge den lokale volumendrivers monteringsmuligheder til manuelt at oprette en bind-mount. Dette ligner en værtsvolumen i docker med følgende forskelle:

  • Hvis mappen ikke eksisterer, vil det mislykkes at prøve at starte en container med et navngivet volumen, der peger på et bind-mount. Med værtsvolumener vil docker initialisere den til en tom mappe, der ejes af root.
  • Hvis mappen er tom, vil et navngivet volumen initialisere bind-mount med indholdet af billedet på monteringsstedet, inklusive fil- og mappeejerskab/tilladelser. Med en værtsvolumen er der ingen initialisering af værtsbibliotekets indhold.

For at oprette et navngivet volumen som et bind-mount, kan du oprette det på forhånd med:

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

Fra en docker run kommando, kan dette gøres med --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

Eller i en skrivefil kan du oprette det navngivne bind med:

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

Min præference ville være at bruge den navngivne diskenhed med den lokale driver i stedet for den lokale driver fra tredjepart, hvis du har brug for de navngivne diskenhedsfunktioner.



  1. Sådan installeres MongoDB 4.2 på RedHat/CentOS 7-systemer

  2. Lagring af redis hget-værdier i en variabel i nodejs

  3. Spring Data MongoDB Transaktioner

  4. Redis (ioredis) - Kan ikke fange forbindelsesfejl for at kunne håndtere dem elegant