转自:
https://mp.weixin.qq.com/s?__biz=MjM5NzAyNDUwOQ==&mid=2649245871&idx=1&sn=276221e104dabf400b4409db902d1bc4&chksm=befcaf3d898b262b98c2c634f4661ec20430dbf07c3d281ff013f95335f672ff6377f61d497c&scene=38#wechat_redirect

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心命名空间(name space),来建立独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机器造成的额外负担。

——摘自维基百科

Docker技术一直很火,因为它可以实现快速部署。但我们真的了解Docker吗?它有什么优势?具体应用场景在哪里?看看知乎上各路大神的回答。

Docker有什么优势?

Docker出现之后

  • 标准的交付件

说到docker最像集装箱的地方,关键就是理解它是软件领域的一种「标准化」,这种标准化的具体产物,简单来说就是「镜像(image)」。

在docker中镜像是指,把你的应用按照一定的格式封装(其实就是执行一些符合特定规的命令行)成一种具有某种标准规格的东西(就像集装箱把你的货物封装起来类似)。形象的说,就是把你的应用按照一定的格式抽象的画了个画像。

在docker中,镜像是无法直接运行的,我猜想这并不是技术上的原因,而是出于工程设计上的考虑。因为一般来说,一个软件的某个具体版本只会打包成一个镜像。如果镜像可以配置,运行的话,在使用过程中很可能会对镜像造成破坏。

那怎么样避免镜像损坏的问题呢?就是再加一层,相当于分身术,只要本尊没问题,分身怎么扑街都不会真正的跪掉。多加的这一层分身,就叫容器(container),这个名字也挺形象,它就像个盒子一样,你的应用在里面运行,而且多了一层安全机制。你想使用服务或把你的应用跑起来的话,只需要使用镜像新创建一个容器就可以了(也是一条命令搞定),而镜像还放在那里不动,没办法,金贵嘛。

Docker 究竟做了什么简化?

docker在部署过程中,将安装,配置等重复的部分,由docker自动化完成。只需要在第一次部署时,构建完可用的docker镜像(装好集装箱),在以后使用中,短短的几行命令,就可以直接拉取镜像,根据这个镜像创建出一个容器,把服务跑起来了。所需要的仅仅是安装了docker的服务器,一个Dockerfile文件,以及比较流畅的网络而已。真可谓『一次构建,到处部署』。

需要python3环境?直接 from python:3.x 搞定。

需要迁移服务器? 直接把应用连带Dockerfile,备份数据拷贝到新服务器上,几条命令又搞定

需要作为服务给别人使用?Dockerfile即是最清晰的部署文档,维护一个官方镜像即可,谁需要就直接拉下来几条命令部署上就行了。

到这里你可能已经发现了,docker镜像成为了一种像集装箱那样的标准货件。它不像传统的软件交付方式那样,只把代码以及说明文档之类的给你就完了,而是直接给你一个标准docker货件,它可能是Dockerfile,或者直接就是镜像,这个标准件不仅包括了代码本身,还包括了代码运行的OS等各种整体环境。

于是,谁想用我的服务,直接拉取镜像,实例化一个容器就可以了,能直接提供你所要的服务,不再像之前那样有繁复的安装过程————这些都有人给你做过了。

当然docker的优点不止于此

就像集装箱带来的「标准化」,这种标准化不仅是指集装箱本身,而且是指包括运输器械,物流管理方法等在内的,整个领域的标准化和效率的提高。也就是说基于一件核心事物的「标准化」,可以做更多的事情,比如集装箱的机械自动搬运,再远的比如自行车上的螺丝,轮胎等都有全球通用的标准。

docker也是类似的,一旦这种软件标准建立起来之后,就可以基于标准件和相应的管理方式带来更多的改变。

  • 统一的管理服务

使用docker部署的应用,都会在docker的管理范围之内。这也是docker的另一个非常大的优点,它提供了一种隔离的空间,把服务器上的零散的部署应用集中起来进行管理。

举个例子,比如我一个服务器上部署了n多服务,有mysql,redis,rabbitmq,其他还有一堆应用。有一天我服务器突然断电重启了,那些没有设置自动重启的应用,那些重启出问题的应用,那些你甚至都不知道隐藏在某个角落里的重要应用没启动成功….

然而使用docker,一眼就可以看出那些应用正常启动了,那些应用又出问题了。接下来只用有条不紊的处理就ok了。

  • 持续交付上的应用

弹性计算

也就是根据需要,动态地添加新的应用服务,在不需要时收回服务器资源,docker的标准化让这种弹性能力得到了更好的应用。

最后,关于docker的一个误解

很多人说docker改变了运维世界,这句话是从群体统计角度来说的,像mysql,python这样被大规模使用的应用,docker化之后对整个群体所节省的时间,是非常巨大的。

所以有人可能会问,我只有一台服务器,也不太可能会迁移。我的python服务,mysql服务,只需要部署一次,就可以在以后重复使用了。那这样docker对于我来说还有优势吗?毕竟docker也是有学习成本的。

如果你确信你的应用都是一次性的,而且只提供给自己使用,那么docker在这种场景下的优势不是特别明显:即便是docker,最初的构建也是需要有人做的,这和直接在机器上部署一次的工作量差不多。也就是说,docker并不能把部署的工作「减少为0」,比较好的情况下是「基本减少为1」。

以上答案作者:小狐濡尾
链接:https://www.zhihu.com/question/22871084/answer/88293837
来源:知乎

Docker的应用场景在哪里?

八个Docker的真实应用场景

  • 简化配置

这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

  • 代码流水线(Code Pipeline)管理

前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

  • 提高开发效率

这就带来了一些额外的好处:Docker能提升开发者的开发效率。

不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。

理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。

  • 隔离应用

有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。

我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊做了比较。

  • 整合服务器

正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。

  • 调试能力Docker

提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。你可以在《Docker拯救世界》的文章中找到这一点的例证。

  • 多租户环境

另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。

使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。

  • 快速部署

在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。这正是Google和Facebook都看重的特性。

你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。

以上答案作者:知乎用户
链接:https://www.zhihu.com/question/22969309/answer/38317063
来源:知乎

关于Docker,你要知道的都在这了相关推荐

  1. docker电子书_果然!这10个Docker容器坑多数人都中招过

    毋庸置疑,容器已经成为企业IT基础设施中必不可少的部分,它具有许多的优点,比如: 第一:容器是不可变的--操作系统,库版本,配置,文件夹和应用程序都包装在容器内.你保证在质量检查中测试过的同一镜像将以 ...

  2. 这些Docker容器技术窍门你都知道吗?

    Docker自从去年走到聚光灯下后,其粉丝基数就一直在增长.想要了解为什么,以及想从你的容器中获得更多,以下主要回顾了2015年Docker容器的五大窍门. 2014年Docker复兴了容器技术,并在 ...

  3. Docker常用命令,这些都要会!

    作者:DeepInThought cnblogs.com/DeepInThought/p/10896790.html 1.Docker容器信息 ##查看docker容器版本 docker versio ...

  4. docker login 明明账号密码都正确却登录失败 提示 The user name or passphrase you entered is not correct.

    使用命令docker login进行登录,输入用户名密码后报错:"the user name or passphrase you entered is not correct",尝 ...

  5. 别找了Docker常用命令都在这

    Docker常用命令集合 给大家介绍一些常用的Docker命令,对你有帮助的同学建议收藏作为一个查询手册哦. Docker容器的一些命令按功能分类大致如下: Docker环境信息 info.versi ...

  6. 【Docker】Docker的三大核心组件

    镜像(Image).容器(Container).仓库(Repository)是我们常说的Docker的三大组件,接下来就让我们一起详细地探索一番吧. 一.镜像(Image) 什么是Docker镜像? ...

  7. 使用Docker快速搭建PHP开发环境

    一般我们会把nginx.php都安装在同一个容器,为了扩展方便,我们希望nginx容器和php容器分开.那么就可以使用docker link命令实现这一目的. 需要的镜像: nginx 1.12.2 ...

  8. Docker 仓库管理

    Docker 仓库管理 转自:https://www.runoob.com/docker/docker-repository.html 仓库(Repository)是集中存放镜像的地方.以下介绍一下 ...

  9. docker安装clickhouse_Docker中安装ClickHouse,单机、集群、分布式

    Docker中安装ClickHouse 下文使用CH代替ClickHouse的称呼. 单机版本 docker run -d \ --name clickhouse-server \ -p 9000:9 ...

  10. 美亚排名超高的Docker入门书,不止简单易懂

    在美国亚马逊,有一本书的影响力超高的Docker入门书,在操作系统分类中排行第一,超越了众多实力派Docker书,众多五星好评.也许你有所耳闻,这本书就是<深入浅出Docker>. 这是一 ...

最新文章

  1. 基于TransactionScope类的分布式隐式事务
  2. 头条二面:你们公司怎么处理 MySQL 的 Binlog 日志?
  3. 所有计算机的字数都是8位,计算机(全部笔记).doc
  4. 本地数据库与mysql同步软件下载_SyncNavigator数据库同步软件
  5. STM32 FreeRTOS USART DMA空闲中断和消息队列的使用
  6. 知道这些用于数据科学和机器学习的GitHub存储库和Reddit主题吗?
  7. Ubuntu中anaconda的安装及使用
  8. php用curl调用接口方法,get和post两种方式
  9. RecyclerView异步加载图片
  10. 多元统计分析及R语言建模(王斌会)第五、六、七章答案
  11. 让 orangepi 用上Btsync(资源分享工具)好资源不怕和谐!
  12. 解决“你没有权限访问,请与网络管理员联系”
  13. 浅析企业云服务之SaaS、PaaS、IaaS对比分析
  14. 共阴数码管C语言单片机,51单片机直接驱动共阴极数码管
  15. linux iio 设备驱动,Linux设备驱动之IIO子系统——IIO框架数据读取
  16. 一起来学java!!! day003 流程控制01 你掉了金斧头还是银斧头?
  17. 微信公众平台开发学习
  18. 法外之徒第一季/全集Braquo迅雷下载
  19. photoshop cc2017全套视频课程 从基础到实战案例PS海报-王诚-专题视频课程
  20. 知识图谱(二):图数据库neo4j的Linux安装与基本使用

热门文章

  1. 计算机专业英语一国家线,从以往国家公布的数据,客观来看2010年英语国家线...
  2. BAT机器学习面试1000道
  3. 如何使用卷积神经网络进行图像处理?
  4. 怎样在计算机上设置纸大小,打印机怎么设置纸张大小 打印机设置打印纸张大小的步骤教程...
  5. 手机传输文件服务器,手机文件传输到服务器
  6. 企业如何选择电信、双线、多线/三线、BGP线路?他们的区别是什么?
  7. 使用Requests库进行网页爬取
  8. netkeeper客户端 Linux,netkeeper_for_linux
  9. 互联网打印机协议IPP分析
  10. 霍金门徒:计算机如何比人更懂世界