Docker介绍1

1.docker容器基础入门

传统的应用部署过程大概是:下载软件->编译安装->启动软件,比如现在要安装 LNMP 软件,就得先下载Nginx+Mysql+PHP,然后一个个安装,这对于一两台服务器时还能接受,要是面对成千上万的服务器集群,还不得累死吗,有没有办法把这几个软件打包成一个软件一次性安装呢,容器的出现使得很好的解决了这类问题。

2.什么是容器?

(1)在生活领域容器(Container)的概念

  • 容器是一种基础工具,泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器则可以保护内容物。
  • 人类使用容器的历史至少有十万年,甚至可能有数百万年的历史,所以容器并不是一个新的概念
  • 容器的类型:瓶、罐、箱、蓝、桶、袋、翁、碗、柜、鞘等等,这些都是容器.

(2)计算机领域:

容器(container)以一种特定的格式来打包软件,这种格式可以各自独立的运行在同一个操作系统之上,不像虚拟机,容器不会捆绑一个完整的操作系统,而仅仅打包软件运行所需要的依赖库和设置。这样可以实现一个高效、轻量级、自给自足的系统,并且可以保证软件总是以相同的方式运行,而不管它被部署在哪里。

所以从上可知,容器是一种打包应用的方式,可以帮你打包应用中的所有软件和软件所依赖的环境,并且可以实现跨平台部署。相比虚拟机,容器更高效和轻量化,一台服务器运行1000个虚拟机基本是难以想象的,但IBM的服务器据称已经在一台服务器上运行万级的容器。

3.容器和虚拟化的区别:

对于虚拟化来说就是通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上。因此,对于主机级虚拟化,我们的实现方式一般是想办法去模拟出硬件环境,模拟出虚拟的cpu、内存、硬盘、网卡等资源,然后在这些虚拟资源之上安装合适的操作系统来控制这些资源。

如上图所示,在VMM(又叫做hypervisor)之上,可以模拟出逻辑的计算机虚拟环境,然后安装操作系统,使其成为一台逻辑上虚拟的计算机主机(简称虚拟机),该主机有自己的系统内核,有自己的用户空间,可以在自己的用户空间内跑各种各样的应用程序。虚拟机与虚拟机之间是完全隔离的,也就是说一台虚拟机上运行的进程与其他虚拟机上运行的进程是互不干扰的,所以隔离性也是虚拟化所追求的一个目标。

所以对于虚拟化来说存在以下几个缺点

(1)资源占用多

虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有1MB,虚拟机依然需要几百MB的内存才能运行。

(2)冗余步骤多

虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

(3)启动慢

启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

由于虚拟机存在这些缺点,所以又发展出了另一种虚拟化技术:容器(Containers)。容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

由于容器是进程级别的,相比虚拟机有很多优势。

(1)启动快

容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

(2)资源占用少

容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。

(3)体积小

容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

(4)简化部署:容器技术可以将应用打包成单一地址访问的、Registry存储的、 仅通过一行命令就可以部署完成的组件。

(5)服务组合:采用容器的方式进行部署,整个系统会变得易于组合,通过容器技术将不同服务封装在对应的容器中,之后结合一些脚本使这些容器按照要求相互协作,这样操作不仅可以简化部署难度还可以降低操作风险。

(6)易于迁移:容器技术最重要的价值就是为在不同主机上运行服务提供一个轻便的、一致的格式。容器格式的标准化加快交付体验,允许用户方便地对工作负载进行迁移,避免局限于单一的平台提供商。

简而言之就是,容器是一个盒子,一个盒子装一个玩具,无论你丢在哪里,你给他通电,他就能运行。你的玩具大就用大盒子,小玩具就用小盒子。

容器与虚拟化的区别,简单来说:

  • 虚拟化使得多个操作系统可同时运行在单个系统上
  • 容器则可共享同一个操作系统的内核,将应用程序与系统其它部分隔离开

上面这幅图可以帮助我们更主观的理解二者之间的区别.

4.什么是Docker?

Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能,并使用了一种分层的联合文件系统技术管理镜像,能极大简化环境运维过程。Docker是容器运行的引擎(容器系统)负责启动容器镜像、运行容器应用和管理容器实例,并且支持在多种主流平台(PaaS)和本地部署。

Docker是基于Go语言实现的云开源项目,诞生于2013年,最初发起者是DotCloud公司,后来改名为Docker Inc,之后专注于Docker相关技术和产品的开发。

Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

docker的Logo设计为蓝色鲸鱼,驮着许多集装箱。Docker将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统,Docker的是一个轻量级的操作系统虚拟化解决方案。 主要目标,用官网的概括来说就是“Build,Ship and Run Any App,Anywhere”:编译,装载任何App,在任何地方都可以运行,我们大概理解就是一个容器,实现了对应用的封装,部署,运行等生命周期管理,到处都可以运行。这里的应用组件,既可以是一个Web应用、一个编译环境,也可以是一套数据库平台服务等等。

可以看看集装箱思想是如何与Docker 各种特性相对应的,如表所示

特性集装箱Docker容器
打包对象几乎任何货物任何软件及其依赖
硬件依赖标准形状和接口允许集装箱被装卸到各种交通工具,整个运输过程无须打开。容器无须修改便可运行在几乎所有的平台上:虚拟机、物理机、公有云、私有云
隔离性集装箱可以重叠起来一起运输, 香蕉再也不会被铁桶压烂了资源、网络、库都是隔离的, 不会出现依赖问题
自动化标准接口使集装箱很容易自动装卸和移动提供run、start、Stop等标准化操作, 非常适合自动化
高效性无须开箱,可在各种交通工具间快速搬运轻盘级,能够快速启动和迁移
职责分工货主只需考虑把什么放到集装箱里,承运方只需关心怎样运输集装开发人员只需考虑怎么写代码, 运维人员只需关心如何配置基础环境

Docker的英文本意是“搬运工”, Docker搬运的是集装箱(Container),集装箱里装的是任意类型的应用程序和该应用程序所依赖的环境

Docker官方网站:http://www.docker.com

Github Docker 源码:https://github.com/docker/docker

欢迎大家多多评论.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值