博主我也是想追赶时髦的人:2019年追了Python/Flask,两个月前追了conda,上周开始追了docker。docker的基础教程网上自然也有,本文不介绍。
本文还是讲这个问题:docker到底有什么用?
Conda解决了这个问题:在老服务器(例如CentOS 6)上安装Python 3.8、R 4.0、Perl 5.26等不同版本的软件,而且是在没有root权限的情况下。但是Conda不能帮你去设定软件,比如某个软件需要读取并设定指定的配置档案、需要设定端口号、配置HTTP服务器等,都得手工操作(正是,说的就是那些web端的软件:web app、web 数据库网站,等等)。
如果一个软件仅仅是在终端执行命令、新增几个自变量、输出结果,那docker确实没啥用。但如果说的是上述那种需要繁琐配置的,docker就派上用场了。
我的github里面有个Python Package就完美地反映了这种情形:
它依赖其他一些Python包,这可以使用pip解决。
它还依赖一些第三方的软件,这时pip无能为力,需要用conda。
如果需要启动它的web界面,则在下载之后需要配置网络路径和web设定,这时conda也无能为力。此时docker上场。
目前搭了2个docker:作物育种数据库Breedbase和RSS服务器Huginn。前者是面试被问到了,后者则是不想每次都去刷那些丑陋的网页而自己搭设了RSS。
有意思的是,网上经常把docker描述成“开箱即用”,而我刚执行时都失败了。实际上大部分docker web app在run时都要经历一系列初始化过程,时间也许很长。Huginn还好,大约过个5分钟左右就可以用了。Breedbase真是惨了,失败了十几次之后我发现原来是在初始化过程中有个过程是git clone一些库然后安装,而那段时间github被X了。
难道还想给位于Linux Server中的docker配置XX上网?我确实也想过,但折腾不成功啊!
最后的workaround:自己先透过github映象把要用的库下载好,然后修改npm的package.json,改成local安装。然后手动重新build。
就这样,所谓的docker“开箱即用”,因为这个原因足足折腾了一整个周末。
如果用docker一直报错,可能是姿势不对,开箱即用在这并不能实现。那么请进dock里面看看是不是某些初始化步骤出错了,docker对资源消耗量还是比较大的(虽然属于轻量级虚拟机器),我的做法是:在公司的服务器(硬件好)上搭docker,然后frp到家里的路由器(有公网IP)来进行外网访问。
对了,docker现在基本上都是搭web应用的吧?检查一下没有用docker做命令行程序的吧
发表回复