sql >> Base de Datos >  >> NoSQL >> MongoDB

Docker:cambie la carpeta donde almacenar los volúmenes de la ventana acoplable

Los volúmenes con nombre se almacenarán dentro de la carpeta de Docker (/var/lib/docker). Si desea crear un volumen en una carpeta de host específica, utilice un volumen de host con la siguiente sintaxis:

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

O desde su archivo de redacción:

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"

Con volúmenes de host, cualquier contenido del volumen dentro de la imagen se superpondrá con el contenido exacto de la carpeta de host, incluidos los UID de la carpeta de host. Una carpeta de host vacía no se inicializa desde la imagen como lo hace un volumen con nombre vacío. Las asignaciones de UID tienden a ser la parte más difícil de usar un volumen de host.

Editar:de los comentarios a continuación, si necesita un volumen con nombre que actúe como un volumen de host, hay un complemento de volumen persistente local que figura en la lista de complementos de Docker. Después de instalar el complemento, puede crear volúmenes que apunten a las carpetas del host, con la función de que, incluso después de eliminar el volumen con nombre, el directorio del host queda atrás. El uso de muestra del complemento incluye:

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

También incluyen un archivo de composición v2 con el siguiente ejemplo de volumen:

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

Una opción adicional de la que me enteré el mes pasado es usar las opciones de montaje del controlador de volumen local para crear manualmente un montaje de enlace. Esto es similar a un volumen de host en Docker con las siguientes diferencias:

  • Si el directorio no existe, fallará el intento de iniciar un contenedor con un volumen con nombre que apunte a un montaje de vinculación. Con volúmenes de host, Docker lo inicializará en un directorio vacío propiedad de root.
  • Si el directorio está vacío, un volumen con nombre inicializará el montaje de vinculación con el contenido de la imagen en la ubicación de montaje, incluidos los permisos/propiedad de archivos y directorios. Con un volumen de host, no hay inicialización del contenido del directorio de host.

Para crear un volumen con nombre como un montaje de vinculación, puede crearlo por adelantado con:

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

Desde una docker run comando, esto se puede hacer con --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

O en un archivo de redacción, puede crear el volumen con nombre con:

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

Preferiría usar el volumen con nombre con el controlador local en lugar del controlador de terceros de persistencia local si necesita las características del volumen con nombre.