深入理解 Docker 容器卷

目录

Docker 容器卷是一种强大的功能,可以实现容器之间数据共享和持久化存储。本篇博客将介绍 Docker 容器卷的概念、用途和操作步骤,帮助读者更好地理解和使用容器卷。

一、什么是 Docker 容器卷

  • 容器卷是一种 Docker 提供的数据管理机制,于在容器和宿主机之间共享数据。
  • 容器卷可以提供持久化存储,即使容器被删除或重新创建,数据仍然保留。

二、容器卷的用途

  • 容器之间共享数据:多个容器可以通过容器卷共享数据,实现不同容器之间的数据交互。
  • 容器与宿主机之间共享数据:容器卷可以与宿主机文件系统关联,实现容器内外数据的共享。
  • 数据持久化存储通过容器卷,将器中的数据持久化到宿机上,以防容器故障或删除而丢失数据。

三、容器卷相关命令

typescript 复制代码
docker volume create <volume_name>                          创建容器卷
docker volume ls                                            查看容器卷
docker volume inspect <volume_name>                         查看容器卷详情
docker volume rm <volume_name>                              删除容器卷
docker run -v <volume_name>:<container_path> <image_name>   关联容器卷

四、Docker 容器卷的操作步骤

  1. 创建容卷:使用 docker volume create 命令创建一个容器卷,可以指定名称和选项。
  2. 启动器时关联卷:在 docker run 命令中,使用 -v 参数关联所创建的容器卷。可以指定容器主机路径的映射关系。
  3. 在容器内使用卷:在容器的应用程序中,可以像操作文件系统一样使用容器卷,读取和写入数据。
  4. 管理容器卷:使用 docker volume 命令可以操作容器卷,例如列所有的容器卷、删除不再使用的卷等操作。

五、演示

1、创建容器卷:

typescript 复制代码
`docker volume create 容器卷名称`: 创建默认的 Docker 容器卷,存储在 Docker 管理的卷存储区中,具有持久化存储的特性,适用于容器之间的数据共享,具有较好的移植性

 `docker volume create --opt type=none --opt device=主机地址 --opt o=bind 容器卷名称`:创建与主机地址关联的卷,通过直接关联到主机的路径,实现容器与主机之间的数据共享,更加灵活但不够可移植

2、启动容器时关联卷:

typescript 复制代码
`docker run  -v 容器卷名:对应容器内路径 镜像ID`

`docker run -d -p 8889:6379 -v 容器卷名称:/bin/container --name my-redis redis:latest` :-d 是后台运行,-p 是匹配主机和容器端口映射,-v 后面跟容器卷路径,--name容器重命名,redis:latest镜像ID和版本

3、在器内写入数据:

typescript 复制代码
`docker exec my-redis` : 进入容器

`mkdir /bin/container/a.txt` : 容器中创建一个 a.txt文件

4、启动另一个容器并关联同一个卷:

typescript 复制代码
`docker run -d -p 8890:6380-v 容器卷名称:/bin/container --name my-redis2 redis:latest`  创建另一个容器,关联该容器卷

5、查看数据同步性

查看本地 容器卷 和 容器中 数据是否同步

六、总结

1、同一个容器卷可以应用于多个容器,并且数据共享。

例:创建容器卷C,容器A和容器B分别关联了容器卷C,如果容器A在容器卷C中创建了文件,会同步到容器卷C 和 容器 B 中

2、容器被删除后,容器卷数据会保留。

例:创建容器卷C,容器A和容器B分别关联了容器卷C,后期如果容器A和容器B被删除,容器卷C还会保留。

3、数据实时同步

例:创建容器卷C,容器A和容器B分别关联了容器卷C,无论是在容器卷C中添加数据、文件,都会实时同步到容器A和容器B关联的路径汇中,反之亦然。

4、创建容器关联容器卷的时候,也可以直接关联主机地址。(不建议)

例:docker run -v 主机地址:对应容器内路径 镜像ID

优缺点分析:

docker volume create 创建 容器卷易于移植性、容器公用

docker run -v 主机地址:对应容器内路径 镜像ID 不易于移植性、容器公用

参考

Docker Documentation: Manage data in Docker

Docker Documentation: Use volumes

相关推荐
就叫飞六吧3 小时前
K8s 端口暴露:集群统一暴露 vs 单 Pod 暴露
云原生·容器·kubernetes
执笔为剑3 小时前
docker环境升级数据库
数据库·docker·容器
于眠牧北4 小时前
ubuntu22.04安装docker以及安装过程中报错解决方法
运维·docker·容器
FriendshipT4 小时前
算法部署知识点:TensorRT、Tensorflow、Flask、Docker、TFLite
算法·docker·flask·tensorflow
摇滚侠6 小时前
虚拟机部署龙虾 OpenClaw,VMware 安装 Linux CentOS 虚拟机操作系统,部署 Docker,部署 OpenClaw
linux·docker·centos
SuniaWang6 小时前
Vue 项目 Docker 多阶段构建部署指南(阿里云)
vue.js·阿里云·docker
returnthem6 小时前
Docker学习笔记
云原生·eureka
AI成长日志7 小时前
【agent专栏】Agent服务化与性能优化——Docker容器化、并发处理、成本控制
docker·容器·性能优化
indexsunny7 小时前
互联网大厂Java面试实战:微服务与Spring Boot在电商场景下的应用解析
java·spring boot·redis·docker·微服务·kubernetes·oauth2
minstbe7 小时前
IC 设计私有化 AI 助手实战:基于 Docker + OpenCode + Ollama 的数字前端综合增强方案(实战篇)
人工智能·python·docker·ai