从前端角度学Docker

一、什么是Docker?

1.1 Docker这件事的前世今生 / Docker解决了什么问题 ?

要搞清楚Docker是什么东西,最简单的切入点,就是了解他解决了什么问题,如果一个东西没有解决任何问题,那么我们肯定没有理解和学习它的必要。那么Docker现在这么火,倒推过来,就表示Docker解决了很多人的痛点!

那么Docker解决了什么痛点呢?

就是软件开发当中的环境配置问题,学习软件开发的第一节课,可能都是如何配置XXX语言的运行环境,XXX框架的开发环境。这还是开发阶段的,以前在开发阶段没问题,去到部署的时候可能有问题,这种就是开发机和线上机的环境不一致造成的。为了维持软件运行环境所安装的软件依赖的一致性,给开发人员造成了很大的工作量。后来开发人员就希望要是能够保持环境的依赖一直一样就好了。于是出现了第一代方案:

1.1.1 虚拟机

虚拟机,就是在一台机器上再将资源分配划分为另一台机器。虚拟机以文件的形式存在于底层(物理)机器的操作系统上。虽然虚拟机可以通过以文件的形式承载一整个操作系统,也就解决了环境依赖的问题,但是虚拟机也有很大的缺点,就是:

  1. 占资源多
  2. 冗余步骤多,因为每次部署虚拟机都需要搞一次操作系统
  3. 启动慢

为了某个软件使用虚拟机方案,其实里面的系统就是这个方案的”副作用“。那么,能不能没有系统这一层副作用呢?答案是有的,就是Linux容器技术。

1.1.2 Linux容器

Linux容器(Linux Containers, AKA LXC)。
Linux容器不模拟一个完整的操作系统,只是对进程进行隔离。在容器里的进程,接触的系统资源都是被虚拟处理过的,类似做了一层物理资源的保护层,进行隔离。这样的操作是进程级别,相比虚拟机具备了其不具备的优点:

  1. 资源占用少
  2. 启动快
  3. 体积小

容器相当于进程级别的虚拟机,同样对系统资源进行虚拟化,但是没了操作系统这个拖油瓶,速度快了很多。

1.2 Docker是什么?

Docker是基于Linux容器的一种封装,提供简单易用的容器使用接口。是目前最流行的Linux容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

二、为什么要学习Docker?