首页 > 其他分享 >学习docker后的个人理解

学习docker后的个人理解

时间:2024-09-25 18:53:59浏览次数:9  
标签:容器 虚拟机 环境 学习 理解 应用 可以 docker Docker

一、什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,它将软件组件包装成一个完整的标准化单元,其中包含所有要运行的内容。 无论是代码,运行时环境,工具还是程序库。它保证软件能始终按预期那样运行。。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。可以在给定的主机上同时运行多个容器。 它是轻量级的,可立即启动并使用较少的内存。 它是默认安全的,因为每个容器彼此隔离。

     注意 - Docker 容器并不是针对某种特定的平台。 它可以在任何计算机,任何基础架构和云中运行。

 

二、docker的优点

快
运行时的性能可以获取极大提升(经典的案例是提升97%)
管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。

敏捷
像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。

灵活
将应用和系统“容器化”,不添加额外的操作系统,
轻量
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
便宜
开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
生态系统
正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC.还有不计其数的社区和第三方应用。
云支持
不计其数的云服务提供创建和管理Linux容器框架。

 

三、有争论的部分

任何项目都会有争论,就像Go,像NodeJS, 同样Docker也有一些。

能否彻底隔离
在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。 注* 就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。
不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。

GO语言还没有完全成熟
Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。

被私有公司控制
Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)

 

四、缺点:

1.Docker支持Unix/Linux操作系统,不支持Windows或Mac(即使可以在其上安装,不过也是基于Linux虚拟机的)
2.Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。
3.灵活性,安全性,配置共享方面有所欠缺

 

docker的常用应用场景:

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

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

3. 提高开发效率
这就带来了一些额外的好处:Docker能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。
不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。
理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。

4. 隔离应用
有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。
我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊做了比较。

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

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

7. 多租户环境
另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。
使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。你可以在这里了解关于此场景的更多信息。

8. 快速部署
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。这正是Google和Facebook都看重的特性。
你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。

 

docker和openstack的对比,用一下一张图来解释:

学习docker后的个人理解_服务器

 

docker改变了什么

面向产品:    产品交付

面向开发:    简化环境配置

面向测试:    多版本测试

面向运维:    环境一致性
    
面向架构:    自动化扩容(微服务)

 

 

"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少



标签:容器,虚拟机,环境,学习,理解,应用,可以,docker,Docker
From: https://blog.51cto.com/u_8901540/12111447

相关文章

  • Centos下安装Docker集群管理工具Shipyard
     一、DockerShipyard是什么?shipyard是一个开源的docker管理平台,其特性主要包括:1支持镜像管理、容器管理。2支持控制台命令3容器资源消耗监控4支持集群swarm,可以随意增加节点5支持控制用户管理权限,可以设置某个容器对某个用户只读、管理权限。6有汉化版缺点:1不支持i......
  • 量化交易学习日记8-大单净额进阶(张江高科为例)
    说明大单净额是反应主力的动向,这没错,可是,成交额多少算大单?之前写的大单净额功能我自己测试了一下,拿庄股张江高科建仓的阶段举个例子:可以看到,不管是大单净额(门槛是25万)还是全资金流向,流出都是惊人的,可是,建仓阶段不应该是主力进入的过程吗,我对该股进行过长期跟踪,这是一......
  • golang学习笔记13-函数(二):init函数,匿名函数,闭包,defer
    注:本人已有C,C++,Python基础,只写本人认为的重点。这个知识点基本属于go的特性,比较重要,需要认真分析。一、init函数每个文件都可以定义init函数,它会在main函数执行前被调用,无论它的定义位置是在main后还是前。而全局变量的优先级又高于init,所以优先级是这样的:全局变量>init......
  • Redis学习
    系列文章目录第一章基础知识、数据类型学习第二章万年历项目第三章代码逻辑训练习题第四章方法、数组学习第五章图书管理系统项目第六章面向对象编程:封装、继承、多态学习第七章封装继承多态习题第八章常用类、包装类、异常处理机制学习第九章集合学习第......
  • repo 简单搭建学习记录
    repo简单搭建学习记录文章目录repo简单搭建学习记录一、repo搭建1、服务端2、客户端二、repo更多细节三、reposync如何指定manifest仓库版本四、manifest仓库如何指定子仓库版本一、repo搭建参考:repo仓库搭建教程【CSDN】gitrepo工具详细使用教程【C......
  • 9.25学习日志
    一.Python变量1.变量命名(上期已记录)2.变量类型变量是没有类型的,这里所说的变量类型指的是变量所指的内存中对象的类型。在Python中,type()函数用于返回对象的类型。当你使用type(object)时,它会返回该对象的类型,并以<class'typename'>的形式表示。一个变量的typena......
  • 从传统学习到智能学练,10 寸电子纸学练机市场空间有多大?
    10寸电子纸学练机在中国市场拥有可观的市场空间,主要得益于教育数字化的推进和家长对孩子教育的重视。以下是一些关键的市场数据和分析:市场规模:2023年中国学习平板市场全渠道销量达到了472.1万台,同比2022年增长8.1%。其中,电子纸学习平板(学练机)销量同比暴涨了870%,市场均价为358......
  • 2024网络安全学习路线 非常详细 推荐学习
      关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学习语言上;2、知识点掌握程度不清楚对......
  • 2024网络安全学习路线 非常详细 推荐学习
      关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学习语言上;2、知识点掌握程度不清楚对......
  • 入门网络安全工程师要学习哪些内容
       大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网络安全工程师需要学什么?知了堂小编总结出以下要点。网络安全工程师是一个概称,学习的东西很多,具体学什么看自己以后的职业定位。如果你以后想成为......