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 持久化数据的迁移

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

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

相关推荐
书山有路勤为径~1 小时前
Docker 安装 Redis 容器
redis·docker·eureka
背太阳的牧羊人2 小时前
docker 中 什么是「卷」?(Volume)
运维·docker·容器
ascarl20104 小时前
k8s更新证书
云原生·容器·kubernetes
xyhshen4 小时前
麒麟v10+信创x86处理器离线搭建k8s集群完整过程
docker·容器·kubernetes·国产操作系统
编码如写诗4 小时前
【信创-k8s】海光/兆芯+银河麒麟V10离线部署k8s1.31.8+kubesphere4.1.3
云原生·容器·kubernetes
MonkeyKing_sunyuhua4 小时前
Kubernetes资源申请沾满但是实际的资源占用并不多,是怎么回事?
云原生·容器·kubernetes
石硕页5 小时前
windows下安装docker、dify、ollama
运维·docker·容器
ytttr8735 小时前
k8s的出现解决了java并发编程胡问题了
java·容器·kubernetes
David爱编程6 小时前
深入理解容器运行背后的“魔法秘籍”
后端·docker·容器
zhangxzq6 小时前
Docker 镜像深度剖析:构建、管理与优化
运维·docker·容器