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

二、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"

相关文章:

  • 文件系统调用(下) ─── linux第18课
  • 【redis】string应用场景:缓存功能和计数功能
  • UVa12303 Composite Transformations
  • c#客户端请求 Server-Sent Events
  • 音视频开发面试准备
  • Python组合数据类型(二)
  • Python字典,集合
  • Linux 网络:skb 数据管理
  • WEB实时推送消息的7种方式
  • 开发常用软件
  • C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
  • Python 构建Flask网页端远程控制Windows系统功能
  • 基于Ollama平台部署的Qwen大模型实现聊天机器人
  • 计算机考研C语言
  • Docker搭建Redis哨兵模式【一主两从三哨兵】
  • 《TCP/IP网络编程》学习笔记 | Chapter 17:优于 select 的 epoll
  • 面试之《commonjs,requirejs和es6 Module的区别》
  • Photo Works在线图片编辑器:一键修复老照片,轻松焕新记忆
  • java-单列模式-final-枚举
  • 「 DelegateUI 」Ant-d 风格的 Qt Qml UI 套件
  • “五一”从昆明机场出境1.4万人次,较去年增长7.7%
  • 美权威人士批“特朗普对进口电影征关税”:将杀死美电影产业
  • 专访|刘伟强:在《水饺皇后》里,我放进儿时全家福照片
  • 当一群杜克土木工程毕业生在三四十年后怀念大学的历史课……
  • “五一”第三天郑州铁路局预计发送旅客76万人
  • 三亚回应“游客骑摩托艇出海遇暴雨”:未失联,已引导申请先行赔付