当前位置: 首页 > article >正文

二、docker 存储

docker四种方式:默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供),其中volumes、bind mounts两种实现持久化容器数据;

  • 默认:数据保存在运行的容器中,容器删除后,数据也随之删除;

  • volumes:数据卷,数据存放在主机文件系统/var/lib/docker/volumes/目录下,该目录由docker管理,其它进程不允许修改,推荐该种方式持久化数据;

  • Bind mounts:直接挂载主机文件系统的任何目录或文件,类似主机和容器的共享目录,主机上任何进程都可以访问修改,容器中也可以看到修改,这种方式最简单。

  • tmpfs:数据暂存在主机内存中,不会写入文件系统,重启后,数据删除。

(一)卷管理以及文件系统挂在语法

1、Docker 卷管理语法

docker  volume  create :创建一个新卷
docker  volume  ls:列出本地docker主机上的卷
docker  volume  imspect:查看卷的详细信息,包括卷在Docker主机文件系统中的具体位置
docker  volume  prune:删除未被容器或者服务副本使用的全部卷
docker  volume  rm:删除未被使用的指定卷

2、容器的文件系统挂在语法

(1)-v 选项的语法
-v  [主机中的挂在源]容器中的挂在目标[:<选项>]

注:第三个选项是ro,默认是rw

(2)–mount 选项的语法格式
--mount  <键>=<值>,<键>=<值>

type:指定要挂在的类型,值可以是 bind(绑定挂载)、volume(卷)或 tmpfs。默认使用volume
source(或sc):指定挂载源,对于卷,挂载源卷,挂载源为主机上的目录或者文件
destionation(或dist、target):指定挂载目标,即容器中的挂在点,必须采用绝对路径的形式
readonly:指定只读选项,表示源以只读方式挂在到容器中
其他键:可以被多次指定,由若干键值对组成。卷和绑定挂载有不同的键

(二)案例

1、创建和管理卷

(1)创建卷

# docker volume create volume-test01

(2)查看卷的详细信息

# docker volume inspect volume-test01

(3)启动容器时挂载卷

# docker run -it -d -v volume-test01:/txt centos /bin/bash

(4)删除卷

docker volume  rm  volume-test01

注:没有容器使用该卷以后,才可以删除卷。

(5)启动容器时自动创建卷

启动带有卷的容器时,如果卷不存在,则docker会自动创建这个卷,即在docker根目录的volumes子目录下生成相应的目录结构。

# docker run -it -d --name  com-test01 --mount source=vol-test01,target=/app  nginx

2、使用容器填充卷、使用只读卷和使用匿名卷

(1)使用容器填充卷

如果容器启动时挂载已经存在并包含数据的卷,则容器不会将其挂载点目录的数据复制到该卷,而是直接使用卷。

如果容器启动时挂载空白卷(卷已经存在但是没有任何数据)或者自动创建新卷,而容器的挂在点目录下已经有文件或者目录,则该挂载卷目录的内容会被复制到卷中,即将容器中挂在点目录的数据填充到卷中。

(2)使用只读卷

# docker rm -it -d --name=nginx --mount soruce=nginx-vol01,destination=/usr/share/nginx/html,readonly  nginx:latest

(3)使用匿名卷

# docker run -it -d --mount destination=/app  nginx

注:匿名卷并不是没有名称的,而是docker自动为匿名卷生成一个UUID作为名称。

3、使用容器进行绑定挂载

# docker run -it -d --name  con-test-01 --mount type=bind,source="$(pwd)"/nginx,target=/app  nginx

4、创建、备份、恢复卷容器

docker run --rm :停止容器时自动删除容器
			--volumes-from :基于卷容器创建新的容器,并挂载卷容器提供的卷
(1)创建卷容器
# docker create --name data-store01 -v /data01 ubuntu /bin/bash
(2)备份卷容器

① 启动新的容器并从data-store01容器中挂载卷

② 将本地主机的当前目录挂载为/backup

③ 传送命令,将data01卷的内容打包为/backup/backup.tar文件

# docker run --rm --volumes-from data-store01 -v $(pwd):/backup  ubuntu tar -cvf /backup/backup.tar  /data01
(3)从备份中恢复卷容器
# docker run -v /data01 --name data-store02 ubuntu /bin/bash
# docker run --rm --volumes-from data-store02 -v $(pwd):/backup ubuntu bash -c "cd /data01 && tar -xvf /backup/backup.tar  --strip 1"


http://www.kler.cn/a/581611.html

相关文章:

  • 基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现
  • 关于ngx-datatable no data empty message自定义模板解决方案
  • linux makefile tutorial
  • Java 函数式编程:简化代码
  • Spring IoC:解耦与控制反转的艺术
  • hive 中各种参数
  • 大语言模型基础—语言模型的发展历程--task1
  • python的sql解析库-sqlparse
  • OpenCV 拆分、合并图像通道方法及复现
  • JAVA的权限修饰符
  • 前瞻技术新趋势:改变未来生活方式的技术探索
  • Flink测试环境Standalone模式部署实践
  • 关于Vue/React中Diffing算法以及key的作用
  • C/S架构与B/S架构
  • C++设计模式-观察者模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 【算法】BFS(最短路径问题、拓扑排序)
  • ScanPy - Preprocessing and clustering 3k PBMCs (legacy workflow)工作复现
  • 【亲测有效】Mac系统升级或降级Node.js版本,Mac系统调整node.js版本
  • alibaba EasyExcel的使用说明
  • 基于Ollama平台部署的Qwen大模型实现聊天机器人