对比一下,同样要安装运行一个软件,用Docker和不用Docker的差异:
下载安装:
Docker:pull一个image下来就可以了。
包管理:用发行版自带命令,直接apt-get或者yum install。但很多时候,需要同时下载安装依赖的库,不过发行版的包管理系统通常会帮你搞定——前提是不要跟你现在的包发生冲突,否则有你搞的。
源码编译:发行版仓库里面的有可能版本有点老,你需要用最新版的功能。怎么办?去官网/Github下载源码,编译安装——等等,不要说的那么轻巧,你有对应的编译环境么?没有的话要先安装配置好编译环境。你知道用什么命令什么参数编译么?你装好编译依赖的底层库了么?底层库的版本符合要求么?不符合要求的话能更换成符合要求的版本么?换成符合要求的版本后你现在跑的应用会不会出问题?
小结:Docker的下载安装最简单,包管理只要不碰到问题也很简单,源码编译最麻烦。
配置:
Docker:参考文档,写好配置文件
包管理:参考文档,写好配置文件
源码编译:参考文档,写好配置文件
小结:众生平等
运行:
Docker:一条命令,docker run,不过参数要写好,通常注意几个地方就行:重启设定、挂载配置文件目录和数据目录、映射端口、入口命令/参数。当然,有的应用的镜像做得比较复杂的,还需要另外提供游戏账号买号环境变量。这些一般做的比较规范的镜像文档都有文档和例子,抄过来改一下就是了。
包管理:直接运行就好,顶多启用一下服务。
源码编译:直接运行就好,顶多启用一下服务。
小结:Docker比较麻烦点。
修改配置:
Docker:参考文档,改配置。重启容器或者停止容器后删除,重新运行容器。
包管理:参考文档,改配置。杀进程,重新运行或者重启服务。
源码编译:参考文档,改配置。杀进程,重新运行或者重启服务。
小结:众生平等
升级版本:
Docker:pull image更新镜像,停止容器后删除,重新运行容器。
包管理:用发行版自带命令,直接apt-get update或者yum update。重新运行或者重启服务。可能碰到和下载安装相同的问题。
源码编译:下载新版,编译安装。重新运行或者重启服务。可能碰到和下载安装相同的问题。
小结:众生平等
最后总结
似乎Docker的下载安装比较简单,但运行比较麻烦一点?如果你只需要安装运行一个应用的话的确是,但如果你需要安装和跑多个应用的话——例如全套web server+php+数据库,docker你搞通一个应用,再多N个应用其实全都是一样的,改几个参数就是了。但前提是搞明白了docker运行命令里面的参数的用途,如果只是照着网上教程贴命令,不知道为什么这个参数用这个值,那的确是很麻烦。
而下载安装/升级版本这两个步骤,包管理碰不到问题是很方便,只是万一碰到问题的话,每一个应用需要的解决方案通常是不一样的,每一个碰到问题的应用,或者一个应用不同版本碰到不同的问题,你都要去找资料找文档甚至去社区求助来解决。甚至如果发行版仓库里面的包版本太旧没有你需要的功能,你将不得不面对更复杂的源码编译安装。Docker的优点就是,你不会碰到这样的情况。