基于高度虚拟化所诞生的容器技术,如今已经走向大规模应用。那么容器、虚拟机、Docker、Openstack、Kubernetes 之间又有什么关系,对现在的选择有什么影响呢?

上世纪 60 年代,计算机是一种稀有商品。即便只租不买,每月也要花一千多美元,这使许多企业都无法承受。而且早期的计算机通常专用于某一项特定的任务,需要同时在许多用户之间共享计算机资源,并且可能花费几天甚至几周的时间才能运行完毕。俗话说:“需求是发明之母”,有了需求人们就会去发明创造来满足需求。计算机的历史也不例外,过于昂贵的费用和长时间的共享需求刺激了虚拟化的逐渐发展。

Docker 与容器

基于需求刺激,容器技术应运而生。容器的发展从 Chroot,FreeBSD jails,OpenVZ,LXC,到如今的 Docker、Rocket 真正走向了大规模应用。

相比普通服务器,容器是一种更轻量级,更灵活的虚拟化处理方式,它将一个应用程序所需的一切打包在一起。一般情况下开发人员在编写代码时,他们是在自己本地的开发环境中工作;当他们准备将代码移至生产环境时,总会发生一些意想不到的事情。原因多种多样:不同的操作系统,不同的依赖项,不同的库。

而容器解决了可移植性这一关键问题,它可以将代码与运行它的环境分开。开发人员可以将应用程序(包括正确运行所需的所有库)打包到一个小的容器镜像中。该镜像可以在其他任何计算机上运行。

Docker 的兴起

虽然 Docker 经常会和“容器(Container)”一词相提并论,但是 Docker 本身并不是容器。从字面意思可以解读,“Container”原译为“集装箱”,而“Docker”被译为“码头工人”。

Docker 是一个开源的应用容器引擎,是创建容器的工具。让开发者可以打包他们的应用和依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。

2013 年 PyCon 大会之后,Docker 迅速成为社区、客户和更广泛行业的实际标准与基石。Docker 的强大之处在于它通过可移植的形式和易于使用的工具,在应用程序和基础设施之间创造了独立性,使得容器技术大众化,并使容器技术成为主流。

Docker 如此大火,但是我们需要知道,Docker 并不是唯一的,也不是第一个出现的容器平台。其他的框架,例如 OpenVZ 和 LXC(Linux Container),于 2000 年中期就已经开始使用。而 FreeBSD jails,则可以追溯到更远的年代。Docker 是在 2013 年发布的,与当今大多数主流的容器技术相比,它是非常年轻的。

虽然 Docker 不是最成熟的,却引起了极大的关注。这是因为 Docker 是一个扩展的 Linux 容器(LXC),是一种独特轻巧、以应用为中心的虚拟化工具。它大大降低了企业开销,也更容易让企业在服务器上部署软件。且 Docker 允许系统管理员和开发人员在容器中构建任何应用程序,节省资源。

除此之外,Docker 发展迅猛的原因还有:

  • Docker 从一开始就是开源的,这使得 Docker 在行业内有了强大的吸引力。直到 2013 年,行业才开始将“开源”视为软件生产的默认模式。

  • Docker 出现在了正确的时间。到 2013 年,虚拟机似乎已经成为了过时的技术。大家一直在寻找一种更精简,更方便的方式来部署应用程序,而这时 Docker 出现了,它恰好符合要求。

  • Docker 使用的另一个主要重点是 DevOps。DevOps 在 2010 年初开始流行,它强调了软件交付的敏捷性、灵活性和可扩展性。Docker 恰好为根据 DevOps 部署应用程序提供了合适的环境。

Docker 与 OpenStack

容器和虚拟机这两种技术经常被互相比较。所谓虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

Docker 可能被认为是当前容器技术的代表,而作为虚拟机技术的代表,OpenStack 也被大众所周知。

OpenStack 是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。它不是一个软件,而是一个云平台管理的项目。这个项目由几个主要的组件组合起来完成一些具体的工作。其中主要包括:

  • Nova(Compute):在 OpenStack 环境中计算实例(即创建的云主机)的生命周期管理。按需响应包括生成、调度、回收虚拟机等操作。

  • Neutron(Networking):确保为其它 OpenStack 服务提供网络连接即服务。

  • Swift(Object Storage):通过基于 HTTP 的应用程序接口存储和任意检索的非结构化数据对象。

  • Glance(Image service):存储和检索虚拟机磁盘镜像,OpenStack Compute 会在实例部署时使用此服务。

许多人都会常用 Docker 和传统虚拟机来做比较,并且经常凸显出 Docker 的优势。其实这和 OpenStack 没有直接关系。曾经许多的性能测试都会将 Docker 与 KVM 进行对比,但是后来发现这些测试是通过 OpenStack 运行的,这表明两种技术其实可以很好地协同工作。

那么如果使用了 Docker,还能使用 OpenStack 吗?

答案是可以的,Docker 以最简单的形式提供了一个容器,用于管理共享基础架构上的应用程序,同时又使它们彼此隔离。而虚拟机则通过创建一个完整的操作系统来完成类似的工作。OpenStack 的官方文档(https://wiki.openstack.org/wiki/Docker)特别提供了部署 Docker 的解决方案,并且单独指出:“容器并非旨在替代虚拟机,它们是互补的,因为它们更适合特定的用例。”

Docker 与 Kubernetes

如果第一次看到 Kubernetes 这个词,可能会比较好奇它为何简写为 K8S。其实是 k 与 s 中间正好隔了 8 个字母,K8S 为一种偷懒地写法。Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

作为容器编排的解决方案,随着 Kubernetes 越来越流行,“Kubernetes” 与 “Docker” 这两个词也经常会相提并论。

目前,Kubernetes 可以说是市场领导者,及编排容器和部署分布式应用程序的标准化方法。Kubernetes 可以在公共云服务或本地运行,具有高度模块化,开放源代码,并且拥有一个活跃的社区。许多云厂商也都已经提供了 Kubernetes 作为服务。

当然了,Docker 和 Kubernetes 并不是竞争对手。Docker 是一个容器化平台,而 Kubernetes 是 Docker 等容器平台的协调器。它旨在为容器提供高效地管理,监视应用程序的运行状况,使应用程序提供不间断地服务,而不需要运维人员去进行复杂的手工配置和处理。

云计算技术发展至今,从最开始的硬件虚拟化、IaaS、OpenStack、PaaS、容器到如今的 Serverless,云计算已经越来越接近应用逻辑。容器实现了应用的分装,方便了应用在不同环境间的迁移,轻量级的特性又使它能够消耗更少的资源而带来更大的便利。当然,技术更新迭代迅速,我们只有不断学习才能跟上行业的步伐,加油吧,小伙伴们!

深入了解什么是Docker相关推荐

  1. /var/lib/docker/overlay2/xxxxx no such file or directory docker文件删除引发的问题

    记一次误删引发的服务雪崩 K8s node节点磁盘报警,报警后我找到服务中占用磁盘最多的地方,在overlay2目录下,对下面的文件进行了删除   删除后,有状态服务先出现了问题,服务无法启动.停止. ...

  2. 本地打包Docker镜像上传至阿里云远程仓库(一站式脚本)

    打包镜像上传至远程仓库: 1. 本地项目为 mytest-project 2. 仓库为阿里云镜像仓库 registry.cn-beijing.aliyuncs.com/test/mytest-proj ...

  3. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  4. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

  5. docker安装kafka消息队列

    1. 启动zookeeper容器(Zookeeper用于崩溃检测,实现Topic发现,和维护Topic的生产和消费状态) docker run -d --name zookeeper -p 2181: ...

  6. 设置普通用户执行docker命令,执行docker命令无需输入密码或者切换root用户

    每次执行docker命令都要输入密码或者切换root用户,非常不方便,尤其是在shell脚本中就更麻烦了,一起来解决这个问题: 1. 创建名为docker的组,如果之前已经有该组就会提示已存在: su ...

  7. docker :open /var/lib/docker/tmp/GetImageBlob318829910: no such file or directory异常解决

    千万不要直接去重装docker,不要删除镜像,不要手动创建目录和文件,只需要这样就好了!

  8. 将jar包部署在docker上,将jar包打成镜像,使用docker部署jar包

    假设你已经准备好以下东西,即可进行服务部署 一台安装好docker的linux服务器(安装docker见安装docker) 准备好的jar包 接下来开始吧! 将jar包上传至服务器(建好文件夹存放以方 ...

  9. 使用rancher对Docker容器服务升级

    这是笔者以前使用到的一个docker管理工具--rancher 升级服务的步骤 记录一下,说不定有人需要或者以后能用上呢? 1.打包好后上传服务器,编写Dockerfile FROM jdk8apli ...

  10. Linux/docker下oracle开启监听,开启自动启动

    写在前头: 之前呢,使用docker安装了oracle,但它默认是会关闭的.使用了几天以后突然连接异常了,报的问题是oracle监听有问题了,我知道了是oracle服务自动关闭了,监听也跟着关了.所以 ...

最新文章

  1. OpenCASCADE绘制测试线束:数据交换命令之STEP 命令
  2. 【译】LiveData 在 SnackBar/Navigation 情景下的使用(SingleLiveEvent)
  3. SQL 查询横表变竖表
  4. 持续集成与自动化部署 - jenkins sonar代码质量管理平台 部署和基础使用(五)...
  5. mysql 异步复制建立过程_mysql生产环境高可用---基于GTID异步复制项目实施
  6. fpga如何约束走线_FPGA时序约束实战篇之多周期路径约束
  7. springboot2 配置redis报错 redis timeout Value not a valid duration解决办法
  8. ASP.NET状态管理之六(缓存Cache)
  9. RTT的线程同步篇——总结
  10. ora错误匹配java_上周上线碰见的ORA-00054错误回放
  11. cudnn版本_踩过cuda、cudnn的坑[持续更新]
  12. python append函数_Python程序性能分析
  13. 为什么使用3msip2协议_TCP协议专场
  14. C语言中的数组(4)---二维数组的定义
  15. 有关微信小程序云数据库修改数据的坑
  16. python爬虫实践——自动登录抽屉新热榜
  17. 在linux系统下使用service tomcat start命令打开tomcat失败,报Neither the JAVA_HOME nor the JRE_HOME environment vari
  18. python中复数类型的实部和虚部都是浮点数_Python合集之Python数据类型(一)
  19. 如何在CentOS 7中设置或更改主机名
  20. linux系统硬盘坏道,linux系统下检测硬盘上的坏道和坏块

热门文章

  1. 什么是Eureka注册中心
  2. 华为手机记事本导出_涨知识!原来华为手机自带的录音转文字这么好用,秒变会议神器...
  3. ubuntu nano的使用 nano的关闭快捷键
  4. sq语句报错Parameter index out of range (2 > number of parameters, which is 1).
  5. Cortex-M3-异常与中断-向量表 s
  6. Vue源码解析之AST语法树(三)
  7. This Android SDK requires An... ADT to the late...
  8. 大数据时代的电信运营商的机遇
  9. java 动态编译源代码
  10. CodeForces - 1408E Avoid Rainbow Cycles(思维+最大生成树)