〖Docker指南④〗docker容器卷

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了,为了能保存数据在docker中,我们使用卷。有点类似我们Redis里面的rdb和aof文件;或者配置中心;再或者k8s里的数据卷

一、它是啥玩意啊



背景


  • Docker将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
  • 容器之间希望有可能共享数据


Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了,为了能保存数据在docker中,我们使用


有点类似我们Redis里面的rdb和aof文件;或者配置中心;再或者k8s里的数据卷


二、有啥用啊



  • 容器的持久化
  • 容器间继承+共享数据


卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:


卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷


特点:


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


三、数据卷



3.1 直接命令添加


上一章《〖Docker指南・Ⓓ³〗Docker镜像的深度解析》讲解了如何制作自己的镜像issa/myubuntu,那么本次本次讲解,我们依旧以这个开始数据卷的演练。

1.png



3.1.1 挂载数据卷


命令:docker run -it -v /宿主机绝对路径目录:/容器内目录:[权限] 镜像名


[权限]:ro/rw(只读/读写)

通过在容器内路径后加上ro、rw来改变读写权限

ro readonly # 只读

rw readwrite # 可读可写

默认rw, 如果为ro,这个路径只能通过宿主机来操作,容器内部无法操作


  1. 新建命令:dockder run -it -v /tmp:/tmp/test issa/myubuntu:1.14 bash
  2. 在主机/tmp目录下,新建命令:touch hello.txt
  3. 查看容器内的test目录下是否同步更新了hello.txt文件
  4. 在容器当前目录下新建命令:tail -f hello.txt ,观察ing
  5. 在主机/tmp目录下,新建命令:echo i love u CSDN 步尔斯特 >> hello.txt,观察容器内是否有输出

2.png

3.png


3.1.2 查看数据卷是否挂载成功


docker inspect 容器ID

4.png



3.1.3 容器和宿主机之间数据共享


3.1.4 容器停止退出后,主机修改后数据是否同步


3.1.5 命令(带权限)


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


3.2 DockerFile添加


  1. 根目录下新建mydocker文件夹并进入


  1. 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷

VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明:

出于可移植和分享的考虑, 用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。

由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。


  1. File构建


# volume test 
FROM issa/ubuntu:1.14 
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] 
CMD echo "finished,--------success!" 
CMD /bin/bash 

4.build后生成镜像

获得一个新镜像issa/ubuntu:1.14


5.run容器


6.通过上述步骤,容器内的卷目录地址已经知道


7.主机对应默认地址


3.3 挂载的三种方式


所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxxx/_data


3.3.1 指定路径挂载


-v /主机路径:容器内路径

上述所使用的就是该方式


3.3.2 匿名挂载


-v 容器内路径


3.3.3 具名挂载


-v 卷名:容器内路径


3.4 备注


Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个--privileged=true参数即可


3.5 相关命令


  1. 查看所有volume的情况

docker volume ls

  1. 查看某个卷

docker volume inspect 卷名

5.4 数据卷容器


5.4.1 简介


命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器


以上一步新建的镜像为模板并运行容器dc01/dc02/dc03


它们已经具有容器卷

/dataVolumeContainer1

/dataVolumeContainer2


5.4.2 容器间传递共享(–volumes-from)


  1. 先启动一个父容器dc01

在dataVolumeContainer2新增内容

  1. dc02/dc03继承自dc01

–volumes-from

docker run -it --name dc02 --volumes-from dc01 issa/ubuntu:1.14

dc02/dc03分别在dataVolumeContainer2各自新增内容

  1. 回到dc01可以看到02/03各自添加的都能共享了
  2. 删除dc01,dc02修改后dc03可否访问
  3. 删除dc02后dc03可否访问
  4. 再进一步
  5. 新建dc04继承dc03后再删除dc03
  6. 结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止


相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
223 93
|
4天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
36 23
|
4天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
89 15
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
295 78
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
156 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
2月前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
191 35
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
62 17
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
1月前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
117 12
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
172 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档