前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker如何管理数据

Docker如何管理数据

作者头像
DevinGeng
发布于 2019-04-09 09:32:58
发布于 2019-04-09 09:32:58
1.1K0
举报
文章被收录于专栏:云+技术云+技术

Docker如何管理数据

http://os.51cto.com/art/201406/443516.htm 到目前我们介绍了一些Docker的基础概念, 知道了如何使用Docker的p_w_picpath, 也知道了如何在多个container间通过网络通讯. 在这章里我们将介绍如何在docker的container内管理数据以及如何在不同的container间共享数据。 我们将介绍两种主要的在docker中管理数据的方法: Data volumes Data volume container Data volumes 一个 data volume 就是一个在一个或者多个container里的特殊用途的目录。它绕过了 Union File System (译者: 这里不确定, 需要研究)为持久化数据、共享数据提供了下面这一些有用的特性: Data volumes 可以在不同的container之间共享和重用数据 对 Data volume 的修改及时生效(译者:data volumn是一个目录, 多个container都挂载这个目录, 具体的可以通过 docker inspect 看 volumne的信息) 对 data volume 修改内容在升级p_w_picpath的时候不会被包括进去 (译者:在docker的整个设计中p_w_picpath是一个无状态的, 这样对升级重用非常有利。而标记状态的数据, 比如数据库的数据, 生产的log之类的应该放到volume里。volume的持久化和恢复在下面有介绍, 是通过文件的形式的, 而不是通过p_w_picpath) Volumes 的持久化直到没有container使用他们 添加数据卷 你可以在docker run 的时候使用 -v 来添加一个 data volume。这个参数在docker run 的时候可以多次使用来添加多个 data volumes。让我们为我们的web application container挂载一个 volume。 $ sudo docker run -d -P --name web -v /webapp training/webapp python app.py 这里一个新的volume会创建到container里的 /webapp. (译者:如果你通过ssh或者通过 -i 登陆到你的container的一个shell里, 使用 ls /webapp 可以验证挂载成功了) 注意: 你也可以在Dockerfile里添加 VOLUME 字段,这样在创建一个新的p_w_picpath的 container是就会自动的创建新的volume. 安装一个目录作为数据卷 使用 -v 不仅能创建一个新的 volume, 还可以把宿主机一个目录mount到container里。 $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 这条命令会把本地目录 /src/webapp mount到container里的 /opt/webapp 目录上。用这个方法来测试程序非常 方便, 比如我们可以把我们的源代码通过这个方法mount到container里, 修改本地代码后立即就可以看到修改后的代码是如何在container里工作的了。宿主机的目录必须是绝对路径, 如果这个目录不存在docker会为你自动创建。 注意 这里是没法用 Dockerfile实现的, 因为这样的用法有悖于可移植性和共享. 因为本地目录就像他名字告诉我们的, 是和本地相关的, 不一定可以在所有的宿主机上工作.(译者: 鬼知道你在使用p_w_picpath的时候的host是啥样子的) Docker默认设置volume是可读写的,但是我们也可以mount一个目录为只读: $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py 这里我们同样mount了 /src/webapp 目录, 但是我们加上了 ro 参数, 告诉docker这个volume是只读的. 创建并安装数据卷容器 如果你有一些持久化的数据, 并且想在不同的container之间共享这些数据, 或者想在一些没有持久化的container中使用, 最好的方法就是使用 Data Volumn Container, 在把数据mount到你的container里.(译者:如开篇译者提到的docker的container是无状态的, 也就是说标记状态的数据,例如:数据库数据, 应用程序的log 等等, 是不应该放到container里的, 而是放到 Data Volume Container里, 这点和funcational programming很像, 所以我喜欢把一般的docker container 叫做 functional container用来区分 data volume container ) 让我们创建一个有名字的 Data Volume Container 来共享数据; $ docker run -d -v /dbdata --name dbdata training/postgres 这样做之后就可以通过 --volumes-from 把 /dbdata mount到其他的container里了: $ docker run -d --volumes-from dbdata --name db1 training/postgres 还可以继续共享到另外一个container里: $ docker run -d --volumes-from dbdata --name db2 training/postgres -volumes-from 可以多次使用来 mount 多个conatainer里的多个volumes。 这个操作是链式的, 我们在db1 中通过 --volumes-from mount进来的 volume可以继续被其他container使用: $ docker run -d --name db3 --volumes-from db1 training/postgres (译者: 这里我们不是直接使用 volume container, 而是使用db1 这个functional container 把volume 挂载到另外一个 funcational container上的,所谓的链式就是 dbdata -> db1 -> db3) 如果你把所有mount volumes的container都移除掉, 包括初始化的那个 dbdata container, volume才会被移除掉。通过这个属性可以方便的升级升级数据或者在不同container间migrate数据. 备份、恢复和移植数据卷 Volume的另外一个用处就是备份、恢复和migrate数据。 具体的做法如下,使用 --volumes-from 来创建一个新的container mount这个volume $ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata >    这里我们启动了一个新的container, 从 dbdata 挂载了一个volume。同时挂载了一个本地目录到这个container里。最后我们通过一个 tar命令把 dbdata 里的数 据备份到了 /backup 里。命令结束并且停止这个container后我们就在本地得到了一个备份的数据. (译者: 这里使用的 ubuntu container, 就是为了把volume中的数据打包备份到host的某一个目录里。) 备份的数据可以恢复到这个container, 或者其他使用这个volume的container。首先创建一个container; $ sudo docker run -v /dbdata --name dbdata2 ubuntu >    之后un-tar备份文件到 data volume 里; $ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar 你可以使用你喜欢的工具加上上面的技术来自动备份,迁移和恢复数据。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014/11/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​Docker数据管理
在前面我们详细学习了docker的三大核心概念:镜像、容器和仓库,接下来开始学习如何管理数据。在实际工作中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,此时必然会使用到容器数据管理的各种操作。
啃饼思录
2020/12/29
1.3K0
​Docker数据管理
实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
王小雷
2018/01/02
2.2K0
实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
Docker 学习笔记-数据管理
我们在使用 docker 的时候会将一些数据(例如网站文件、配置文件、数据库文件等)存储在容器中。这样存在一个严重的问题,如果容器出现损坏(例如无法启动,被删除等)那么存储在容器中的数据就会丢失,即使我们进行了容器备份,数据也不可能恢复到故障发生时。如果要解决这个问题,我们就需要用到 docker 的数据管理。在 docker 中数据管理一共有两种方式,分别是数据卷和数据卷容器,下面我们来一一讲解。
喵叔
2020/09/08
4950
Docker学习笔记之Docker的数据管理和存储
数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重。特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能。我们知道,在 Docker 里,容器运行的文件系统处于沙盒环境中,与外界其实是隔离的,那么我们又要如何在 Docker 中合理的通过文件与外界进行数据交换呢?在这一小节中,我们就来介绍 Docker 中与文件数据有关的内容。
Jetpropelledsnake21
2019/03/04
9470
Docker学习笔记之Docker的数据管理和存储
Docker从入门到精通(三)
如果用户需要在多个容器之间进行共享持续更新的数据,最简单的方式就是使用数据卷容器,他的目的就是专门用来提供数据卷供其他容器挂载
小土豆Yuki
2023/02/23
3760
Docker从入门到精通(三)
Docker 使用指南 (四)—— 数据卷的使用
摘要总结:本文主要介绍了如何使用Docker进行数据库的部署和运维,包括Docker Compose、数据卷的使用等。通过使用Docker,可以简化数据库的部署和运维,提高效率和可靠性。同时,还介绍了如何通过数据卷在不同的容器之间共享数据,以及如何使用Docker进行数据的备份和恢复。
田飞雨
2016/07/20
5.3K0
跟我一起学docker(六)--数据管理
1.数据卷 数据卷是一个可供容器使用的特殊目录,有如下特性: 数据卷可以在容器之间共享和重用 数据卷修改会立即生效 数据卷的更新不会影响镜像 如果有容器使用数据卷,该卷会一直存在 准备工作:
IT架构圈
2018/05/31
6000
02、数据卷(Data Volumes)以及dockefile详解
天蝎座的程序媛
2023/10/17
4820
02、数据卷(Data Volumes)以及dockefile详解
docker容器技术系列六:docker容器的数据管理
刚接触docker时总在思考两个问题: 1、docker容器如何实现将数据持久化呢?比如一个httpd容器中用户上传的文件或者访问日志等! 2、如何实现便捷的更新容器中的文件呢? 比如需要快捷的更新容器中的程序,总不能每次更新都build一次镜像吧! 那下面我们就来聊聊docker容器的数据管理:数据卷。 docker提供了两种方式实现数据管理: 1、映射宿主机目录或文件 2、通过创建一个专用的数据卷容器与相关容器间共享数据并实现持久化 一、数据卷的基本概念 数据卷是一个可供一个或多个容器使用的特殊目录,它
小小科
2018/05/04
8360
docker容器技术系列六:docker容器的数据管理
使用数据卷管理数据 | Docker 系列
众所周知,容器是随时创建随时删除的,那删除时容器里的数据怎么办呢?每次手动备份出来?当然不需要,Docker 非常贴心的提供了数据持久化方案,叫数据卷 volume。
AlwaysBeta
2020/11/06
5690
[docker](七)docker -- 数据卷
Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:
baron
2019/12/03
1K0
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,一方面,往往需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在Docker的容器被删除销毁后,并不保留容器状态的信息。那么如何实现信息的持久化操作呢?这必然涉及容器的数据管理操作和数据的持久化。
赵渝强老师
2024/08/13
1120
【赵渝强老师】Docker的数据持久化
06. 管理Docker容器数据
在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在 Docker 的容器被删除后,并不会保留容器的状态信息。那么如何实现信息的持久化呢?这必然涉及容器的数据管理。
有一只柴犬
2024/01/23
1570
06. 管理Docker容器数据
06. 管理Docker容器数据
在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在 Docker 的容器被删除后,并不会保留容器的状态信息。那么如何实现信息的持久化呢?这必然涉及容器的数据管理。
有一只柴犬
2024/01/25
1450
06. 管理Docker容器数据
容器中的数据管理
本节学习的内容是如何管理容器中的数据以及容器之间的数据,我们将要学习如下两个主要方式:
字母哥博客
2020/09/23
8130
Docker 入门到实战教程(六)Docker数据卷
一. 前言 上一篇介绍到如何构建镜像以及镜像管理,不知道大家学到现在有没有疑问?比如我运行web服务产生的日志,我如何在宿主机上看到?我想安装mysql或者redis等,配置文件如何配置,可以进到容器
小东啊
2020/07/23
1.5K0
Docker 入门到实战教程(六)Docker数据卷
docker入门篇
docker pull centos       # 从docker仓库下载一个镜像例如:docker pull centos:6.7
保持热爱奔赴山海
2019/09/18
5910
Docker是什么?
Docker是什么? Docker是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎,基于Go语言并遵从Apache2.0协议开源。 开发者可以搭建他们的应用
小小科
2018/05/04
2.1K0
Docker是什么?
03 . Docker数据资源管理与网络
第三种情况 (我们只设置了memory限制时300M,swap没有指定,默认被设置为与memory一样的值。memory+swap一共是600M)
iginkgo18
2020/09/27
5890
docker 安装和学习笔记
层(Layer)其实是AUFS(Advanced Union File System, 一种联合文件系统)中的概念,是实现增量保存于更新的基础。
solate
2019/07/22
1.5K0
相关推荐
​Docker数据管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文