导读 随着分布式、云计算、大数据的火热爆发,大量的云计算集群出现,光凭计算机硬件配置的已经无法再次一较高下,虚拟化成为其中最核心的技术。虚拟化既可以通过硬件模拟,也可以通过操作系统层面去实现,近年来热火朝天的容器轻量级虚拟化,保留了操作系统本身的机制和特性,而Docker在此脱颖而出。
Docker的前世今生

Docker是基于Go语言实现的云开源项目,目前归于Apache基金会并遵循Apache 2.0协议。诞生于2013年初,前身公司为dotCloud,docker开源后得到受到社会广泛的关注,docker的生态圈体系也逐渐成熟,这家公司也改名为Docker Inc,专注于Docker相关技术和产品开发。

Docker最大的目标是:“Build, Ship and Run Any App, Anywhere!”。你只需要通过对应用组件的一次的封装,就能在任意地点构建和运行你的应用。无论是一个完整的应用,或者是某些微服务,甚至到一个完整的操作系统都能成为docker的应用组件。Docker提供一个高效、敏捷和轻量的容器方案,能动态适应各种规模的系统部署需求。

Docker整个生命周期包含三部分:镜像(Image),容器(Container),仓库(Repository)。镜像和容器的关系就像程序和进程,镜像是容器运行的一大前提,而容器则是镜像的一个运行实例。仓库则是镜像的管理中心,默认的镜像仓库为Docker Hub。

Docker运行容器前需要检查本地是否存在对应的镜像,如果不存在,会尝试从默认的镜像仓库下载。镜像实例化之后运行着一个完整的容器,容器除了镜像本身的内容外,还提供额外的可写文件层以及相对独立的运行环境(可能是一些应用或者服务,也可能是完整的操作系统)。

作为一个C/S模型的项目,Docker通过Docker Host进行镜像、容器、守护进程、分区等的管理,同时在Docker Client进行镜像的拉取,容器的构建等操作,通常情况下Host和Client可能会在同一台机器上。

Docker开源代码地址:https://github.com/docker/docker

Docker得天独厚的优势
新的部署方式

假如当前有这么一个场景:“由于业务增长,公司的一个网站项目需要迁移到新的服务器”。按照传统方案,我们很可能需要作一些重复性的工作。首先需要在新的服务器上安装对应的运行环境以及对应的依赖,如LAMP(Linux+Apache+Mysql+PHP),创建对应的用户或组并进行文件权限的管理,耗费大量的精力后,还需要对该环境进行测试,最后才能部署上线。试想一下,如果这样的需求多少十几倍,这些工作需要重复的执行。

也许你会说可以通过虚拟化的技术将整个环境打包成镜像再进行部署,加入新的服务器本身也是一台虚拟化的机器,再加上一层xen(或者其他虚拟机)去部署显然显得多余了。

而Docker提供一种极为简便的操作方式,通过容器来进行应用打包,我们可以通过封装成镜像或是编写Dockerfile等方式来进行打包,这意味着在新的服务器上只需要启动所需要的容器即可。一来节省了大量的时间投入,而来降低了部署过程出现问题带来的隐患。

运维策略的革新

1. 极速交付和部署

使用docker,开发人员可以使用镜像快速构建一套标准的开发环境。之后的测试和上线环节完全可以复用这套镜像将应用部署到测试环境或生产环境等任意地方。Docker可以快速创建、删除容器,并保留了每一个步骤的配置和操作过程,降低开发、测试、部署的时间的同时让环境部署更容易被理解。通过简单的配置文件修改,就能轻松完成一次运行环境的迭代,所有操作都可以以增量的形式进行分发和更新,从而实现自动化和高效的容器管理。

2. 性能损耗低

事实上docker是内核级别的虚拟化,不需要额外的虚拟化管理程序,因此开启docker对性能的损耗几乎忽略不计。

3. 轻便易迁移拓展

Docker几乎支持任意平台运行,无论是物理机还是虚拟化的主机,甚至个人电脑都能兼容运行docker,这种兼容性可以让应用更方便切换运行平台。

4. 规范化的标准

Docker背后的标准化容器执行引擎 - runC。runC是由docker贡献后续完善的一个开放的工业化标准,其主要内容:

  • 操作标准化:容器的标准化操作包括使用标准容器感觉创建、启动、停止容器,使用标准文件系统工具复制和创建容器快照,使用标准化网络工具进行下载和上传。
  • 内容无关:内容无关指不管针对的具体容器内容是什么,容器标准操作执行后都能产生同样的效果。如容器可以用同样的方式上传、启动,不管是php应用还是mysql数据库服务。
  • 基础设施无关:无论是个人的笔记本电脑还是AWS S3,亦或是Openstack,或者其他基础设施,都应该对支持容器的各项操作。
  • 为自动化量身定制:制定容器统一标准,是的操作内容无关化、平台无关化的根本目的之一,就是为了可以使容器操作全平台自动化。
  • 工业级交付:制定容器标准一大目标,就是使软件分发可以达到工业级交付成为现实。

5. 集群管理

Kubernetes是Google开源的Docker容器集群管理系统,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。

关于Docker和虚拟机的比较,请参考:http://***/docker-and-vm.html

关于Docker的标准,请参考:http://www.open-open.com/lib/view/open1444481959869.html

文章小节

全文主要对docker进行概念性的介绍,想必读到这里,docker再也不会是一个陌生的技术。无论是在针对应用的自动化运维还是PAAS的管理策略,docker都能提供一套优秀的解决方案,docker在领域内倍受青睐,让运维的工作有了前所未有的优质体验。如果你也被docker的魅力深深折服的话,欢迎加入到docker的学习行列一同探索。

Docker大行其道—初识的更多相关文章

  1. Docker大行其道—镜像

    导读 作为Docker三大核心概念之一,Docker镜像(Docker Image)是一个面向Docker引擎的只读模板,包含文件系统.实际上每个Docker镜像包含一个独立的运行环境,如一个镜像包含 ...

  2. Docker之初识(一)

    1.简介 今年四月份公司逐步改用docker容器来部署应用,当时自己刚踏出学校大门,平时开发都是环境都是早已安装好,因此一直没怎么了解Docker这玩意.公司里各位开发大佬说这是个好东西,可以很方便的 ...

  3. 41 【docker】初识

    常用的docker命令: docker ps #查看当前正在运行的容器 docker ps -a | grep <keyword> #查看所有的容器,运行的或者停止的 docker sto ...

  4. docker从初识到深入

    1:使用docker有哪些优势: 更快交付你的应用(Faster delivery of your applications) 让部署和测试更简单(Deploying and scaling more ...

  5. docker 概念初识

    1 docker 优势,一次创建或配置可以在任意时间.任意环境让应用正常的运行. 快速交付和部署,开发人员可以使用镜像快速构建一套标准的开发环境:开发完后测试和运维人员可以直接使用相同的环境来部署代码 ...

  6. 【Docker】初识与应用场景认知

    什么是Docker? Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行. 什么是Docker容器? Docker容器包括应用程 ...

  7. Docker 学习应用篇之一: 初识Docker

    Docker 自从2013年以来就非常的火热,无论是从github上的代码活跃度,还是Redhat在RHE6.5中集成对Docker的支持,等等.第一次接触Docker,还是老师给我们介绍的. 1.初 ...

  8. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  9. 初识Docker和Windows Server容器

    概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...

随机推荐

  1. grootJS ui控件定义

    index13.html <html><head> <title>ui控件定义</title> <script src="jquery- ...

  2. Orchard用LiveWriter写博客

    本文链接:http://www.cnblogs.com/souther/p/4544241.html Orchard本身提供一个内建的管理面板来写博客,许多人更喜欢采用客户端提交的方式,例如Windo ...

  3. 百度地图 IOS版开发经验分享

    最近刚完成app中地图的应用,感觉非常的曲折,折腾了很久,刚才开始一直不能成功使用百度地图api,报一大堆的错误,后来换到高德地图,又发现服务端使用的百度的经纬度,又从高德换回百度,泪奔. 这里简单比 ...

  4. 24.C#LINQ TO XML(十二章12.3)

    自己也写了那么多,但还有很多不懂,有点浮躁吧,但饭还是要吃啊,说说LINQ TO XML吧. LINQ TO XML位于System.Xml.Linq程序集,并且大多数类型位于System.Xml.L ...

  5. EntityFramework_MVC4中EF5 新手入门教程之一 ---1.创建实体框架数据模型

    Contoso University  Web 应用程序 你会在这些教程中构建的应用程序是一个简单的大学网站. 用户可以查看和更新学生. 课程和教师信息.这里有几个屏幕,您将创建. 这个网站的用户界面 ...

  6. AngularJS开发指南2:AngularJS初始化过程

    自动初始化 请将ng-app指令放到你应用的标签节点中, 如果你想要AngularJS自动执行整个<html>程序就把它放在 <html> 标签中.比如:<html ng ...

  7. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  8. 第七节 JBPM 中的脚本语言

    1.JPDL表达式 2.动作:数据库操作例子 3.路由:transaction一个流程之间的指向 4.BeanShell脚本语言 例子: 发布到数据库中才能做一个测试类

  9. 德州扑克AI WEB版

    继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信, ...

  10. 【poj1804】 Brainman

    http://poj.org/problem?id=1804 (题目链接) 题意 求逆序对 Solution1 归并排序. 每次合并时计算逆序对.  代码1 // poj1804 #include&l ...