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 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
目录
打赏
0
0
0
0
20
分享
相关文章
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
240 93
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
44 23
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
170 15
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
174 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
使用 Docker 快速搭建最新版 Flarum 论坛
本文分享了使用Docker在4核4GB的Ubuntu 20.04云服务器上搭建Flarum轻论坛的经验。通过Nginx-Proxy和ACME伴侣自动配置SSL,并使用Docker Compose部署Flarum及MariaDB容器。关键步骤包括:创建Nginx-Proxy容器、配置Flarum容器及其环境变量、设置桥网络连接以及更新Flarum版本。文中提供了详细的Docker Compose配置示例和必要的环境变量设置,帮助读者顺利搭建并运行Flarum论坛。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
98 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
67 17
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
122 12
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
239 11
docker将数据从宿主机挂载到容器的方式(二)
docker将数据从宿主机挂载到容器的方式(二)
519 0
docker将数据从宿主机挂载到容器的方式(二)

热门文章

最新文章