docker-compose 中卷的作用

What does volumes do in docker-compose

我目前正在学习Docker。我坚持卷的想法。我假设他们在我们重新启动容器等时存储数据,但我不明白如果我们不为 source:target 提供“:”会发生什么。 示例:

- "/usr/src/my-app/frontend/node_modules"
- "/usr/src/my-app/backend/node_modules"

如果我们像上面那样使用卷,我们在容器中存储了什么?

整个docker-compose

version: '3'

services:

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 80:80
    restart: always
    volumes:
      - "./nginx/default.conf:/etc/nginx/conf.d/default.conf"


  backend:
    build:
      dockerfile: Dockerfile.dev
      context: ./backend
    container_name: backend
    volumes:
      - "/usr/src/my-app/backend/node_modules"
      - "./backend:/usr/src/my-app/backend"


  frontend:
    build: 
      dockerfile: Dockerfile.dev
      context: ./frontend
    container_name: frontend
    environment:
      CHOKIDAR_USEPOLLING: "true"
    volumes:
      - "/usr/src/my-app/frontend/node_modules"
      - "./frontend:/usr/src/my-app/frontend"

这是一个匿名卷。它像命名卷一样由 docker 管理,但它没有真实名称,只有 GUID。同样,它类似于您在 Dockerfile 中使用 VOLUME 指令时得到的结果,而没有挂载命名卷或在 运行 容器时绑定挂载到该路径。

例如看这个(强调我的):

-v or --volume: Consists of three fields, separated by colon characters (:). The fields must be in the correct order, and the meaning of each field is not immediately obvious.
In the case of named volumes, the first field is the name of the volume, and is unique on a given host machine. For anonymous volumes, the first field is omitted.

https://docs.docker.com/storage/volumes/#choose-the--v-or---mount-flag

只要您保留容器并仅重新启动它,就会使用相同的卷。如果删除容器/创建新容器,它将使用新卷。