六、Docker容器数据卷

news2024/11/14 23:41:28

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出)

目录

  • 前言
  • 一、容器数据卷
    • 1.1 容器数据卷
    • 1.2 怎么用
    • 1.3 能干什么
  • 二、实践案例
    • 2.1 启动ubuntu容器实例,挂载目录:
    • 2.2 在ubuntu容器实例的`/tmp/docker_data`中创建/修改文件,查看宿主机`/tmp/host_data`中变化
    • 2.3 在ubuntu容器实例的`/tmp/host_data`中创建/修改文件,查看宿主机`/tmp/docker_data`中变化
    • 2.4 容器stop了会怎么样?
    • 2.5 再看docker inspect命令
    • 在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/46ab01ed7e2c4ce780aecc2ab822f45b.png)
  • 三、容器卷读写规则映射添加说明
    • 3.1 默认规则
    • 3.2 指定规则
    • 3.3 演示
  • 四、容器卷继承
  • 总结

前言

坑:容器卷记得加入
· --privileged=true
· why

  Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
  解决办法:在挂载目录后多加一个–privileged=true参数即可

  如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

  在 五、Docker镜像发布到阿里云/私有库 中执行过如下命令:

docker run -d -p 5000:5000 -v /zwcoder/myregistry/:/tmp/registry --privileged=true registry

  命令中-v后面的参数/zwcoder/myregistry/是宿主机的路径,/tmp/registry是容器内的路径。:就是映射对应,实际是挂载,可以看作是共享目录。总体理解就是运行容器registry后,实现了宿主机喝容器内某路径的互通互联,将容器内的数据备份到宿主机(实际上是挂在,共享!)。
默认情况,仓库被创建在容器的var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调。

一、容器数据卷

1.1 容器数据卷

  就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性;
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

1.2 怎么用

  运行一个带有容器卷存储功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

1.3 能干什么

  将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的

  Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。

特点:

  1. 数据卷可在容器之间共享或重用数据;
  2. 卷中的更改可以直接实时生效;
  3. 数据卷中的更改不会包含在镜像的更新中;
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

二、实践案例

 启动一个ubuntu容器实例,挂载目录,查看对应目录的文件变化情况。

2.1 启动ubuntu容器实例,挂载目录:

在这里插入图片描述
注意!当目录不存在的时候会自动创建

2.2 在ubuntu容器实例的/tmp/docker_data中创建/修改文件,查看宿主机/tmp/host_data中变化

  这里只演示了创建,若是修改也会是同样都有变化
在这里插入图片描述
在这里插入图片描述

2.3 在ubuntu容器实例的/tmp/host_data中创建/修改文件,查看宿主机/tmp/docker_data中变化

  和2.2中一样,也会有对应变化,不做演示.

2.4 容器stop了会怎么样?

  1. stop容器实例
    在这里插入图片描述
  2. 在主目录下创建文件。
    在这里插入图片描述
  3. 启动停止的容器,进去查看对应目录有没有b.txt文件
    在这里插入图片描述
    说明确实是挂载,就像是共享一个文件一样!就很像Vue中的双向数据绑定v-model。

2.5 再看docker inspect命令

docker inspect 容器ID命令可以查看容器的详细信息,当然,也可以查看数据卷挂载的详情:

在这里插入图片描述
在这里插入图片描述

三、容器卷读写规则映射添加说明

  规则是针对容器的,并不是针对宿主机,所以限制的是容器读写功能。

3.1 默认规则

运行一个带有容器卷存储功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

此时并没有指定读写规则,默认是读,写

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

3.2 指定规则

两种规则;

  1. rw: 可读、可写;
  2. ro: read-only.只读;

3.3 演示

docker run -it --privileged=true -v /tmp/myubuntu1:/tmp/u1:ro --name=u1 ubuntu
在这里插入图片描述

四、容器卷继承

  直接上案例就明白了,其实本质就是两个容器,第二个容器容器卷不是指定,而是采用from来继承,本质就是用的第一个容器相同的容器卷映射。

  1. 在第一个终端启动一个ubuntu容器实例,并随意创建一个文件a.txt.
    在这里插入图片描述
  2. 在第二个终端启动第二个ubuntu实例,数据卷继承第一个ubuntu容器。发现也有a.txt
    在这里插入图片描述
  3. 无论是在主机创建还是u2被exit了,都不会影响数据的共享,包括u2退出后,在u3中创建文件,如果u2再启动,所有的文件都能共享到。可以自己尝试!

总结

  理解了容器数据卷,将会对容器相关存储有更好的理解和应用。


其他说明

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

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

相关文章

Android 组件化架构思路

作者:往事一块六毛八 为什么要模块化/组件化 随着APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,APP业务模块的数量有可能还会继续增加,而且每个模块的代码也变的越来越多,这样发展下去单一…

GNS3报错“unable to open TAP device tap0 (No such file or directory)”解决

系统:MacOS 13.4 GNS3版本:2.2.35.1 Tunnelblick:3.8.8b 起因 在gns3中使用cloud节点创建 tap 接口连接路由器报错: 解决办法 借助 Tunnelblick工具创建 Tap 虚拟网卡。Tunnelblick下载地址: https://tunnelblic…

Kubernetes入门实战课-初始容器

Kubernetes入门实战课-初始容器 文章目录 Kubernetes入门实战课-初始容器课前准备初始容器Docker 的形态Docker 的安装Docker 的架构 容器的本质隔离原因与虚拟机区别隔离是怎么实现的 镜像创建容器镜像:如何编写正确、高效的Dockerfile镜像的内部机制是什么Dockerf…

MySQL数据库连接查询和存储过程

MySQL数据库连接查询和存储过程 一、连接查询1、内连查询2、左连接3、右链接 二、存储过程1、存储过程简介2、存储过程的优点3、语法3.1 参数分类3.2 不加参数的存储过程3.3 带参数的存储过程3.4删除存储过程3.5 事务和存储过程有什么区别? 三、总结1、连接查询2、存…

【Java项目中 利用Redis实现数据缓存】

文章目录 Java SpringBoot项目中 用Redis实现数据缓存1 环境搭建1.1 maven坐标1.2 配置文件1.3 配置类 2 实现缓存短信验证码3 缓存菜品数据4 Spring Cache 缓存框架4.1 Spring Cache介绍4.2 Spring Cache常用注解4.3 Spring Cache使用方式 Java SpringBoot项目中 用Redis实现数…

一文了解Moonbeam互连合约

什么是互连合约Connected Contracts 简单来说,互连合约是通过Moonbeam连接其他区块链上的一个或多个智能合约,其允许目标链上的用户通过跨链消息传递协议在一个应用中操作不同链上的资产或是服务。 通过互连合约方案,不同迥异的公链技术架构…

计算机内部总线详解

文章目录 总线概述地址总线位宽 数据总线位宽CPU性能指标 例题 总线概述 众所周知,总线就是用来帮助连接两个或多个计算机组件,用于数据传输,计算机内部存在三种类型的总线: 地址总线:用于传输指示计算机中的内存或外…

【uboot1】常用指令

文章目录 1.U-Boot命令之常用命令:7.U-Boot命令之EMMC和SD卡操作命令:一般EMMC和SD卡是同一个东西,没特殊说明,统一MMC来代指EMMC和SD卡8.U-Boot命令之内存操作命令:直接对DRAM进行读写操作,uboot命令中的数…

MySQL数据库高级查询语句

MySQL数据库高级查询语句 一、语句SELECT ----显示表格中一个或数个字段的所有数据记录DISTINCT ----不显示重复的数据记录WHERE ----有条件查询AND OR ----且 或IN ----显示已知的值的数据记录BETWEEN ----显示两个值范围内的数据记录通配符 ----通常通配符都是跟 LIKE 一起使…

强化学习从基础到进阶-案例与实践[5]:梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)

【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧…

解决关于msvcp120.dll丢失的问题(解决方法)

msvcp120.dll是微软软件包的一部分。它是一个库文件,可用于支持软件运行时,msvcp120.dll的作用是提供计算机程序所需的标准库,msvcp120.dll还负责管理堆内存、线程和异常处理函数等。在使用windows编写的应用程序中,通常需要使用此…

【新星计划·2023】Linux系统的架构和组件讲解

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解Linux系统的架构和组件。 目录 一、Linux系统的架构 1、硬件层 2、内核层 3、进程管理子系统 4、内存管理子系统 5、…

JDBC和数据库应用总结

文章目录 1. JDBC介绍2. 相关jar包引入3. JDBC与数据库基本连接4. JDBC API 详解4.1 Connection 接口4.2 Statement 接口4.3 ResultSet 5. PreparedStatement 详解 1. JDBC介绍 JDBC是一套标准接口,这套接口用于操作所有的数据库,不同的数据库厂商对迎合…

在C#下运行Python:IronPython和Pythonnet

在C#下运行Python可能有不同的原因。其中一些原因包括: 使用C#应用程序中不可用的特定Python功能或库。结合Python的简单性和表现力以及C#的性能和稳健性,完成不同任务。与基于Python的系统或服务进行集成。 为实现Python和C#之间的互操作性&#xff0…

Java日志框架介绍

​今天来聊一聊 Java 日志框架,不管是在项目开发阶段的调试,还是项目上线后的运行,都离不开日志。日志具有处理历史数据、定位程序问题、理解程序运行过程等重要作用。在 Spring 项目开发过程中我们常见的日志框架可能就是 logback、log4j2 和…

Go学习圣经:Go语言实现高并发CRUD业务开发

说在前面: 现在拿到offer超级难,甚至连面试电话,一个都搞不到。 尼恩的技术社群中(50),很多小伙伴凭借 “左手云原生右手大数据”的绝活,拿到了offer,并且是非常优质的offer&#…

APP/小程序嵌入游戏,游戏飞跃的赛道

APP/小程序接入游戏运营已不是新鲜事,然而,其仍具有巨大的发展潜力,尤其是社交类APP,多以加入娱乐游戏增加互动,获取目标客户,同时为产品增加变现渠道,实现双赢。 对于APP嵌入式游戏&#xff0…

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 一、微服务介绍1、系统架构演变1)单体应用架构2)垂直应用架构3)分布式4)SOA架构5)微服务框架6)常见微服务架构 2、SpringCloud Alibaba介绍3、S…

【C语言督学训练营 第十四天】二叉树真题实战 ----- 层序建树、前中后序遍历、求树的WPL

文章目录 前言树概念二叉树层序建树四种遍历二叉树的方式层次遍历前序遍历中序遍历后续遍历 真题实战! 前言 今天进行总结的是考研408有关二叉树的基础知识,是王道C语言督学营的第十四天,随着课程的深入,代码实战的难度慢慢的上来…

MyCat01——如何实现MySQL中的主从复制

1 问题 数据对于我们来说是一项最重要的资产,因为数据丢失带来的损失,对于一家公司来说,有时也是毁灭性的。 那么如何确保数据安全,不因断电或系统故障带来数据丢失呢? 当用户增加,对数据库的访问量也随…