Docker 数据卷是容器间共享和持久化数据的有效方式。以下是几种共享数据卷的方法:
# 创建数据卷
docker volume create my_volume
# 第一个容器使用该数据卷
docker run -d --name container1 -v my_volume:/data image1
# 第二个容器使用相同数据卷
docker run -d --name container2 -v my_volume:/data image2
--volumes-from
共享# 创建第一个容器并挂载数据卷
docker run -d --name container1 -v /data image1
# 第二个容器共享第一个容器的所有卷
docker run -d --name container2 --volumes-from container1 image2
# 将主机目录挂载到多个容器
docker run -d --name container1 -v /host/path:/container/path image1
docker run -d --name container2 -v /host/path:/container/path image2
# 创建命名卷
docker volume create shared_vol
# 多个容器使用同一命名卷
docker run -d -v shared_vol:/app/data image1
docker run -d -v shared_vol:/app/data image2
version: '3'
services:
service1:
image: image1
volumes:
- shared_vol:/data
service2:
image: image2
volumes:
- shared_vol:/data
volumes:
shared_vol:
读写权限:默认情况下,容器对卷有读写权限。可以使用 :ro
指定只读:
docker run -v volume_name:/path/in/container:ro image
并发访问:多个容器同时写入同一文件可能导致数据损坏,需要应用层处理并发。
数据隔离:共享卷意味着所有容器都能访问相同数据,注意敏感数据保护。
卷生命周期:删除最后一个使用卷的容器时,匿名卷会被自动删除,命名卷会保留。
跨主机共享:对于多主机环境,可以考虑使用网络存储卷驱动如 NFS、Ceph 等。
选择哪种方法取决于您的具体需求,如是否需要持久化、是否跨主机、性能要求等因素。