导读 随着分布式、云计算、大数据的火热爆发,大量的云计算集群出现,光凭计算机硬件配置的已经无法再次一较高下,虚拟化成为其中最核心的技术。虚拟化既可以通过硬件模拟,也可以通过操作系统层面去实现,近年来热火朝天的容器轻量级虚拟化,保留了操作系统本身的机制和特性,而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. 【Lucene实验1】构建索引

    一.实验名称:构建索引 二.实验日期:2013/9/21 三.实验目的: 1)        能理解Lucene中的Document-Field结构的数据建模过程: 2)        能编针对特定数 ...

  2. css写一个梯形

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>D ...

  3. JS中decodeURI()与decodeURIComponent()区别

    decodeURI()定义和用法:decodeURI() 函数可对 encodeURI() 函数编码过的URI 进行解码. 语法:decodeURI(URIstring) 参数 描述:URIstrin ...

  4. 在Web Service中傳送Dictionary

    有個需求,想在Web Service中傳遞Dictionary<string, string>參數,例如: 排版顯示純文字 [WebMethod] public Dictionary< ...

  5. oracle练习题

    题干:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 建表后数据如下: SQL> select * from ...

  6. iOS开发获取本机手机号码

    最近有个奇葩需求,用户登录返回手机号匹配本机号码相同才可以登录,吓得我虎躯一震,经了解,iOS7后不越狱实现不了 "For security reasons, iPhone OS restr ...

  7. log4j2 使用说明

    因近期需要编写J2EE程序,所以简单学习了Log4j2,这里把我学习的一些信息做记录: 1.从HelloWorld开始 参考:http://logging.apache.org/log4j/2.x/m ...

  8. 【HTTP劫持和DNS劫持】腾讯的实际业务分析

        简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西.       首先对运营商的劫持行为做一些分析,他们的目的无非 ...

  9. 【HDU 5399】Too Simple

    题 Description Rhason Cheung had a simple problem, and asked Teacher Mai for help. But Teacher Mai th ...

  10. POJ 1466 Girls and Boys

    Girls and Boys Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1466 Descripti ...