草庐IT

嵌入式系统上的 Docker,为什么不呢?

coder 2023-05-06 原文

我最近遇到了一个项目,该项目涉及编排多个(支持 Linux 的)嵌入式设备,向它们部署软件,并允许在 git repo 中的代码库更新时更新应用程序。

最初的想法是为每个设备制作一个标准镜像,我开始尝试在 UDOO Quad 和 Intel Edison 上安装 docker,但到目前为止没有任何成功。

我的想法是,在嵌入式设备上安装 Docker 似乎是个好主意——但如果是这样的话,现在肯定已经移植了。似乎正在做出这些努力的唯一团体是 Resin.io。

是我遗漏了什么,还是有明确的原因说明 Docker 在嵌入式设备上没有意义?如果没有原因,并且 确实 在嵌入式系统上运行 Docker 是有意义的,那么我是否忽略了一些东西:是否有任何关于移植的讨论来源或操作方法覆盖这个?

最佳答案

我曾考虑在嵌入式设备(mips 系统)上运行 docker,但没有这样做。在我看来,它存在一些问题:

  1. Docker 是用 Golang 实现的。目前没有可用于 mips 编译 go 的工具链。您需要使用 gcc-go 自己创建工具链。

  2. docker的大小大于lxc。在台式计算机中这不是问题,但嵌入式设备的闪存存储空间有限。

  3. Docker 使用了一些最新的 linux 内核特性。有时嵌入式设备上的内核版本不是那么新,需要向后移植才能使其工作。

  4. docker 镜像必须建立在与运行时环境相同的架构上。这意味着如果您想在 Raspberry Pi 上运行 docker 容器,则 d​​ocker 镜像必须构建在 ARM 架构系统上。 QEMU 可用于在云端构建 docker 镜像,但它并不支持嵌入式系统中使用的所有 CPU 架构。 (例如,目前不支持 MIPS)

最后,lxc 被选择用于在嵌入式设备上运行容器的特定任务。与 docker 相比,它的功能有限,但目前它适合项目的需求。

截至 2019 年,我想更新这个答案,因为我使用 ARM cpu 将 docker 移植到嵌入式系统。随着闪存使用量和内存使用量的降低,通过使用 docker,您将拥有容器管理、图像管理以及许多准备好从 docker hub 运行图像。所以决定是成本和功能之间的平衡。

关于嵌入式系统上的 Docker,为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010832/

有关嵌入式系统上的 Docker,为什么不呢?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  3. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  4. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  5. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  6. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  7. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  8. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  9. ruby - 为什么人们使用 `Module.send(:prepend, …)` ? - 2

    我正在学习如何在我的Ruby代码中使用Module.prepend而不是alias_method_chain,我注意到有些人使用send调用它(example):ActionView::TemplateRenderer.send(:prepend,ActionViewTemplateRendererWithCurrentTemplate)而其他人直接调用它(example):ActionView::TemplateRenderer.prepend(ActionViewTemplateRendererWithCurrentTemplate)而且,虽然我还没有看到任何人使用这种风格,但我从

  10. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

随机推荐