Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”

Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”

matlehmann
我有一个含数据的容器,它有一个卷(比如在/var/data)中的持久性数据。该容器包含持久性数据对另一个容器的软件。
对于该软件的新版本,需要升级所述永久数据(结构或布局改变等)。其结果是,我想与在相同的位置已升级的数据的另一数据容器(在/var/data)和仍保留旧数据容器与它的数据不变。
这样一来,我可以用旧的数据容器与旧版本的软件,万一出了差错。
但是,我怎么能做到这一点?以实现所期望的结果所需要的步骤对我来说是不明显的。
我可以运行一个命令来升级容器像docker run -i -t --name temp --volumes-from data -v /upgraded image /upgrade_script.sh
但后来,我怎么将升级的数据恢复到原来的位置而没有覆盖旧的数据?如果我运行docker run -i -t --volumes-from temp image cp /upgraded /var/data,它将覆盖我的旧数据。我必须使用主机安装的卷为升级的数据,或者是有一些更好的解决方案?

sam
只是猜测,因为这里一般我更喜欢使用直主机安装卷和我苦苦寻找数据容器的效用。
但是......你能不能提交你的数据容器,然后保存映像等?
sven
哦,也请考虑使用docker commit快照容器SAM的建议迷死人了
keeb
我实际使用的数据容器,如UNIX管道;我觉得他们适合更自然在范式
docker run -name some_pipe_storage some_container_which_generates_data
docker run --volumes-from some_pipe_storage something_that_operates_on_data
语法,相当繁琐。非常强大却比较原始。

sven
有一些有趣的工作,关于加入卷的管理工具docker是怎么回事 - 我认为他们是前往1.4,我会做一些调查。 (有将是一个docker卷列表和操纵的东西)
我可能会做一个backup_data卷的容器中,然后运行一个数据迁移的形象,我想运行连接到数据和backup_data - 它可能做的第一件事是复制了从数据到backup_data,然后它会做的数据迁移。
然后你就可以运行旧的和新的,连接到每个各自databackend(与可能附着只读的备份?)
这样做,如果你使用的主机安装的应几乎是一样的,无论是直接或通过数据容器的风格代表。

matlehmann
您的建议是我的第一个想法行,但它并不符合我的预期,因为该过程后,迁移数据和原始数据将根据不同的路径,我看不出有什么办法改变这种状况,因为非主机卷不能被重新安装到不同的路径。从一个数据容器的体积的路径是静态的 - 即使对于由“--volumes-from”继承卷容器。
这是主机体积不同,因为我可以在每个docker运行调用改变这些的挂载位置。
我认为这些卷管理工具,你说说是非常必要的。对于我来说,这个数据容器docker成语感觉更像是一个变通。
请问您在阐述“docker commit迷死人了”,因为我看不到它,然而。至少在用例在手。据我所知,一个docker提交给我,其中包含一个容器的当前状态的新形象。这样将包括除持久数据我感兴趣的所有OS数据。

sven
哦crud。你说得对,卷路径是目前静态的。所以你需要一个步骤
1.你有在/数据中的现有的数据容器
2.迁移到位于/迁移的临时数据容器(如你有原始安装)
3./迁移数据迁移到安装在新升级的数据容器/数据(第二迁移映像就不需要原来的数据容量装
@ cpuguy83也许能告诉你更多关于新工具的微笑
WRT docker commit - 当你commit,你是不是在一个单一的包含图像层的一切,你正在做一个新的图像层,包含所有容器中所做的更改(与图像容器启动时使用)。
所以,如果你使用的容器,而不是卷的持久性数据和卷掉之类的东西日志,你可以使用docker承诺快照/备份只是你的持久性数据 - 和docker的出口可能让你存储这些层。

cpuguy83
是啊,我不会信赖“commit”,因为你将被限制在127提交的,除非你拼合映像出来。
@matlehmann看到github.com/cpuguy83/docker-volumes
这离完美的解决方案还远着呢,但在此期间工作相当不错

matlehmann
@Sven感谢您的答复,并了解更多信息。我还是不明白第3步的“/迁移数据迁移到安装在/数据的新升级的数据容器(第二次迁移映像就不需要原来的数据容量装”,因为它目前是(与docker1.2和无特殊卷命令),我不看我怎么可以有一个容器与另一个容器体积 - 他们的一部分安装的,其中一部分没有安装就我所看到的,它要么全有或全无,要么以"--volumes-from other_container"或没有。因此,如果迁移容器from步骤2具有原始数据装入,该容器在步骤3它已安装,也因此在复制操作从 /mifrated到/data将覆盖原始数据。还是我失去了一些东西?
有关“commit”命令谢谢您的提示,我需要思考这个多一点准备。

matlehmann
@keeb这是一个很好的模式,但据我看到的,它并没有解决这个问题,我在说什么。所有这些“管道”容器仍然会以“some_pipe_storage”的体积而不能创建一个不同的容器中,在一个给定的路径不同的数据,而不会覆盖原有的数据。但是,也许我想念你的观点?

sven
嗯,让我们看看,如果我能作出这样的解释是一个例子:
假设有人已经创造了一些Docker 映像,webappv10,webappv11,webapp_migratorv10_to_v11。
最初,你会已经运行的基于1.0系统
docker run -v /data --name datav10 busybox true
docker run -p 80:80 --volumes-from datav10 --name webv10 webappv10
然后升级,要求你的数据给我升级了,你会做第2步(正如你指出,我们不能有两个卷在相同目录)
docker run -v /migration --name datav10-to-v11 busybox true
docker run --volumes-from datav10-to-v11 --volumes-from datav10 --name migration webapp_migratorv10_to_v11
然后步骤3,对复制的数据迁移到一个新的数据容器,在/数据目录中的数据,准备使用
docker run -v /data --volumes-from datav10-to-v11 --name datav11 busybox cp -r /migration /data
然后运行1.1版Web应用程序
docker run -p 80:80 --volumes-from datav11 --name webv11 webappv11
而额外的信用,你最好脚本化这一切。
更新到datav10到V11卷容器一步增加是由于下面的讨论

matlehmann
@sven 再次感谢您详细的解答。我很欣赏你的思想和时间。
但是,您勾勒的程序不起作用。它叫装有“-v”卷推翻一个体积继承“"--volumes-from”同一路径的假设。我刚再次测试它,以确保,但这种情况并非如此。这就是为什么docker run -v /data --volumes-from migration --name datav11 busybox cp -r /migration /data将覆盖我的原始数据的容器datav10。

sam
它有你喜欢一个数据容器在一个简单卷一个特别的原因(也就是更容易通过感觉意会/处理)

sven
我很困惑。精心制作的步骤,以便有永不2卷从包含/数据迪尔斯语句。我们使用迁移一个缓冲区,然后我们将其复制到新的数据V11容器。
@sam - 有一个绑定安装的量和体积容器之间这么一点概念上的差异 - 你还在做同样的3个步骤 - 对我来说最大的区别是,绑定坐骑只能在本地,并且假设你有磁盘空间为它(不是我做的),而体积容器方法假定您Docker ,数据分区是大到足以运行Docker 的容器,和作品一样的本地远程。
如果你改变了docker run -v /data ... lines to docker run -v /local/data:/data ..., 那么你使用bind mounts绑定安装,代表。

matlehmann
@SAM我现在切换到使用bind-mounted 绑定安装的(或任何官方用语是"-v /host:/container") 卷,而不是使用数据容器,因为在这个线程中列出的缺点。我开始使用数据容器,因为成语的使用和推荐的所有在互联网上,似乎是“官方方式”。

matlehmann
@sven
?"datav10" has ?"/data" (via -v /data)

?"migration" has ?"/data" (via --volumes from datav10)
?"/migration" (via `-v /migration‘)

?"datav11" has ?"/data" (via -v /data)
?"/migration" (via --volumes from migration)
?"/data" (via --volumes-from migration)

因此,我们有“/data”容器“datav11”两卷定义 - 对我来说它看起来就像从--volumes-from 胜利之一。

sam
@sven我想我只是在努力找出你将存储在AUFS数据的原因,这似乎是一种错误的文件系统用于这个问题。 BTRFS将是确定的,但似乎aufs的日志文件,一个奇怪的选择,Postgres数据库用的等等。我误解数据容器的机制?

@matlehmann我们用“卷”广泛。
?我们店外容器的主机安装卷,便于旋转和持久性的所有日志。 (这里是另一种选择是将流出来的容器,但机制是不平凡的,想想说的NGINX的容器,你用日志呢?)
?我们存储一些配置一个安装GlusterFS卷上,所以我们能吸收的东西横跨农场

matlehmann
@sven这将是另一个线程的话题:我真的很希望听到你的GlusterFS设置。有没有准备好使用可用的映像,可以作为GlusterFS内像一个代表卷或你怎么做呢?

sam
@supermathie将是最适合我们的GlusterFS设置的详细信息,但它是在一个非常传统的方式,所有的设置,我们不使用受信任的docker容器上电Gluster的。

sven
OH(*&^,你说得对。
我想我是如此聪明删除一步。
你需要把/迁移文件夹到自己的数据容器,这样就可以避免你在最后一步注意的问题。
我已经更新一步的例子步骤,以反映这一

sven
是的,有一些东西WRT文件系统待解决 - 我docker的大多是BTRFS运行。
我认为,使用绑定,安装工程量太 - 但我仍然会做链接到它们,然后使用相同的过程,以上数据体积的容器。

matlehmann
@sven谢谢。我没有尝试这个,但它是有道理的。这是一个尴尬的疯狂鸡起舞,但它可能工作...翘首等待的卷命令。

sven
是的,我专注在笨拙的鸡 - 期待与这些版本,和烤鸡腿来馋嘴

本文翻译自Docker官方论坛:https://forums.docker.com/t/upgrade-data-within-data-container/205/20

时间: 2024-11-05 16:11:58

Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”的相关文章

html中的div、td 、p 等容器内强制换行和不换行的实现

div.td .p 等容器内强制换行和不换行,在某些情况下还是比较实用的,下面本文整理了一些相关方面的知识,并有具体的实现方法,需要的朋友可以参考下1.强制不换行,同时以省略号结尾. 代码如下:<div style="width:100px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" > 你好朋友朋友朋友我为什么不能看到效果啊 </div> 2.css自动换行 代码如下:div{ wor

海量日志数据__怎么在海量数据中找出重复次数最多的一个

问题一:         怎么在海量数据中找出重复次数最多的一个 算法思想:         方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数. 然后找出上一步求出的数据中重复次数最多的一个就是所求(如下). 问题二: 网站日志中记录了用户的IP,找出访问次数最多的IP. 算法思想:       IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中. 可以考虑分而治之的策略: map 按照IP地址的hash(IP)%1024值,将海量日志

linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol &amp;#39;[email&#160;protected]@GLIBC_2.2.5&amp;#39;

解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如以下错误: undefined reference to symbol '[email protected]@GLIBC_2.2.5'/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command li

PHPthinking官方论坛招募版主

时间飞逝,就在昨天,我们PHPthinking的官方论坛刚刚上线了我们自己的论坛! 欢迎大家注册账号,活跃在论坛的大家庭中,我们会及时关注论坛发布的所有内容,在开发学习的过程中,遇到的任何问题,有任何需求,或者对我们PHPthinking的建议等等,都可以在论坛中,及时发布帖子,我们会第一时间回复! 因为论坛是面向整个互联网,所以会有更多的大牛帮你解决开发问题,我们会认真对待每位朋友发的帖子,积极解决问题! 同时,由于论坛刚刚上线,目前也正在招募论坛模块的版主,希望有意向的朋友,可以给我发送邮件

Ubuntu 官方论坛遭遇了 SQL 注入攻击

关于Linux的学习,请参考书籍<Linux就该这么学> Ubuntu 官方论坛遭遇了 SQL 注入攻击,有人声称拥有了 Ubuntu 论坛数据库的一份拷贝.值得庆幸的是,Ubuntu 采用了单点登录技术,用户的密码作为一个随机的字符串并进行了加密存储.Canonical 保证攻击者无法侵入到 Ubuntu 的代码仓库中 图文摘要 发布了多项安全公告,对所有支持的 Ubuntu 操作系统进行了 Linux 内核漏洞修复.攻击者可以通过对 Linux 内核包中的内存管理器发起拒绝服务攻击,从而导

PHPthinking官方论坛上线

时间飞逝,就在昨天,我们PHPthinking的官方论坛刚刚上线了我们自己的论坛! 欢迎大家注册账号,活跃在论坛的大家庭中,我们会及时关注论坛发布的所有内容,在开发学习的过程中,遇到的任何问题,有任何需求,或者对我们PHPthinking的建议等等,都可以在论坛中,及时发布帖子,我们会第一时间回复! 因为论坛是面向整个互联网,所以会有更多的大牛帮你解决开发问题,我们会认真对待每位朋友发的帖子,积极解决问题! 同时,由于论坛刚刚上线,目前也正在招募论坛模块的版主,希望有意向的朋友,可以给我发送邮件

Docker 官方文档翻译

Docker 官方文档翻译 docker-compose 概述 docker compose 是利用docker来运行多个容器的工具.利用compose 在一个文件中定义多个容器,然后利用一个单独的命令,可以执行你所想做的任何事情. compose 能较好的作为开发环境的假设,服务器脚手架以及Ci方面的应用.我们不推荐使用在生产环境中. 使用compose 需要一下三个步骤: 1.在Dockerfile中定义你的应用环境,一边在任何地方重建环境 2.在docker-compose.yml中定义你

阿里云OSS获Docker官方支持 近百万开发者因此受益

  近年来,开源的容器应用引擎Docker在企业IT市场中风生水起,短短两年内,建立在Docker容器软件内的应用被下载5.35亿次.全球约有400万人在使用Docker,约有150,000个在线应用靠Docker容器运行,大型企业正在空前快速地测试或计划采用Docker,胜过其他任何开源的云端产品. 8月12日,Docker1.8和Docker Registry 2.1发布,新版本中加入了Docker Registry对阿里云开放存储服务的正式支持,阿里云成为被Docker官方支持的存储服务的

【URLOS开发入门】docker官方系统镜像——Alpine入门教程

我们在进行URLOS应用开发时,经常会用到一些基础系统镜像,如:ubuntu.CentOS.Debian等,我们可以通过docker pull命令直接拉取官方镜像. [email protected]:~# docker pull ubuntu:18.04 18.04: Pulling from library/ubuntu 898c46f3b1a1: Already exists 63366dfa0a50: Already exists 041d4cd74a92: Already exists