【云原生Docker】08-Docker存储

news2024/11/29 5:37:53

【云原生|Docker】08-Docker存储

文章目录

  • 【云原生|Docker】08-Docker存储
    • 简介
    • Docker存储
      • 挂载方式
      • 挂载方式介绍
        • 挂载主机目录
        • 数据卷容器
      • 特性
    • Docker存储示例
      • 挂载主机目录
        • Type: bind
        • Type: volume
        • 总结
      • 数据卷容器
      • 利用数据卷容器迁移数据
        • 备份数据:
      • 恢复数据:
    • Docker Volume命令

简介

​ Docker 存储是指 Docker 容器中用来保存数据和文件的机制。在 Docker 中,容器本身是临时的,当容器停止或删除时,容器中的数据和文件也会被清除。因此,为了持久化保存容器中的数据和文件,我么就需要使用Docker的存储机制。

Docker存储

挂载方式

docker提供数据卷来实现数据共享与持久化,而数据卷的挂载有两种方式:

  • 挂载主机目录
  • 数据卷容器

挂载方式介绍

挂载主机目录

  • Type: bind
	绑定挂载是将宿主机上的目录或文件挂载到容器中的目录,从而实现容器中的数据和宿主机上的数据共享。绑定挂载使用 -v 或 --mount 参数来指定要挂载的宿主机目录和容器目录。这种方式的主要优势在于可以直接使用宿主机上的文件系统,可以方便地进行数据交换和备份。
  • Type: volume
	数据卷是 Docker 中一种特殊的目录,可以在容器和宿主机之间共享数据,也可以在容器之间共享数据。数据卷可以使用 docker volume create 命令创建,也可以在容器启动时使用 -v 或 --mount 参数来指定要挂载的数据卷。数据卷的主要优势在于可以在容器删除后保留数据,并且可以在不同的容器之间共享数据。
  • bind: 在docker inspect查看容器信息中mounts.type为bind类型;
  • volume: 在docker inspect查看容器信息中mounts.type为volume类型;

数据卷容器

	数据卷容器是一种特殊的Docker容器,其主要作用是管理Docker Volume,并将其共享给其他容器使用。具体来说,数据卷容器可以通过挂载Docker Volume来创建一个持久化的数据存储空间,并将其挂载到其他Docker容器中使用。

特性

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新不会影响镜像
  • 卷会一直存在,只到没有容器使用

Docker存储示例

挂载主机目录

Type: bind

  • Step1: 挂载一个宿主机目录作为数据卷
# #将宿主机的/root/data目录挂载至容器的/usr/share/nginx/html目录
docker  run -d  --name nginx_test -v /root/data:/usr/share/nginx/html:rw  nginx

# docker挂载数据卷的默认为权限为读写(rw),用户也可以通过ro指定为只读:
docker  run -d  --name nginx_test -v /root/data:/usr/share/nginx/html:ro  nginx

当 /root/data或/usr/share/nginx/html不存在的时候,/root/data会在宿主机上自动创建;/usr/share/nginx/html会在容器内自动创建。

  • *** Step2:*** 查看挂载类型
docker  inspect   nginx_test

在这里插入图片描述

Type:文件系统类型,可以是bind、volume、tmpfs等。
Source:挂载的源路径,可以是宿主机上的路径、Docker Volume的名称、tmpfs的名称等。
Destination:挂载的目标路径,即文件系统在容器内的挂载路径。
Mode:文件系统的访问权限控制,可以是read-write或read-only。
RW:表示是否为读写模式。
Propagation:表示Propagation mode的设置值。

Type: volume

  • Step1: 不指定宿主机目录,

默认会在宿主机的/var/lib/docker/volume下创建

# 不指定宿主机目录,挂载到容器的/usr/share/nginx/html
docker  run -d  --name nginx_test -v /usr/share/nginx/html  nginx
  • Step1: 也可以通过docker volume create 来创建存储卷
docker  volume  create my_volume
  • **Step2: **指定创建的存储卷
docker  run -d  --name nginx_test -v my_volume:/usr/share/nginx/html  nginx
  • *** Step2:*** 查看挂载类型

在这里插入图片描述

在这里插入图片描述

总结

  • -v 指定宿主机目录创建出来的容器的Mounts.type为 bind
  • -v 不指定宿主机目录(或 指定创建vomule)创建的容器的Mounts.type 为volume
  • 使用volume方式的时候,会将容器目录中的所有文件映射到宿主机目录中,而挂载主机目录的时候不会。

在这里插入图片描述

  • 特别注意:volume实际上也是挂载宿主机目录,上面只是区分两种挂载方式而已。

数据卷容器

  • Step1: 创建一个数据卷容器
 #创建一个数据卷容器dbdata,并创建一个数据卷挂载至/dbdata
docker run -it -v /dbdata --name dbdata  centos   
  • Step2: 其他容器可以通过–volumes-from来挂载dbdata容器中的数据卷:
docker run -it --volumes-from dbdata --name db1 centos
docker run -it --volumes-from dbdata --name db2 centos

容器db1和db2都挂载同一个数据卷到/dbdata目录,三个容器任何一方在该目录的写入,其他 容器都能看到.

–volumes-from参数可以多次使用,从多个容器挂载多个数据卷

如果删除了挂载的容器,数据卷并不会被自动删除,如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显示的使用docker rm -v 命令来指定同时删除关联的容器。

利用数据卷容器迁移数据

备份数据:

  • Step1: 创建含有数据的容器dbdata
docker run -d --name dbdata -v /dbdata  centos
  • Step2: 创造点生产数据
docker cp /var/log/ dbdata:/dbdata
  • Step3: 备份数据
  1. 先创建一个容器worker,并使用–volumes-from将dbdata挂载到worker容器,然后使用-v参数将容器的/backup目录映射到宿主机的backup目录。然后在容器中执行备份操作,这样就把数据备份到宿主机的/backup目录中了
docker run -it --volumes-from dbdata -v /backup:/backup --name worker centos  tar zcf /backup/backup.tar.gz /dbdata

恢复数据:

创建一个新容器,并用-v参数挂载本地的备份目录,然后执行解压操作,将备份文件解压至/dbdata目录。

  • Step1: 创建新容器dbdata2
docker run -it -v /dbdata --name dbdata2 centos:6 /bin/bash 
  • Step2: 恢复
docker run -it --volumes-from dbdata2 -v /backup:/backup centos  tar xf /backup/backup.tar.gz  

Docker Volume命令

  • 查看主机上现有的数据盘
docker volume ls 
  1. 默认情况下,在删除容器时,docker并不会删除其数据盘,查看没有容器在使用的数据盘方法如下:
docker volume ls -f dangling=true
  1. 如果想要删除没有使用的数据盘,使用如下指令:
docker volume rm VOLUME_NAME
  1. 删除掉容器时,同时删掉数据盘,则使用:
docker rm -v container_name
  • 检查一个或多个数据卷的详细信息,包括数据卷的名称、驱动程序、挂载点等信息。
docker volume inspect my-volume
  • 删除所有未被挂载的数据卷。
docker volume prune
  • 删除一个或多个数据卷,可以指定数据卷名称或ID
docker volume rm my-volume
  • 创建volume
docker volume create my-volume

序、挂载点等信息。

docker volume inspect my-volume
  • 删除所有未被挂载的数据卷。
docker volume prune
  • 删除一个或多个数据卷,可以指定数据卷名称或ID
docker volume rm my-volume
  • 创建volume
docker volume create my-volume

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小程序】小程序组件-1

一. form组件的使用 这个点自己写的时候卡了好久,比较有感悟。 首先明确一点,为什么需要form。 form可以封装一个模块,这个模块里可以有多个input操作,多个输出接口,多个按键,但是至多有两个关键按键&am…

“QT快速上手指南”之计算器(一)Qt Creator,窗口组件

文章目录前言一、什么是QT?二、准备工作:1. 安装Qt Creator:2. 安装Qt SDK:3. 下载安装器:三、窗口组件:四、QT 基本组件的简单介绍:1. QWidget2. QPushButton3. QLabel4. QLineEdit5. QSpinBox…

智能火焰与烟雾检测系统(Python+YOLOv5深度学习模型+清新界面)

摘要:智能火焰与烟雾检测系统用于智能日常火灾检测报警,利用摄像头画面实时识别火焰与烟雾,另外支持图片、视频火焰检测并进行结果可视化。本文详细介绍基于智能火焰与烟雾检测系统,在介绍算法原理的同时,给出Python的…

FPGA基于XDMA实现PCIE X4视频采集HDMI输出 提供工程源码和QT上位机程序和技术支持

目录1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利:工程代码的获取1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PCI …

PE文件解析

PE结构图 工具101editor 文件实列 0-30h为DOS header 40-F0h为DOS STUB 100-1F0h为PE_HEADER 200-2B0h为SECTION_HEADER **虚拟地址:**文件加载到内存中,每个进程都有自己的4GB,这个4GB当中的某个位置叫做虚拟地址 基地址:文件…

23种设计模式之工厂方法模式(黑马程序员)

工厂方法模式一、概述二、结构三、实现四、总结在最后一、概述 定义一个用户创建对象的工厂(接口),让接口的子类决定去实例化哪个对象,依赖其抽象编程。即工厂方法使一个类的实例化延迟到其工厂的子类。 二、结构 工厂方法模式的主要角色 抽象工厂&a…

计算机组成原理实验二 存储系统预习报告

实验一----静态RAM 一、实验目的 掌握静态随机存储器 RAM 工作特性及数据的读写方法。基于信号时序图,了解读写静态随机存储器的原理。 二、实验预习 1、阅读实验指导书,然后回答问题。 实验所用的静态存储器由一片 6116(2K*8bit &#x…

ROS开发之如何在同一个节点订阅、处理、发布消息?

文章目录0、引言1、创建中间特殊文件(含订阅者和发布者)2、在CMakeLists.txt添加编译规则3、在launch添加启动项4、编译运行5、三维显示0、引言 在ROS应用一般会用到发布者和订阅者,若只接收传感器数据,则只实现订阅者就行&#x…

客户服务 KPI是什么

当企业着手改进其客户服务计划时,必须以可衡量的方式进行。因为如果我们为了改进而改进,没有衡量,我们就永远无法真正知道我们做得有多好!如果您的公司已准备好升级其客户服务计划,这里有 12种方法可以衡量和跟踪您的客…

大学生问AI

大学生问AI写在最前面2,描述你在学习工作中碰到的最高级的 AI 是什么?1,你人生中第一次接触到 “人工智能” 的概念和产品是什么? 让你觉得 “人类做得东西的确有智能”?3,你听说过最近的 GPT,n…

Qt5.12實戰之Linux靜態庫與動態庫多文件生成a與so文件並調用

1.編輯並輸入內容到test.cpp與test2.cpp test.cpp #include <stdio.h> int func() {return 888; } test2.cpp #include <stdio.h> int func2() {return 999; } 將test.cpp與test2.cpp編譯成目標文件&#xff1a; g -c test.cpp test2.cpp 一次性生成目標文件…

阅读提升内在美

最近&#xff0c;想在内在美上提升自己&#xff0c;想把玩游戏的时间腾给阅读。不想只是善良&#xff0c;更希望自己拥有智慧拥有力量&#xff0c;更自信更热爱生活。 本篇博文会日日更新&#xff0c;也当作鼓励我继续阅读坚持阅读的动力和监督。 Z-Library 图书馆 分享一个…

LeetCode 1041. 困于环中的机器人

原题链接&#xff1a;1041. 困于环中的机器人 在无限的平面上&#xff0c;机器人最初位于 (0, 0) 处&#xff0c;面朝北方。注意: 北方向 是y轴的正方向。南方向 是y轴的负方向。东方向 是x轴的正方向。西方向 是x轴的负方向。 机器人可以接受下列三条指令之一&#xff1a; …

测试专家须精通Locust

目前随着AI人工智能越来越火&#xff0c;Python 编写的程序越来越多&#xff0c;更多的协议&#xff0c;更多的复杂应用。 所以Locust 是高级性能测试工程师和测试专家&#xff0c;必备技术之一&#xff0c;因为你不可能避免公司中使用python.编写接口或者程序。 在互联网公司…

C#|调用C/C++动态库

参考&#xff1a;C#总结&#xff08;四&#xff09;调用C动态库&#xff08;https://www.shuzhiduo.com/A/A2dmV49qze/&#xff09; 文章目录C#加载C动态库C#加载C#动态库涉及到的概念知识&#xff1a;托管DLL和非托管DLL的区别&#xff08;https://www.tinymind.net.cn/articl…

利用 ELK 处理 Percona 审计日志

Percona Server为 MySQL 数据库服务器进行了改进&#xff0c;在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具&#xff1b;另外有更多的参数和命令来控制服务器行为 前提 1、有强烈的审计需求。…

网站建设常用的cms建站系统推荐

国内网站建设市场参差不齐&#xff0c;建站公司多如牛毛&#xff0c;网站价格便宜的几百&#xff0c;贵的几十万&#xff0c;作为外行&#xff0c;很难去选择&#xff0c;国内大部分网站建设公司都是营销公司&#xff0c;完全没有底层技术框架的开发能力&#xff0c;90%以上的网…

srs流媒体服务安装和使用

简介 SRS(Simple Realtime Server)是一个简单高效的实时视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。 官网&#xff1a;https://ossrs.net/lts/zh-cn/ 编译安装 使用ubuntu系统作为例子&#xff0c;最好是20版本。 1、克隆项目代码 …

2023.4.12

文章目录一&#xff1a;try catch处理异常1&#xff1a;原理&#xff1a;2&#xff1a;catch中如何处理异常**3&#xff1a;try-catch-finally**4&#xff1a;多重catch5&#xff1a;异常的分类6&#xff1a;throw和throws的区别7&#xff1a;练习题8&#xff1a;重载和重写的异…

Python后端架构演进

做了3年的后端开发, 经历一款SaaS产品从0到10(还没有到100, 哈哈哈)的过程, 3年间后端的架构逐步演变, 在微服务的实践过程中遇到的问题也越来越多, 在这里总结下. 产品是一款服务于人力资源的SaaS在线服务, 面向HR有Web Android/iOS 小程序多个客户端, 后端采用RESTful风格AP…