Docker火热的容器

什么是  Docker?

Docker  是  PaaS  提供商  dotCloud  开源的一个基于  LXC  的高级容器引擎。 PaaS(Platform as a Service)  是位于 IaaS 和 SaaS 模型之间的一种云服务。

Docker  最初是  dotCloud  公司发起的一个公司内部项目 ,它是基于  dotCloud  公司多年云服务技术的一次革新。

行业竞争太过激烈公司都要混不下去了,这时 dotCloud 的领导层做了一个大胆的决定,将项目开源。  2013  年  3 月 Docker 以  Apache 2.0  授权协议开源,主要项目代码在  GitHub  上进行维护。

Docker  自开源后受到广泛的关注和讨论,至今其  GitHub  项目已经超过  4  万  6  千个星标和一万多个  fork 。

甚至由于  Docker  项目的火爆,在  2013  年底, dotCloud  公司决定改名为  Docker 。

容器生态系统

一个软件项目成功与否的一个重要特征,是能否带动一个生态系统的发展,以 Docke 为代表的容器技术显然做到了这一点。

当然,容器技术的迅猛发展与其强大的生态系统息息相关。下面通过 2 张图来整体审视一下它。

从图中可以看出, 容器技术的生态系统自下而上分别覆盖了 IaaS 层和 PaaS 层涉及的各类问题 ,包括资源调度、编排、部署、监控、配置管理,存储网络管理,安全,容器化应用支撑平台等。

容器与云计算

20 世纪集装箱彻底颠覆了全球运输业和世界经济。而今天,云计算领域的容器就像集装箱一样,正在改变世界。

Docker  目前已经得到了众多公有云平台的支持,并成为除虚拟机之外的核心云业务。

除了   亚马逊云 AWS 、 Google 、 Azure 、 Docker  官方云服务等,国内的各大公有云厂商,腾讯云、阿里云等基本上都同时支持了虚拟机服务和容器服务,甚至还专门推出了容器云业务。

为什么说  docker  是快速部署?

我们做一个项目,最不想面对的不是开发,也不是调试,而是部署!!!

比如我们使用 Python 开发了一个项目,我们的环境是  Python3  ,然而客户 1 使用的是  Python2  ,客户 2 根本没有  Python  环境。这个时候我们就需要先去新机器上部署  Python 。

Python 部署完成后,项目里面还要用到  MySQL ,安装完 Python  的 MySQL 模块。项目里面还有  redis , 两种非对称加密,还有三方队列,还有阿里云的接口 ……

我们把服务装进了  docker  中会怎样呢?

首先安装 docker ,再把做好的镜像使用命令  pull  了下来,再使用命令  docker start XXXXXX ,部署就完成了。只要你的环境安装了 docker ,部署轻松又简单。

你说多服务?那就写个 docker-compose.file ,同学集群部署了解一下,有 Kubernetes 、 Mesos , Fleet 和 Swarm  任君挑选。( Swarm , Docker  三剑客项目之一,后面会有介绍)

Docker 基本概念

镜像(  Image  )

容器(  Container  )

仓库(  Repository  )

理解了这三个概念,就理解了  Docker  的整个生命周期。

Docker  镜像是一个特殊的文件系统 ,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器的实质是进程 ,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的  root  文件系统、自己的网络配置、自己的进程空间,甚至自己的用户  ID  空间。容器内的进程是运行在一个隔离的环境里,类似于沙盒,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

仓库(  Repository  )是集中存放镜像的地方 。与之很容易混淆的概念是注册服务器(  Registry  )。注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.com/ubuntu  来说, dl.dockerpool.com  是注册服务器地址,  ubuntu  是仓库名。

Docker  三剑客

Docker Compose  项目

Docker Machine  项目

Docker Swarm  项目


Docker Compose  是  Docker  官方编排( Orchestration )项目之一,负责快速的部署分布式应用。

在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个  Web  项目,除了  Web  服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose  恰好满足了这样的需求。它允许用户通过一个单独的 dockercompose.yml  模板文件( YAML  格式)来定义一组相关联的应用容器为一个项目( project )。


Compose  中有两个重要的概念:

■  服务  ( service ) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

■  项目  ( project ) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml  文件中定义。

Compose  的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose  项目由  Python  编写,实现上调用了  Docker  服务提供的  API  来对容器进行管理。因此,只要所操作的平台支持  Docker API ,就可以在其上利用 Compose  来进行编排管理。

Docker Machine  是  Docker  官方编排( Orchestration )项目之一,负责在多种平台上快速安装  Docker  环境。

Docker Machine  项目基于  Go  语言实现,目前在  Github  上进行维护。

Docker Machine  是一个工具,它允许你在虚拟宿主机上安装  Docker Engine  ,并使用  docker-machine  命令管理这些宿主机。你可以使用  Machine  在你本地的  Mac  或  Windows box 、公司网络、数据中心、或像  AWS  或  Digital Ocean  这样的云提供商上创建  Docker  宿主机。

Docker Swarm  是  Docker  官方三剑客项目之一,提供  Docker  容器集群服务,是 Docker  官方对容器云生态进行支持的核心方案。

使用它,用户可以将多个  Docker  主机封装为单个大型的虚拟  Docker  主机,快速打造一套容器云平台。