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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”matlehmann我有一个含数据的容器,它有一个卷(比如在/var/data)中的持久性数据。

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

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
目录
相关文章
|
2天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
116 77
|
4天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
27 3
|
10天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
38 6
|
10天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
20 5
|
10天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
31 3
|
10天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
20 2
|
15天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
46 5
|
17天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
19天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
16天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
29 1