摘要
在微服务兴起之前,无论对于大公司还是小公司的服务部署还是快速迁移都是一个浩大的工程,尤其是业务特别复杂的系统。以往的服务部署直接是在物理机上或者云主机上。服务跑起来一般是没什么问题的,但在真实主机上部署一个集群,保证集群的高可用都会是一个相对浩大和麻烦的工程。容器的出现可以说是改写了这个局面,将服务装在容器中,使得服务可以快速组建,迁移,拆除。本文就针对docker服务中的三大利器DockerCompose、Docker Machine、Docker Swarm进行介绍,docker三剑客是对docker容器进行管理的三个非常实用的工具 ,除了docker swarm(Docker 1.12.0+ Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm)其他工具使用都需要额外安装。
01
docker介绍
2017可以说是容器时代的一个爆发期,大部分公司纷纷组建自己的容器云,其中docker作为容器的最强王者被大部分公司引入,用其进行服务的部署。一般说到容器技术都会第一时间想到docker。 当我在10分钟内,部署了一万个静态网站时我就打算好好介绍这款容器了,什么是docker? 关于介绍docker的文章随便在网上一找就是一大把,而且肯定有很多专业的文章对其进行介绍,所以我在这就不做很详细的介绍,只是做个简单的说明,使其对后面的介绍更容易的理解。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。docker相对其他虚拟技术有众多的优势,例如:
1、更高效的利用系统资源
2、更快速的启动时间
3、一致的运行环境
4、持续交付和部署
5、更轻松的迁移
6、更轻松的维护和扩展
跟多关于docker的介绍可以去官网了解,这里重点介绍docker的三大利器,所以不在此耗费太多篇幅。更多关于docker介绍可以点击以下字体
docker介绍
02
Docker Compose
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
没有compose之前,我们部署一个project时需要手工编排,例如:我们在部署一个wordpress服务时,需要先部署一个数据库服务,并要保证其高可用。然后再部署web服务,并将其关联到数据库容器上,但docker compose工具可以让我们将所有service(一个单独的容器是一个service,如数据库提供的服务是一个service)写在一个.yml文件中作为一个project提供给服务。就很大程度的减少人工编排的复杂度和难度,并且极大的减少服务迁移的难度。
docker compose安装,因为该工具使用python编写,所以可以直接利用pip工具进行安装,也可以使用其他方式安装,这里不做过多介绍,软件安装不是重点。
$ pip install docker-compose
更多docker-compose使用技巧可以点击以下链接
docker-compose使用说明
03
Docker Machine
Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
Docker Machine 项目基于 Go 语言实现,目前在 Github 上进行维护。
Docker Machine 就是一个远程的管理客户端,可以远程连接到一个主机上进行docker环境的安装和部署,并运行docker命令,有点类似于linux上的ssh服务,Docker Machine 支持多种后端驱动,包括虚拟机、本地主机和云平台等。
在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。
例如,在 Linux 64 位系统上直接下载对应的二进制包。
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/dockermachine
更多docker-machine使用说明可以点击以下链接
docker-machine使用说明
04
Docker Swarm
Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
目前容器集群管理的工具有原生的docker swarm,Mesos、Kubernetes 这三大巨头,其中kubernetes(k8s)占领了70%的市场额份,可谓是集群管理的独角兽,如果集群不是很庞大,建议初学者学习原生的docker swarm对集群进行管理,因为该工具慨念少,易理解上手快,提供的功能也基本能满足需求。
Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。
使用 Swarm 集群之前需要了解以下几个概念。
1、节点
行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
2、任务
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
3、服务(Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
replicated services: 按照一定规则在各个工作节点上运行指定个数的任务。
global services :每个工作节点上运行一个任务
docker swarm会将各个任务,即单个容器根据集群的负载状况发布到不同的节点上进行运行,所以一个服务中涉及到的任务可能运行在不同的节点上,如上述的wordpress涉及到数据库任务和wordpres的web服务在直接用docker-compose up 部署后,这两个容器是运行在同一个主机上的,但用docker swarm在集群上部署时,这连个服务很可能就不在一个主机也就是一个节点上运行了。这是docker swarm在对集群进行管理时,综合各节点的负载情况进行选择的。
更多的关于docker swarm的使用说明请点击下方链接
docker swarm使用说明
05
题外话
容器的出现大大减轻了一个公司对服务的部署,迁移问题,并且具有良好的可伸缩性,对于容器编排技术目前最火的当属Kubernetes。Kubernetes 是 Google 团队发起并维护的基于 Docker 的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心。未来的云服务的天下,服务,技术快速的迭代,随用随走,所以建议积极的拥抱容器云技术。未来是个开源的时代,不要重复造轮子,无论是开发还是服务部署,都建议去开源网站寻找一下相关的项目,可以帮助快速的开发和实现相应的需求。
docker的三大利器就介绍这么多,后面会写一篇关于Kubernetes 的介绍文章,毕竟人家那么火。更多的文章可以关注此公众号,会不定期的更新各种领域和题材的文章,也欢迎大家进行分享和留言进行讨论
走过路过,不要错过这个公众号哦!
领取专属 10元无门槛券
私享最新 技术干货