Docker简要介绍

1、为什么Docker有价值

为什么Docker这么有价值?在回答这个问题之前,我们先想一个相似的问题,为什么阿里巴巴这么有价值?

传统的商业存在两大弊端:一是买卖双方相对分散,加大了需求收集、营销、运输的成本;二是买卖双方信息不对称,对交易产生了抑制作用。

电子商务的出现则将商品从卖方到买方的流通过程变得集中化、标准化、透明化:

集中化:买家足不出户就能从各个商户集中购买商品,卖家根据买家需求集中配货、根据下单情况集中发货。

标准化:买家支付下单—卖家发货—快递包裹—物流运输—买家收货确认,整个流程都是标准化的。

透明化:买家可以在网上浏览商品评价、比较商品价格。买卖双方的信用等级也是完全透明的。

综上所述,可以说阿里巴巴这样的电商带来的最大价值在于降低了商品的社会交易成本。

现在我们把商业发展的逻辑搬到软件交付这里。传统的软件交付面临同传统商业类似的问题:

软件发布分散化,使用者搜索和安装软件的成本较高。当然,我们有类似yum、brew这样的工具来集中处理软件安装与软件依赖问题。但是,不要忘记开源软件已经占据越来越重要的位置,它们的发展速度和协作方式使传统的工具很难跟上节奏。

软件开发者和软件使用者双方信息不对称。尽管开发者对软件的代码编译、参数配置、运行环境等信息了如指掌,但使用者却很可能一知半解。因此,我们会经常看到使用者抱怨,明明按照用户手册一步步操作,却仍然跑不起来。这种情况也时常出现在软件流程中,开发将程序和文档交付给测试或运维,测试或运维却总是无法重现期望的运行状态,几经辗转发现是机器环境、系统环境、软件依赖版本、参数配置等等原因导致。这样低效的软件流程将使持续集成与持续交付很难真正实施起来,仅仅流于形式。

Docker的出现则将软件从开发方到使用方的交付过程变得集中化、标准化、透明化。

集中化:软件使用者可以从Docker仓库找到琳琅满目的软件镜像,一个镜像包含商业软件或开源软件,也可以包含单个软件或任意的软件组合。

标准化:Docker镜像的“构建—发布—存储—下载—运行”是标准化的,统一通过Docker工具来执行,而且所有操作都可以移植到任意的机器或平台

透明化:Docker镜像是自包含的,包括程序、软件依赖、参数配置等所有运行环境,使用者无需了解细节,只需运行同样的Docker命令就能达到与开发者同样的运行状态

综上所述,可以说Docker带来的最大价值在于降低了软件的交付成本。

2、什么是Docker思维

这年头流行思维主义,什么互联网思维、大数据思维格外赚人眼球。这里我们跟风一下,提出一个Docker思维,其实归纳起来就两句话:

1、做为软件使用者,避免直接安装软件包,总是以Docker镜像形式获取软件、以Docker容器形式运行软件。

2、做为软件开发者,避免直接发布软件包,总是以Docker镜像形式发布到Docker仓库。

怎样理解这两句话?下面通过一个简单的实践来说明。假定现在我们在开发一个Java程序,从编译到运行需要使用以下几个软件工具:1)svn,源码版本控制;2)maven,源码编译;3)mysql,存储数据库。

遵循Docker思维,做为使用者,我们应该避免直接安装svn、maven及mysql,而是通过Docker来获取。

3、什么是Docker

Docker是一个由GO语言写的程序运行的“容器”(Linux containers,LXCs); 目前容器服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来

Docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App装在Container内,通过Linux Container技术的包装将App变成一种标准化的、可移植的、自管理的组件,这种组件可以在你的Laptop上开发、调试、运行,最终非常方便和一致地运行在生产环境下。Docker的核心底层技术是LXC(Linux Container),Docker在其上面加了薄薄的一层,添加了许多有用的功能。

Docker不仅是历史上最流行的开源项目之一,而且也从根本上改变了人们构建应用程序的思维方式。它可以把程序及依赖的二进制文件、第三方库等封装在一起,运行在任何安装Docker Daemon的服务器上,它有望成为未来软件自动化部署的标准。

3.1 Docker与传统VM对比

Docker容器与虚拟机享有相似的资源隔离和分配,但是Docker容器有一套不同的架构方式使得它本身更加便携和高效。下图为传统虚拟机与Docker架构的对比。

 

由上图可知,每一个虚拟机包括应用、必要的二进制文件和库、完整的客户操作系统,大小总计数十几个GB。

容器包括应用和应用的所有依赖,每个容器都使用容器自身选择的发行版本,但是与其他容器共享宿主操作系统的内核

在宿主操作系统的用户空间内,他们以隔离的进程方式运行。另外,他们并不像客户操作系统正常运行那样运行所有的进程。而且容器也不绑定任何特别的硬件基础设施,Docker容器在任何计算机任何硬件基础设施任何云上都可以运行

重要的是,虚拟机需要耗时几分钟来启动,而且对资源敏感,然后容器只需要几秒甚至更少时间启动,在资源较少负载过大时也能应付的了。所以,你可以在本地计算机运行很少的几个虚拟机用于开发目的,但是你可以运行很多很多的容器。这可以使你在开发环境中高效的运行应用环境的完整备份。而且,在生产环境中,这些资源节约很容易转化为成本节约。

3.2 Docker组件

1)docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor(管理程序)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker有明显优势。

2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。因而避免了引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。docker能在几秒钟内启动大量容器,这是虚拟机无法办到的。

下图为Docker组件结构图

 

Docker是C/S架构,主要由下面三部分组成:

Docker daemon(Docker镜像):运行在宿主机上,Docker守护进程,用户通过Docker client与Docker daemon交互;

Docker client:Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon;

Docker hub/registry:共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。

了解了Docker的组成,再来了解一下Docker的两个主要概念:

Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。

Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。

3.3 Docker的优点

Docker提供了一种可移植的配置标准化机制,允许你一致性地在不同的机器上运行同一个Container;而LXC本身可能因为不同机器的不同配置而无法方便地移植运行;

Docker以App为中心,为应用的部署做了很多优化,而LXC的帮助脚本主要是聚焦于如何使机器启动地更快和消耗更少的内存;

Docker为App提供了一种自动化构建机制(Dockerfile),包括打包基础设施依赖管理和安装等;

Docker提供了一种类似git的Container版本化的机制,允许你对你创建过的容器进行版本管理,依靠这种机制,你还可以下载别人创建的Container,甚至像git那样进行合并;

Docker Container是可重用的,依赖于版本化机制,你很容易重用别人的Container(叫Image),作为基础版本进行扩展;

Docker Container是可共享的,有点类似github一样,Docker有自己的INDEX,你可以创建自己的Docker用户并上传和下载Docker Image;

Docker提供了很多的工具链,形成了一个生态系统;这些工具的目标是自动化、个性化和集成化,包括对PASS平台的支持等;

那么Docker有什么用呢?对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规模化、自动化、异构化的部署成为可能甚至是轻松简单的事情;而对于开发者来说,Docker提供了一种开发环境的管理方法,包括映像、构建、共享等功能。

速度快:运行时的性能可以获取极大提升,管理操作(启动、停止、开始、重启等)都是以秒或毫秒为单位的。将应用和系统“容器化”,不添加额外的操作系统。

敏捷:比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到于和仍于分发灵活。

轻量:你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。

便宜:开源的、免费的、低成本的。由现代Linux内核支持驱动,轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VM要便宜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值