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 主机,快速打造一套容器云平台。