Docker 这么好用的东西,不允许有人不知道

本文最后更新于:2022年3月9日 晚上

Docker 近几年大行其道,好像不知道 Docker 就不算是个“折腾人”,我初次接触 Docker 是在树莓派的 OMV 上,一上手就给我惊到了,因为他的出现好像改变了 CLI(命令行)和 GUI(图形界面)系统安装软件的方式。

原理

严格来说,Docker 不是虚拟机,也不是一种虚拟化技术,它实现的功能,是在物理机系统上构建出一个或多个“容器”,这个“容器”的主要部分和物理机系统隔离,但可选哪些部分和物理机或其他环境联通、怎样联通。部署好环境之后,以近乎无损失性能的方式,运行“容器”当中的程序,它最大的优势在于,不论你的物理机系统是 Ubuntu Debian 还是 CentOS,也无论系统安装的某些程序具体版本,只要你能跑 Docker,就可以获得一摸一样的“容器”,一行命令输进去,绝不会有不同的结果跑出来,开发者的情人非 Docker 莫属。

用途

对于普通人来说,Docker 的意义在于可以很方便地安装程序,比方说我想在 DSM (群晖 NAS 系统)上安装个 qBittorrent 来挂 BT 下载,虽然说 qB 有官方的 Linux 版本,但 DSM 不是标准的 Linux,他是经过了群晖官方魔改的,上面各种依赖各种软件的版本你肯定不想去了解,另外对于 NAS 来说,最重要的就是稳定,乱动生产系统造成存储空间降级还好,万一数据损毁,血本无归。所以我们需要一个隔离环境来安装这个程序,虚拟机?可以,但不是最合适的,DSM 的虚拟机内核似乎并不是 KVM,性能损耗太大,而且 DSM 有基于物理 CPU 核心数目的 vCPU 限制,大概是 1C = 2vC,所以,我们来看看 Docker 吧。

在应用商店里安装好 Docker,打开软件界面,在“注册表”一栏搜索“qBittorrent”,选择 Linux.io 开发者的版本双击下载(不选择 qB 官方的是因为官方版本在安装和使用上有点点问题,Linux.io 也是可信任的开发者,放心吧),版本默认“latest”就好。

接下来按照 Docker Hub 上的说明,做好端口映射、路径映射,设置环境变量(env),启动容器,qB 就安装好了。是不是非常简单,整个过程不涉及 Linux 命令,也不用搞什么反代,他就类似于在手机上安装一个 App,只不过这个 App 需要手动设置一些小地方,这些地方也基本都会有说明,实在没有网上查也都能查到。

如果不是 Docker 呢?

基本代码如下:

1
2
3
apt update
apt-get update
apt install -y qbittorrent-nox

也很简单?这只是表面上看起来简单,在这之前,你或许需要打开群晖的 root 账户,且这是在 Ubuntu 下的安装命令,DSM 并不一定有 apt,再者,安装过程中或许会缺失某些依赖包,这些包还需要手动安装;如果之后软件出了什么问题,想卸载掉,最麻烦的地方来了,你卸载一个 qB 容易,你怎么卸载安装 qB 的时候自动装的各种依赖包?用 Linux CLI 装过软件的应该明白我在说什么,一个程序他的依赖可能有数十个到几百个,不可能一一手动卸载的,而且你也不知道是不是有些依赖系统本身就有,在安装的过程中被跳过了,你按照所需依赖列表一个一个卸载,到最后系统本身有的也被你搞没了,这就发生了大家最不愿看到的结果——系统崩了。

总结

所以说 Docker 的优势是显而易见的,尤其是对于各种“折腾人”或“尝鲜派”来说,以极少的构建和试错成本来获得几乎完整的体验(很少很少有 Docker 版本功能缺失的情况),这是一笔不用算的账。Docker 的出现,真正的改变了 Linux 的程序安装方式,也给诸如 NAS 之类的设备加了一个 BUFF,像我这样的小白也能简单上手很多东西。(你敢相信我网站都搭起来了却对数据库一窍不通吗?)

Docker 目前是开源状态,并且社区资源丰富,希望有兴趣的各位都去折腾折腾,这个东西潜力无限。


本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 协议 ,转载请注明出处,禁止商用。