docker数据卷持久化数据

  1. 什么是Docker数据卷
  2. 创建数据卷
  3. 挂载数据卷
  4. 管理数据卷
  5. 挂载主机目录

1. 什么是Docker数据卷

在Docker容器化的环境中,数据的持久性是一个常见的挑战。当容器被删除或重新创建时,容器内的数据通常会丢失。为了解决数据不随容器丢失的问题,Docker提供了数据卷的功能,可以实现数据的持久化和共享。本文将介绍如何使用Docker数据卷来实现数据的持久化。

Docker数据卷是一个特殊的目录,它可以绕过容器文件系统的生命周期,使数据在容器之间保持一致和持久化。数据卷可以在容器之间共享,并且它们的内容可以在多个容器之间保持一致。我们可以将主机的目录或者使用Docker管理的命名卷挂载到容器中,从而实现数据的持久化。

2. 创建数据卷

自动创建 :在运行容器时使用 -v--volume 选项指定一个未存在的数据卷名,Docker会自动创建一个新的数据卷并将其挂载到容器内。

bash 复制代码
docker run -v my_volume:/path/in/container image_name


➜  ~ docker run -dP --name nginx -v hello:/root nginx
d51d3414df425cc8ee1a0abe874dbbe0786aedd2650b4aad2df96dab1ab05825
➜  ~ docker volume ls
DRIVER    VOLUME NAME
local     hello

会创建一个命名为hello的数据卷,挂载到nginx容器内的/root目录。挂载路径根据实际需要设置,当有多个容器路径需要数据集时,可以挂载多个数据卷,每一个需要挂载挂载一个数据卷,-v hello:/root -v hello2:/home

手动创建 :使用 docker volume create 命令创建一个数据卷,然后在运行容器时指定使用。

javascript 复制代码
docker volume create my_volume
docker run -v my_volume:/path/in/container image_name

3. 挂载数据卷

挂载到容器 :在 docker run 命令中使用 -v--volume 选项指定数据卷名和容器内挂载点。

javascript 复制代码
docker run -v my_volume:/path/in/container image_name

4. 管理数据卷

  • 查看数据卷 :使用 docker volume ls 列出所有数据卷。
  • 查看数据卷详情 :使用 docker volume inspect <volume_name> 查看指定数据卷的详细信息。
  • 删除数据卷 :使用 docker volume rm <volume_name> 删除不再需要的数据卷。注意,删除数据卷会永久删除其中的数据,操作前请确保已备份重要数据。
  • 删除未使用的数据卷 :使用docker volume prune删除未被容器使用的数据卷,谨慎使用。

5. 挂载主机目录

Docker还提供了命名卷的功能,可以在多个容器之间共享和重用。我们可以使用以下命令来创建一个命名卷:

bash 复制代码
docker run -d -v /host/path:/path/to/container/directory <image>


➜  ~ docker run -dP --name nginx -v ${PWD}/nginx:/root ngi
nx
867afa7f98ce3b980817ebe4facfa7d0b7a290290ea11f416962958303edfcf6
➜  ~ echo "Hello World" > ~/nginx/hello.txt
➜  ~ docker exec 867afa cat /root/hello.txt
Hello World

创建了一个nginx容器,将宿主机的当前目录下/nginx挂载到容器内/root,输出Hello Wolrd 到 /root/hello.txt。接下来打印容器内/root/hello.txt,打印出Hello World,说明我们操作宿主机的目录,容器内中也产生了变化。

${PWD}是当前工作目录的简写,也可以写目录的绝对路径,效果一致。

综上所述,Docker数据卷为容器提供了持久化、可共享的数据存储空间,是构建健壮、可维护的容器化应用不可或缺的一部分。通过合理使用数据卷,可以有效管理容器数据,确保数据的安全性与可用性,方便数据的备份与迁移。

忍不住要加个关注!不是我吹,但你会后悔没关注的!

相关推荐
帝国辉耀11 小时前
docker、docker daemon、k8s、dockershim、containerd之间的关系
docker·容器·kubernetes
明明跟你说过1 小时前
【k8s】资源限制管理:Namespace、Deployment与Pod的实践
运维·docker·云原生·容器·kubernetes·k8s
2301_794333914 小时前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室
JCGKS5 小时前
Docker|“ssh: connect to host xxx.xxx.xxx.xxx port 8000: Connection refused“问题解决
docker·ssh·端口·listen·tcp三次握手
惜.己5 小时前
Docker启动失败 Failed to start Docker Application Container Engine.
spring cloud·docker·eureka
scugxl6 小时前
centos7 docker离线安装
运维·docker·容器
计算机小手8 小时前
AI 驱动数据分析:开源 SQLBot 项目探索,基于大模型和 RAG 实现精准问数与图表挖掘
经验分享·docker·开源软件
AI大模型8 小时前
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
docker·llm·deepseek
张璐月10 小时前
go docker-compose启动前后端分离项目 踩坑之旅
开发语言·docker·golang
剑客的茶馆11 小时前
新服务器从0开始搭配Ubuntu+Conda+Docker+Dify
服务器·ubuntu·docker·conda·dify