作者:bnm zasdfg
链接:https://www.zhihu.com/question/22969309/answer/286142439
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我来说一个比较不一样的应用场景吧,这个是我最近在搞着玩的东西:把docker的镜像在裸机上跑,当作自己的日常桌面系统使用!
大家在按照正常的习惯使用日常桌面系统的时候,或多或少都会遇到下面的这些问题吧:
- 某天莫名其妙地出于某种原因,系统突然坏了,可能是某个程序的文件不小心损坏了吧,磁盘并没坏,重装一下就好了,问题再也不见了,然而重装+配置浪费了一上午的时间。
- 系统用的久了,慢慢变慢了,也产生了一些不会被自动清除的垃圾文件,这些文件堆放的零零散散的,清理起来也不好清理。
- 某次系统更新,包管理器提示说文件冲突,或者依赖关系无法满足,导致更新安装不上,折腾了好久都没法更新。
- 磁盘突然挂了,然而自己好久都没有备份系统了,衰。
- 自己决定干一件什么事情了,于是安装了一大堆的库,跟工具,还费了半天劲去配置。然而自己有多台设备,所有的这些安装配置的流程要在自己家里的pc上,笔记本上,办公室的pc上这些地方都走一遍,很麻烦。
- 换了台新电脑,又要重新安装操作系统,然而已经不记得随着时间的推移,自己是怎么一步步把现在电脑上运行的系统配制成自己用这最舒服的状态了。而且就算记得,重新配置一遍也麻烦。
- 偶尔借用一下别人的电脑,或者用一下网吧的公用电脑。然后发现别人的电脑真难用啊,各种东西都没有配制成自己习惯的样子。
所有的这一切问题,都可以用docker来帮我们解决:我们写一个Dockerfile制作一个镜像,这个镜像包含我们桌面系统用到的一切。然后把这个镜像上传到DockerHub提供的免费空间上去。然后,在本地通过对initramfs做一些手脚,在启动的时候,直接把镜像的本地docker缓存中的内容当作根目录挂载并启动,这样就可以把docker镜像直接在裸机上跑,当日常系统用了。这么做,上述的那些问题都能得到解决:
- 参考docker容器的工作原理。Docker镜像是只读的,每运行一次镜像,docker都会创建一个读写层,所有的写入都是在最上方的读写层中进行的。我们这里采用了相同的手段,每次开机都新建一个读写层,这就好比装了网吧的还原精灵,不管这次开机的过程中是不是某个程序出bug把啥东西搞坏了,这都无所谓,下次开机又是一条好汉。
- 同上
- 每次更新系统实际上都是用Dockerfile从最新的软件仓库重新构建一遍,自然不会有跟之前某些包的依赖图或者文件出现冲突的情况。
- 本地只是云端的缓存而已,根本没必要定期备份。
- 多台设备之间同步系统的更改非常简单,只需要一个`docker pull`然后重启就行了。
- 新电脑是不需要从头安装操作系统的,用光盘启动,分好区,挂载到/var/lib/docker上面去,docker pull一下,然后安装个启动管理器就行了。
- 偶尔用一下别的电脑,只需要在那台电脑上安装docker,然后就可以直接在docker里面启动一个kde桌面,然后一切都回到了自己最熟悉的样子。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3142822/
,如需转载,请注明出处,否则将追究法律责任。