Docker Volume 的经常用法区别

对于使用 NFS 的 Docker 数据卷,配置示例应当类似于这样:

version: '3'
services:
  my_service:
    image: your_image
    volumes:
      # 挂载命名的数据卷到容器内的路径(详细模式)
      - type: volume
        source: my_nfs_volume   
        target: /path/in/container

  my_service1:
    image: your_image1
    volumes:
      # 将宿主机上的目录(或文件)绑定并挂载到容器内部(详细模式)
      - type: bind
        source: ./host/path
        target: /container/path

  my_service2:
    image: your_image2
    volumes:
      # 挂载命名的数据卷到容器内的路径(简洁写法)
      - my_local_valume:/path/in/container2

volumes:  # 定义和配置数据卷部分
  my_nfs_volume:  # 命名的数据卷
    driver: "nfsv4" # 假设有一个名为 nfsv4 的 NFS 驱动插件可用
    driver_opts:
      server: nfs-server-ip-address
      share: /path/to/nfs/share

  my_local_valume: # 定义本地数据卷部分
    driver: local  # 默认情况下,无需指定driver为local,因为这是默认的数据卷驱动

    # 如果需要指定额外的选项,比如设置volume的位置,可以使用以下语法(但请注意,Docker Compose不直接支持设置local volume的具体路径)
    # driver_opts:
    #   type: none
    #   o: bind
    #   device: /host/path/to/volume

# 上述配置中,my_local_volume 是一个自动创建的本地数据卷。

# 如果没有提供具体的driver_opts来绑定宿主机上的特定路径,Docker将会在宿主机的内部位置自动创建并管理这个数据卷。

 

----------------------------------------------------------------------------------------------------

注意:

在 Docker Compose 中,对于本地数据卷,默认情况下你不需要明确指定 driver: local,因为它已经是默认的数据卷驱动。
Docker Compose 直接创建的本地数据卷通常不会让你自定义其在宿主机上的具体存储路径。
它会由 Docker 引擎自动管理,并存储在宿主机的一个特殊目录下。
如果你确实想要将宿主机上的某个特定路径与容器内的数据卷进行绑定,那么你应该在服务的 volumes 部分直接使用宿主机路径挂载的方式,而不是在 volumes 下面定义一个单独的本地数据卷,示例如下:

services:
  my_service:
    image: your_image
    volumes:
      - ./host/path:/path/in/container # 将宿主机上的路径直接映射到容器内

 

这种方式实际上是利用了 Docker 的 bind mount 而不是数据卷功能,但它同样实现了数据持久化的目的。

 

Link:Docker Volume

posted on 2024-01-30 18:02  ercom  阅读(39)  评论(0编辑  收藏  举报