docker x11docker Windows与云端软件平台

作者: admin 日期: 2018-05-02 00:41:41 人气: - 评论: 0

    在Linux平台下一个软件安装之后相关的文件会被分散安装到系统的各个目录,还有复杂的软件包依赖问题,有的是源码编译安装,有的是用软件包管理工具安装,造成的后果就是系统用久了之后系统目录越来越大,越来越容易出现诡异的问题。


    其实Unix的目录组织方式放在现在来看是很落后的,因为一开始的时候Unix系统一般是几个人共用一台机器,机器上一般有个真实的root用户负责管理软件包,其他用户只能操作自己的家目录,但是随着it技术的发展现在软件包的数量大大的增加了,而且一般都是一个人单独用一台计算机让每个用户都去精心维护自己的软件包依赖关系实在是过于痛苦。


    举个简单的例子,有一次我想安装一个php解释器以便在命令行下调用,执行apt install php 之后安装php成功了,但是顺便也给我安装了个Apache并默认是开机启动占着我的80端口,我上网找了一些命令试图卸载这个Apache,但是对于包管理工具底层的工作原理我又不是很了解不敢贸然操作,最后我只能用apt autoremove php 来卸载了php。


    我使用Linux桌面办公也有好几年了,目前还没有找到优雅的管理软件包的方式。


    windows下的情况也好不到哪里去,windows下的程序默认只依赖几个核心的系统dll,其他的依赖都是程序开发者自己想办法解决,要么是把依赖全部拷贝到程序里面,要么是安装前先检查环境,先把依赖的软件包装上,更粗暴的是把依赖的库文件直接向系统目录里面丢这样子也是系统用的时间长了之后系统盘变得越来越大,系统越来越卡,出现各种问题。所以我用windows的时候经常被各种系统小问题困扰经常重装和备份、恢复系统。


     最近几年出现的docker是个很不错的思路把软件包和依赖以及整个操作系统都打包到一起发布和部署一下子解决了依赖问题和对系统的污染问题,并且使用了layer的概念避免占用太多磁盘空间,最近我尝试着把我常用的一些软件docker化,在这个过程中我发现了x11docker这个项目,这个项目会自动把docker容器内的x11客户端对接到主机的x11服务端,并且解决了一些类似粘贴板之类的细节问题,不过该项目还不成熟,我目前主要使用vnc方式来docker化gui程序。


    我们知道docker本质上是利用Linux内核的一些机制来实现文件系统、系统调用的重定向来实现虚拟化的,因为Linux下面的程序很大程度上是依赖于文件系统,如果把一个软件包和他所在的系统全部拷贝到另外一个系统的一个tmp目录,再chroot到tmp目录然后再运行这个软件包,这个软件包会把tmp目录当做根目录再寻找依赖加载,理论上这个软件包是可以顺利运行的,docker应该是在这个基础上做了一些附加工作。


     如果把Linux上的程序都docker化了我们很自然想到windows上的程序能不能打包。


      首先docker windows版本 就是在windows上开个虚拟机,加载个Linux系统然后再装个Linux版本的docker,再做一些文件映射的工作,基本上可以看做是Linux 下 docker一个粗暴的移植了。


      其实很多年之前,大概是10年前吧,有一个叫 “云端软件平台的软件”和现在的docker非常像,windows平台是没有chroot命令的,而且windows程序也不像Linux程序都是基于文件操作的。“云端软件平台” 使用了驱动级别的钩子,挂接了大概200-300个系统调用来实现了虚拟化,其中最主要的是文件操作、注册表操作重定向和其他一些细节的东西。


     你使用“云端软件平台的软件”安装一个软件其实这个软件自身的程序文件,包括他产生的文件都不会写入到你系统的目录,都会被重定向到一个专门的目录,这样就保证了你系统的纯净性,这样你就可以把整个软件拷贝走放到另外一台电脑上运行,前提是另外一台电脑也安装了“云端软件平台的软件”,整体思路和docker还是很像的。只不过docker解决的是开发运维的问题,“云端软件平台的软件”解决的是个人软件包管理的问题,docker打包了整个操作系统,“云端软件平台” 应该只是打包了部分的程序文件。顺便说下“云端软件平台的软件”在2014年已经停止维护了,并且下架了,可能是在windows下要实现虚拟化比linux下麻烦很多

    

    现在也有一些国外公司基于sandbox二次开发高仿docker的windows版本的docker,也是基于命令行的镜像容器管理,利用sandbox来实现虚拟化,体验了一下做的还不错,不过是一个商业的收费软件,试了一下打包效果还是不错的,不过虚拟出来的窗口之间是互相可见的


相关内容

发表评论
更多 网友评论0 条评论)
暂无评论

Copyright © 2012-2014 我的代码板 Inc. 保留所有权利。

页面耗时0.0201秒, 内存占用1.83 MB, 访问数据库13次

闽ICP备15009223号-1