虚拟机与 Docker

很多时候,我们发布的软件要运行的平台与我们编写代码的平台不同。或者,有些代码要求只能在某个特定平台运行。这时候我们就需要一个“虚拟机(Virtual Machine)”(注意,这里不同于编程语言的虚拟机,主要是指操作系统虚拟机)。例如,有一个 C++代码库要求只能在 Linux 平台下编译,因此我们可以安装一个虚拟机软件,并添加一个 Linux 虚拟机,在其中编译 C++代码。

目前来说,如果你使用 Windows 10 及以上版本,可以不用安装特定的虚拟机软件。而是安装 WSL2(Windows Subsystem for Linux 2),这是一个嵌入 Windows 之中的 Linux 虚拟机,可以满足大多数在 Linux 平台下的编码需求。

除此之外,还有一种被称作“容器(Container)”的,比起虚拟机更为轻量的方式。Docker 就是其中的代表。使用 Docker,你可以直接新建一个“容器”,容器之间通常是相互隔离的,例如 A 容器中可以安装 Python2.7,而 B 容器中可以安装 Python3,分别可以包含不同的软件及运行环境。

容器是一种简化配置与部署的方式:当我们编写一个商业化的项目后,常常需要将打包好的可执行文件“部署”到特定的服务器上,而这个过程往往需要安装很多依赖、更新服务器上的特定库,并进行一系列的配置。而 Docker 提供了一种简单的方案:你可以新建一个 Dockerfile,在其中描述这个容器基于哪个已有的容器,比如一个安装了基本 Python 环境的基础容器,然后将这个容器中还需要安装哪些依赖、需要进行那些配置全部写进去。然后在服务器上,你只需要安装 Docker,然后指示 Docker 按照这个 Dockerfile 新建与配置一个容器,再把可执行文件放进去就可以了。

Docker 大大简化了应用的部署。事实上,在过去,如果遇到了很复杂的服务器配置,甚至会考虑使用虚拟机。然而 Docker 作为一种轻量化解决方案出现之后,这一问题得到了有效解决,这使得如今被大规模采用的服务器集群能够被很轻松地自动化管理,并且也促成了微服务的大规模流行。

其实我们在自己的个人电脑中,使用 Docker 也是很适合的。你可以使用 Docker 管理电脑上不同的代码该如何运行。并且,为你开源的某个软件提供一个 Dockerfile 也可以大大简化他人安装你软件的过程。

Last updated