当前位置: 首页 > 科技观察

再见,码头工人!

时间:2023-03-22 01:39:50 科技观察

近日,网友zwischenzugs发帖称,他删除了自家服务器中使用了六年的所有Docker,并用其他开源软件替换了Docker。为什么要和Docker说再见?为什么zwischenzugs选择删除所有家庭服务器中的所有Docker(aptpurge-ydocker-ce)?因为他总是遇到一个反复出现且头疼的问题:“Dockerdaemon在多核上占用了100%的CPU资源,导致宿主机无法使用”。zwischenzugs认为,这种情况,最有可能的原因是脚本失控,启动了太多的容器,但他一直没能找出更深层次的原因,因为如果他想找出原因,他必须首先删除所有容器,然后重新启动守护进程。既然Docker已经被移除,此时似乎没有必要追根究底了。当然,删除Docker并不代表zwischenzugs抱怨Docker,而是他突然想起了之前听过的一场辩论:“为什么Docker需要守护进程?”负责的工作基本由RedHat发布的三个工具Podman、Skopeo和Buildah接管。它们都不需要守护进程或访问根权限组。PodmanPodman可以替代大多数子命令(run、push、pull等)。由于它不需要守护进程,并使用用户命名空间在容器中模拟root,因此Podman不需要访问具有root权限的套接字——这解决了Docker长期存在的问题。https://podman.io/BuildahBuildah负责构建OCI镜像。令人困惑的是,podmanbuild也可以用来构建Docker镜像,但速度太慢,而且默认设置使用vfs存储驱动程序会占用大量磁盘空间。相比之下,buildahbud(“使用Dockerfile构建”)对我来说速度更快,并且会自动覆盖存储驱动程序。用户命名空间允许无根构建的能力对我来说也非常重要。现在,至少在Ubuntu上,我们已经能够通过/etc/subuid和/etc/subgid开箱即用地利用这一点。https://buildah.io/SkopeoSkopeo工具允许我们对Docker和OCI图像执行psuh、拉取和复制操作。http://github.com/containers/skopeo今天在Ubuntu上安装这些工具比半年前容易得多。不过runc好像还是需要单独安装。其实runc也可以预先设置。安装完成后,我们来看看具体的更换步骤。首先,通过Podman替换cron中的所有Docker实例和所有CI任务。这个工作非常简单,Ansible脚本可以轻松完成,剩下的问题可以通过搜索GitHub存储库快速解决。完成以上操作后,可以使用sysdig查看是否还有指向docker的引用调用:sysdig|grep-w泊坞窗。需要注意的是,该操作消耗的资源较多,可能会大大降低系统的运行速度。确保不存在docker调用后,您可以运行以下命令:aptremove-ydocker-ce。为了保证以后可以找到一些需要用到的配置,zwischenzugs并没有完全删除所有用例。一切稳定运行后,最后一步是执行“清理”:删除所有剩余的指向/etc/apt/*中Dockeraptrepo的源;使用delgroupdocker从系统中删除docker组;删除etc/docker/*、/etc/default/docker和/var/lib/docker中的所有剩余文件。也许有人想知道DockerCompose是如何处理这个的?zwischenzugs说:“我没有实际使用过,所以没有问题。如果你用过,可以试试podman-compose这个项目,但是这个项目还不成熟。“替换前后,有什么不同?这次替换之后,有什么不同?”zwischenzugs说:“除了告别守护进程和告别sudo访问要求外,我看不出有任何其他区别。”对于用户,构建存储在本地(在~/.local/containers中)而不是全局(在/var/lib/docker中)。这也符合本次使用的工具的设计理念,即面向用户而不是面向守护进程。但由于我的家庭服务器上只有一个Docker用户,所以这没什么区别。“另一个很大的区别是,与Docker相比,podmanpull并行下载所有层。如果一次拉取太多图像可能会导致问题,但zwischenzugs表示,对于他自己的用例,到目前为止一切正常。网友怎么办?你觉得呢?这篇博文发布后,在HackerNews上引发了网友的广泛讨论,有网友表示:“放弃Docker似乎正在成为一种新趋势。最近看到好几篇这样的文章。我仔细检查了每篇文章,我得出的结论是,如果你有更多的时间,愿意接受更多的限制,那么Docker有很多选择。》因为zwischenzugs在之前的文章中提到,出现异常情况的可能原因是脚本失控,导致容器启动过多,所以有网友建议可以修复错误的脚本,并没有需要切换容器平台来解决,不过也有网友提出了Docker本身的问题,问题是Docker能带来什么样的实质性好处:用户真的可以从容器中得到很好的抽象,提供了更好的解决方案部署挑战?例如,在不考虑应用程序中的http客户端被配置为与哪个主机通信的情况下,它可以通过操纵网络配置在容器级别神奇地重定向。如果应用程序构建为使用服务发现结构,同时使用Docker有额外的好处吗?人们经常在本地运行生产Docker映像来调试生产应用程序问题?有没有将调试器附加到远程QA测试人员chrome实例,然后自动将调试器附加到处理与该浏览器相关的请求的生产容器集的解决方案?您如何看待网友删除Docker?Docker的删减成为新趋势?Docker能带来什么样的实质性收益?欢迎在下方留言。