Missing Necessary Knowledge for CS Students
  • 前言
  • 基础知识
    • Git
      • 安装
      • 基本命令
      • Git Commit Template
      • GitHub
    • Vim
      • 安装
      • 教程
    • 学会获取信息
      • 学会使用英文搜索信息
      • 阅读官方文档
    • 调试
      • 断点调试
      • 网页调试
    • 测试
    • 代码规范
      • 不同编程语言的代码规范
      • 注释与文档
    • 工具链
      • 代码格式化工具(Formatter)
      • 代码检查工具(Linter)
      • 包管理器与依赖管理工具
      • 打包工具
    • 抽象
      • 封装
      • 重构
      • 究竟什么是抽象
    • 编程语言
      • 编译器与解释器
      • 强类型与弱类型
      • 静态类型与动态类型
      • 面向对象与函数式编程
    • 其他
      • Markdown
      • Jupyter Notebook
      • 虚拟机与 Docker
      • CI/CD
  • 附:一些常见工具的使用
    • Scoop
Powered by GitBook
On this page
  1. 基础知识
  2. 其他

虚拟机与 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 也可以大大简化他人安装你软件的过程。

PreviousJupyter NotebookNextCI/CD

Last updated 2 years ago