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

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

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

相关推荐
“码”力全开3 小时前
打破芯片与协议壁垒:基于 Docker + 边缘计算的 GB28181/RTSP 视频智能管理平台架构设计与源码交付方案
docker·音视频·边缘计算
geshifei4 小时前
K8s 容器运行 UnixBench — 代理机器执行记录
云原生·容器·kubernetes
Albert Edison6 小时前
【Docker】Ubuntu22.04 安装 Docker 教程
运维·docker·容器
AI服务老曹7 小时前
基于Docker的低代码AI视频管理平台架构解析:打通GB28181/RTSP多协议,支持异构边缘计算与全源码交付
人工智能·低代码·docker
codefan※7 小时前
一键部署私人 LLM:Ollama + Docker 极简指南
运维·docker·容器·大模型·llm·本地部署·ollama
李南想做条咸鱼8 小时前
k8s集群容器访问域名第一次不通,第二次必通如何解决
云原生·容器·kubernetes
FelixBitSoul9 小时前
K8s 调度器黑盒全拆解:拓扑约束数学陷阱 + Go 插件二开实战(避坑全记录)
容器·kubernetes
IT策士9 小时前
Docker 网络进阶:容器间通信与 DNS 解析
网络·docker·容器
热爱Liunx的丘丘人10 小时前
Docker Compose 实现 Nginx 与 MySQL 多容器服务编排
mysql·nginx·docker
热爱Liunx的丘丘人11 小时前
Docker
运维·docker·容器