Docker之数据卷挂载

在Docker中,数据卷挂载是实现容器与宿主机之间数据持久化和共享的关键技术


1. 数据卷挂载的三种方式

  • 绑定挂载(Bind Mount)​:直接将宿主机目录映射到容器。
  • Docker管理卷(Volume)​:由Docker自动创建和管理的存储卷。
  • 临时文件系统(tmpfs)​:数据仅存储在内存中(本文不展开)。

2. 绑定挂载(Bind Mount)​

# 将宿主机的 `/host/path` 目录挂载到容器的 `/container/path`
docker run -v /host/path:/container/path image_name

# 使用更明确的 --mount 参数
docker run --mount type=bind,source=/host/path,target=/container/path image_name
注意事项
  • 如果宿主机目录不存在,Docker会自动创建,但可能需要处理权限问题。
  • 权限问题:若容器内进程无写权限,可尝试以下方法:
    • 在宿主机修改目录权限:chmod 777 /host/path
    • 启动容器时指定用户:docker run -u root ...

3. Docker管理卷(Volume)​

创建并挂载卷
# 创建具名卷
docker volume create my_volume

# 挂载卷到容器
docker run -v my_volume:/container/path image_name

# 或让Docker自动生成匿名卷(卷名随机)
docker run -v /container/path image_name
管理卷
# 查看所有卷
docker volume ls

# 查看卷详细信息
docker volume inspect my_volume

# 删除未使用的卷
docker volume prune

# 删除特定卷
docker volume rm my_volume

4. 实战示例:Nginx挂载网页目录

# 创建宿主机目录(假设当前目录为 ~/myapp)
mkdir html

# 运行Nginx并挂载目录
docker run -d -p 80:80 -v $(pwd)/html:/usr/share/nginx/html nginx
  • 在宿主机 ~/myapp/html 中放置 index.html,容器会实时加载该文件。

5. 数据卷容器(Legacy方式,仅供参考)​

# 创建数据卷容器
docker create -v /data --name mydata busybox

# 其他容器通过 --volumes-from 共享卷
docker run --volumes-from mydata image_name

6. 关键区别总结

方式数据位置管理方适用场景
绑定挂载宿主机指定路径用户开发环境,需直接修改文件
Docker管理卷/var/lib/docker/volumes/Docker生产环境,数据持久化
数据卷容器依赖其他容器Docker旧版Docker共享数据(不推荐)

7. 常见问题

  • Q: 容器内看不到挂载的文件?
    • A: 检查宿主机目录路径是否正确,或是否因权限问题导致挂载失败。
  • Q: 如何备份数据卷?
    • A: 使用 docker run --volumes-from 容器名 -v $(pwd):/backup busybox tar cvf /backup/data.tar /data 将卷数据打包到宿主机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值