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 小时前
实践篇:14-构建 Node.js 应用程序镜像
docker·node.js·dockerfile
做一个AC梦2 小时前
Docker安装失败:Docker Desktop installation failed
运维·docker·容器
Shan12052 小时前
浅谈Docker Kicks in的应用
运维·docker·容器
Li&&Tao2 小时前
docker 常用命令
docker·容器·eureka
Jiude3 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
飞询4 小时前
Docker 安装 Elasticsearch 9
elasticsearch·docker
ladymorgana7 小时前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
有点小帅得平哥哥7 小时前
本地部署index-tts并且通过docker做成镜像
docker·index-tts
小张是铁粉10 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信10 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器