文档章节

Java开发人员需要注意的五大Docker误区 ( 对进一步理解docker有用)

XDocker
 XDocker
发布于 2015/03/11 08:32
字数 2195
阅读 27
收藏 3
点赞 0
评论 0

(感谢崔婧雯的翻译)

抛去那些媒体和厂商们的炒作,我们如何才能更好更理性的使用Docker?

Docker最近备受关注,原因显而易见。如何成功交付代码一直困扰着大家。传统的容器技术在众多需求和模板中乱成一团。而Docker可以简单且重复的创建容器。相比其它容器,使用Docker可以更快、更自然的交付代码。Duang,Docker火了!随之而来也有一些误解和误区。不要太相信别人说Docker好用或者不好用。自己理性地全面思考一下Docker,会帮助你真正理解是否真的需要它。

本文列举了从Java角度的五大Docker误读。不过首先介绍些背景知识。为了更好地理解Docker,我们咨询了 Fewbytes Avishai Ish-Shalom ,他有丰富的Docker经验,也是DevOps Days会议的组织者。我们和他一起列举出了这些误解。

主要误区

1. Docker是轻量级虚拟机

这是大家初学Docker时最主要的误解。这种误解倒也情有可原,Docker的确看上去有点像虚拟机。 Docker网站 上甚至有人比较了Docker和虚拟机的区别。但是,Docker实际上不是轻量级虚拟机,而是改进了的Linux容器( LXC )。Docker和虚拟机是完全不一样的,如果你把Docker容器当成轻量级虚拟机来用,会遇到很多问题。

在使用Docker之前,必须了解Docker容器和虚拟机有很多本质的区别。

资源隔离:Docker达不到虚拟机所能提供的资源隔离水平。虚拟机的资源是高度隔离的,而Docker从设计之初就需要共享一些资源,这些资源是Docker无法隔离和保护的,比如页缓存和 entropy池 。(注:entropy池很有趣,entropy池收集并且存储系统操作生成的随机比特。机器在需要随机化时(比如密码相关)使用这个池。)如果Docker容器占用了这些共享资源,那么其他进程在这些资源被释放前只能等待。

开销:大多数人都知道虚拟机的CPU和RAM能提供类似物理机的性能,但是有很多额外的IO开销。因为放弃了虚拟机的guest OS,Docker的package更小,比起虚拟机需要更少的存储开销。但这并不意味着Docker没有任何开销问题。Docker容器依然需要注意IO开销的问题,只不过没有虚拟机严重而已。

内核使用:Docker容器和虚拟机在内核使用上完全不同。每个虚拟机使用一个内核。Docker容器则是在所有容器间共享内核。共享内核带来一些效率的提升,但是以高可用和冗余为代价。如果虚拟机发生了内核崩溃,只有这个内核上的虚拟机会受影响。而Docker容器如果内核崩溃了,所有的容器都会受影响。

2. Docker使得应用可扩展

因为Docker可以在很短的时间内在很多服务器上部署代码,自然有人会觉得Docker使得应用自身变得可扩展。不幸的是,这是错误的。代码构成应用,而Docker并不会重写代码。应用的可扩展性依然取决于程序员。使用Docker并不会自动得让你的代码易于扩展,只是让这些代码更容易跨服务器部署而已。

3. Docker在生产环境广为使用

因为Docker势头正劲,很多人便认为Docker已经在生产环境广为使用。事实上,这是不对的。注意Docker还是很新的技术,还不成熟,正在成长,这意味着还有很多烦人的bug和缺乏的功能。对新技术感兴趣这没错,但是最好要弄清楚新技术的正确使用场景和需要注意和妥协之处。现在,Docker很容易应用到开发环境。使用Docker可以很容易地搭建出很多不同的环境(至少,给人的感觉是能够搭建出不同的环境),这对于开发很有用。

而在生产环境里,新技术的成长阵痛限制了使用场景。比如,Docker不直接支持对多机器的网络和资源的监控,这使得几乎无法用在生产环境里。当然也有很多有潜力的地方,比如可以将同一个package从开发环境直接部署到生产环境。还有一些Docker运行时特性对于生产环境也很有用。但是总的来说,在生产环境里,目前限制多于优势。这并不是说无法成功运用到生产环境,只是现在还不能指望它一下子成熟和完备。

4. Docker是跨OS的

另一个误解是Docker在任意操作系统和环境上都可以工作。这可能来自于装卸货物的集装箱的类比,但是软件和操作系统的关系可不像船位那么直接。

实际上,Docker只是Linux上的技术。并且Docker依赖特定的内核特性,必须要有最新版本的内核才行。基于不同OS的差异性,跨OS时,如果使用的不是最底层通用的特性,会遇到严重的问题。这些问题可能只有1%的发生率,但是当你在多台服务器上部署时,1%也是致命的。

虽然Docker只在Linux上运行,但是也可以在OS X或者Windows上使用Docker。使用 boot2docker 会在OS X或Windows机器上运行一个Linux虚拟机,这样Docker可以在这个虚拟机里运行。

5. Docker增强应用的安全性

觉得Docker可以改进代码和交付代码过程的安全性,这也是误解。这也是真实的集装箱和软件上容器的差别。Docker是一种容器化技术,添加了编排方法。但是Linux的容器有一些安全漏洞可能会被攻击。Docker并没有为这些漏洞添加任何安全层或者补丁。它还不是能保护应用的铁布衫。

从Java角度看

Docker在Java开发人员中已经有些应用。Docker的某些特性让我们更容易构建可扩展的上下文。不像 uber-jar ,Docker可以帮助你将所有的依赖(包括JVM!)打包到一个随时可发布的镜像里。这是Docker吸引广大开发人员的重要特性。但是,这也会带来一些隐患。一般来说,程序员需要用不同的方式和代码交互 - 监控它,调试它,链接它,调优它。。。如果使用Docker,这些都会需要额外的工作。

比如,我们想使用 jconsole ,它依赖于JMX功能,JMX因为要使用RMI又需要网络。使用Docker的话就不是很直接,需要 一些技巧 去开启所需端口。我们最初发现这个问题是当我们想要构建 Takipi 的Docker安装器,我们不得不在容器里JVM之外运行了一个后台程序。详细的解决方案在 GitHub 上。

另外一个很严重的问题是Docker容器的性能调优相当困难。当使用容器时,你不知道每个容器到底会分配多少内存。如果你有20个容器,内存会以你不确定的方式分配给它们。如果你打算用参数-Xmx调优堆的大小,就很困难,因为对Docker容器内JVM的处理取决于能够自动得到该容器分配到的内存大小。如果都不知道分配了多少内存,性能调优几乎不可能。

结论

Docker是很有意思的技术,有一些真实有效的使用场景。作为一个新兴技术,还需要大量时间来解决缺失的功能和已知的bug。但是,现在这个领域的确有很多的炒作。不过记住哦,炒作可不是成功~

原文链接:Ignore the Hype: 5 Docker Misconceptions Java Developers Should Consider(翻译:崔婧雯)
===========================
译者介绍
崔婧雯,现就职于VMware,高级软件工程师,负责桌面虚拟化产品的质量保证工作。曾在IBM WebSphere业务流程管理软件担任多年系统测试工作。对虚拟化,中间件技术有浓厚的兴趣。

本文转载自:http://www.dockerone.com/article/236

共有 人打赏支持
XDocker
粉丝 0
博文 8
码字总数 1285
作品 0
昌平
架构师
拯救 Java 开发者,用 Docker 将 Java 应用进行现代化改造(完结篇)

本文首发自“Docker公司”公众号(ID:docker-cn) 编译丨小东 每周一、三、五 与您不见不散! 将整体应用程序迁移到现代化的云架构上可能会十分困难,而且对于开发人员来说往往需要花费额外...

docker公司
04/20
0
0
JVM性能调优实践——JVM篇

前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践...

lijingyao8206
05/24
0
0
Java程序员需要注意的五大Docker误区

Docker现在很火,容器技术看上不无所不能,但这实际上是一种误解,不要被炒作出来的泡沫迷住双眼,本文抛去炒作,理性地从Java程序员的角度,列举出Docker目前的五大误区,帮助你更好地理解D...

紫魅编程
2016/09/12
341
1
使用Docker搭建Java环境

准备 首先需要准备一个CentOS的操作系统,虚拟机也可以。具体配置要求如下: 必须是64位操作系统 建议内核在3.8以上 安装Docker 只需要通过以下命令即可安装Docker软件 yum -y install docke...

qq_16030133
04/18
0
0
使用Docker运行Java应用程序

使用Docker运行Java应用程序 部署软件混乱; 需要克服许多问题才能生成顺畅且无痛的部署过程。诸如环境设置,依赖性地狱,编排管理以及系统可用性等问题是部署新应用程序时遇到的许多问题中的...

优惠券发放
05/30
0
0
加强Docker容器与Java 10集成

很多运行在Java虚拟机(JVM)中的应用,包括数据服务如Apache Spark和Kafka以及传统企业应用,都运行在容器中。最近,运行在容器里的JVM出现了由于内存和CPU资源限制和使用率导致性能损失问题...

java高级架构牛人
06/04
0
0
Ubuntu下搭建JAVA运行环境

(一)Linux操作系统安装(详细信息参见:http://my.oschina.net/u/1458864/blog/366665) 1.安装Oracle VM VirtualBox 2.安装vagrant 3.下载box 4.vagrant添加box到虚拟机中(http://my.osch...

飓风2000
2015/01/27
0
2
Docker入门与实战系列:深入

Docker入门与实战——《Docker ABC》电子书 https://github.com/gudaoxuri/DockerABC 8. 高级 本节我介绍如何自己构建一个Docker镜像,我们将构建一个支持scala的运行( http://www.scala-l...

孤岛旭日
2015/11/07
0
0
Docker企业版2.0发布,着力提升Kubernetes支持能力与安全性

经过数个月的积极开发,目前Docker企业版(简称Docker EE)的稳定发行版已经能够全面支持Kubernetes。 Docker公司于4月17日正式发布了Docker EE 2.0的相关消息,其中增加了Docker社区版(简称...

Docker
04/19
0
0
JAVA项目如何通过Docker实现持续部署

本篇实操性的案例讲解——JAVA项目如何通过Docker实现持续部署(只需简单四步), 即:开发通过git push上传代码,经Git和Jenkins配合,自动完成程序部署、发布,全程无需运维人员参与。 这是一...

菜鸟东哥
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部