Docker(5)-共享和持久化数据

Docker为我们提供了两种方法来共享和持久化数据:

  • Data Volumes
  • Data Containers

数据卷

数据卷有时被简单的称为卷,是存储在主机上的目录,从容器的根文件系统中可以直接访问到它。它不仅可以持久化容器中生成的数据,而且可以实现容器与容器之间,容器与主机之间的数据共享。

要配置数据卷,我们可以在docker命令中使用-v选项并指定卷名。例如:

docker run -it -v /mydir --name first ubuntu /bin/bash

ls一下,可以看到在容器的根文件系统中,已经有了一个名为mydir目录。我们进去创建一个文件:

cd mydir
echo "Simple test file" > file1.txt

退出第一个容器后,我们来运行第二个容器去访问我们之前创建的卷:

docker run -it --volumes-from first --name second ubuntu /bin/bash

这里我们使用了--volumes-from选项。

我们可以看到,包含了file1.txt文件的mydir目录已经存在在容器里。

那么容器怎样才能访问和共享主机的数据呢?非常简单,还是使用-v选项:-v hostdirectory:datavolume。例如:

mkdir ~/shareddir
docker run -it -v ~/shareddir:/volumedir ubuntu /bin/bash
cd volumedir
echo "Simple text file" > sharedfile.txt

sharedfile.txt是可以被容器和主机一起访问的。只不过在主机上,它位于主目录中的shareddir目录中;在容器中,它位于根目录中的volumedir目录中。

数据容器

数据容器是指那些只用来保存数据的容器。通常会在容器中创建一个或多个卷,其他的容器就可以通过--volumes-from选项来访问它们。

例如,我们先运行一个名为storage的数据容器,它包含一个卷并在后台运行:

docker run -d -v /data --name storage ubuntu

接下来我们运行另一个容器:

docker run -it --volumes-from storage ubuntu bash

它和我们举的第一个例子一样,只不过数据容器的功能更为单一。

注意:即使数据容器不在运行状态,数据容器中声明的卷依然可以继续被其他容器使用。

时间: 2024-08-03 15:15:28

Docker(5)-共享和持久化数据的相关文章

011.Kubernetes使用共享存储持久化数据

本次实验是以前面的实验为基础,使用的是模拟使用kubernetes集群部署一个企业版的wordpress为实例进行研究学习,主要的过程如下: 1.mysql deployment部署, wordpress deployment部署, wordpress连接mysql时,mysql的 pod ip易变 2.为mysql创建 service,申请固定 service lp 3. wordpress外部可访问,使用 node port类型的 service 4. nodeport类型的 service

【赵强老师】Docker Swarm集群的数据持久化

如果Docker Swarm集群中运行了mysql.nginx等服务,这些服务的数据如果没有挂载到宿主机中,那么容器一旦停止运行,那就意味着数据丢失. 有什么方法可以解决swarm集群中运行的服务能够数据持久化呢?我们可以通过volme.nfs等方法来实现swarm集群应用数据持久化,其实也和docker数据持久化的形式是一样的. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. volume NFS 共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步

[docker]动态挂卷与数据卷管理

声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 动态挂卷 目前docker不支持动态挂卷.有同事就提出,以下方法是否可行:1. 将块设备通过ln链接到容器与host的映射目录.2. 将块设备挂载到容器与host的映射目录. 以下是实验过程:由于非特权无法看到/dev下的设备,因此ln链接实际是无效的. 同理,对于其他块设备,也是这样的.当然,我们可以配置privileged

使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据

使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据1.如何持久化到磁盘使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache 会将索引(xxx.index)回写到磁盘.这样就不用担心程序是否非正常退出导致缓存丢失了. 2.附上配置文件修改: <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchem

如何在Docker容器内外互相拷贝数据?

如何在Docker容器内外互相拷贝数据? 从容器内拷贝文件到主机上 docker cp <containerId>:/file/path/within/container /host/path/target 从主机上拷贝文件到容器内 参考自: http://stackoverflow.com/questions/22907231/copying-files-from-host-to-docker-container 1.用-v挂载主机数据卷到容器内 docker run -v /path/to

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

在很多游戏中都会有"存储进度","读取进度"等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景.这就需要数据储存.Unity中提供了一个用于本地持久化保存于读取数据的类--PlayerPrefs. 它是以键值对的形式将数据保存在文件中. 下面来看看PlayerPrefs的简单用法.. //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); //获取浮点型 Ag

解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题

需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划. 首先得有问题,如果每日重复相同的工作,也不主动去学习,很难发现新的问题.不怕自己无知,就怕不知道自己无知,只有不断的学习,才会发现更多未知的知识领域! 带着问题出发 回到顶部 分布式要解决什么问题呢?解决持久化数据太大,单个节点的硬盘无法存储的问题:解决运算量太大,单个节点的内存.CPU无法处理

关于 Unity3D 持久化数据存储的笔记 之 PlayerPrefs

持久化数据存储这个话题,无论在iOS.安卓都会经常见到的,更何况是跨平台的Unity. 首先我们说说最简单数据存储的方式吧. 1.PlayerPrefs类 在iOS 里面我们常用一种简单的方式存储读取简单的数据,就是通过 NSUserDefaults类来获取数据.读取数据. 而安卓处也有类似的方式进行存储.获取数据. 当然我们要学习的Unity 也有类似的方式进行存储.获取数据. 下面我就用iOS 来讲解一下. iOS 的数据存储是: [[NSUserDefaults standardUserD

【Excle数据透视表】如何创建非共享缓存的数据透视表

一般情况下,利用同一个数据源创建多个数据表时,默认创建的是共享缓存的数据透视表.刷新一个数据透视表时会影响其他数据透视表的展示结果. 解决方案 创建非共享缓存的多个数据透视表 步骤一 单击工作表数据任意区域→插入→数据透视表→新工作表→确定→单击数据透视表→拖动字段后建立数据透视表 步骤二 按下[ALT+D+P]组合键→数据透视表→下一步→选定区域→下一步→弹窗(选择否)→现有工作表→完成