一 什么是Docker

1. 什么是Docker?

Docker是基于Go语言实现的开源容器项目。Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”, 即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件“一次封装,到处运行”的目的。这里的应用组件,既可以是一个Web应用、一个编译环境,也可以是一套数据平台服务,甚至是一个操作系统或集群。

二 为什么要使用Docker?

1. Docker容器虚拟化的好处

举例子,搭建一个LAMP环境:

传统的做法是

  1. 安装Apache,MySQL,PHP以及它们各自运行所依赖的环境;
  2. 对环境进行配置,包括创建用户,配置参数等;
  3. 进行功能测试,看看是否工作正常;如果不正常进行调试追踪
  4. ……

应用越多,越难处理;一旦服务器进行迁移,就要重新部署;这些琐碎的工作极大地降低了工作效率。究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致

使用Docker
通过容器打包应用,解耦应用和运行平台。迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台

2. Docker在开发和运维中的优势

在开发和运维中,具有如下几个方面的优势:

  • 更快速的交付和部署
  • 更高效的资源利用;Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
  • 更轻松的迁移和拓展;Docker容器几乎可以在任意的平台上运行
  • 更简单的更新管理;使用Dockerfile。只需要小小的配置修改,就可以替代以往大量的更新工作。

3. Docker与虚拟机

与虚拟机比较,Docker的优势:

  • Docker容器很快,启动和停止可以在秒级实现
  • Docker容器对系统资源需求很少
  • Docker通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
  • Docker中的应用获得的是接近原生的运行性能

三 核心概念

Docker的大部分操作都围绕着它的三大核心概念——镜像、容器和仓库而展开

1. Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以只包含一个基本的操作系统环境,里面仅安装了Apache,可以把它称为一个Apache镜像。

2. Docker容器

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。

可以把容器看做事一个简易版的linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

注:镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

3. Docker仓库

Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。

Docker仓库不是仓库注册服务器(Registry),仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来区分。

Docker仓库分为空开仓库(Public)和私有仓库(Private)。目前最大的公开仓库是官方提供的Docker Hub,其中存放了数量庞大的镜像供用户下载。

用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次再另一台机器上使用该镜像时,只需要从将其从仓库上pull下来就可以了。

四 小结

无论是系统管理员、应用开发人员、测试人员以及运维管理人员,都应该尽快掌握Docker,尽早享受其带来的巨大便利。

五 相关链接