docker的持久化

DockerFile的volume

复制代码
FROM centos:latest
RUN ***
VOLUME /data #声明容器中/data为匿名卷

docker run -v

复制代码
docker run -v /host/data:/container/data centos

总结

dockfile如果不是数据库类的这种需要持久化数据到磁盘上的应用,都是无需指定volume的。指定volume只是为了避免用户忘记指定-v时导致的数据全部在容器中,这样的话容器一旦被删除所有的数据都丢失了。

这并不会在宿主机上创建一个实际的卷或目录。它只是在构建镜像时告诉Docker,当容器从这个镜像运行时,/data 目录应该被视为一个卷,可以被挂载或覆盖。

然后,在运行容器时,你可以使用-v或--mount选项来挂载宿主机上的目录或Docker管理的卷到这个位置。如果你没有指定挂载点,Docker将自动创建一个匿名卷来存储/data 目录的内容。

总之,Dockerfile中的VOLUME指令是可选的,并且主要用于指定容器运行时应该被视为卷的目录。而实际的卷挂载是在docker run命令中指定的。

docker的持久化

挂载卷 (volumes)

当你使用 -v 或 --volume 挂载 Docker 卷时,你可以指定一个卷的名称,或者让 Docker 自动为你创建一个匿名卷。

  • 指定卷名称:如果你已经通过 docker volume create 创建了一个卷,并希望将其挂载到容器中,你可以这样做:docker run -v my-volume:/path/in/container my-image。这里 my-volume 是你预先创建的卷的名称。

  • 自动创建匿名卷(用的多) :如果你没有预先创建卷,但希望在 docker run 时自动创建一个,你可以省略卷名称前的部分,只指定容器内的挂载路径:docker run -v /path/in/container my-image。Docker 会自动为你创建一个匿名卷,并将其挂载到指定的容器路径。

优势

  • 独立于容器生命周期:Docker卷的存在与容器的生命周期无关,即使容器被删除,卷中的数据仍然保留。这为用户提供了持久化存储的能力。
  • 易于备份和迁移:Docker卷可以轻松备份、迁移或共享,方便数据管理。
  • 性能优势:Docker卷通常使用宿主机的文件系统来存储数据,因此其读写性能通常优于容器内的文件系统。
  • 安全性较高:Docker卷由Docker管理,与宿主机的文件系统相对隔离,这有助于减少潜在的安全风险。

绑定挂载(Bind Mounts)

绑定挂载允许你将主机上的文件或目录直接挂载到容器中。使用 -v 或 --volume 时,你可以通过指定主机路径和容器路径来实现这一点,格式为 host-path:container-path。例如:

复制代码
docker run -v /host/path:/path/in/container my-image

docker run -d -v /data/testdata:/data -p 8088:8080 docker-demo:latest

优势

  • 灵活性高:绑定挂载允许用户选择宿主机上的任意路径进行挂载,这为用户提供了极大的灵活性,特别是在需要直接访问宿主机文件系统的场景中。
  • 实时同步:绑定挂载的更改会实时反映在宿主机和容器之间,这对于需要实时同步数据的场景非常有用。
  • 易于理解:绑定挂载的语法简单直观,易于理解和使用。

docker 持久化数据的迁移

直接迁移宿主机的文件到目标宿主机

迁移文件到宿主机后,使用绑定挂载的方式挂载到新容器里面,这种方式不会覆盖原文件,但最好还是先对迁移过来的文件做一个备份

相关推荐
金刚猿6 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong6 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿6 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
陈桴浮海8 小时前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
70asunflower10 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
ShiLiu_mtx10 小时前
k8s - 7
云原生·容器·kubernetes
春日见11 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
xuhe211 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
星火s漫天12 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
MonkeyKing_sunyuhua14 小时前
docker compose up -d --build 完全使用新代码打包的方法
docker·容器·eureka