文档章节

[每日一题]Docker解决了什么问题?

UlricQin
 UlricQin
发布于 2014/09/26 10:16
字数 1051
阅读 6680
收藏 140

这段时间Docker实在是如日中天,到处都是它的信息,你认为它解决了什么问题?有哪些应用场景?

这个问题显然没有标准答案,面试官只是想看看你是否有自己的想法,是否对新技术保持敏感,如果你的观点跟面试官不谋而合,绝对加分啊:)

下面都是笔者个人看法,轻拍~

1、程序在我这跑得好好的,在你那怎么就不行呢?! 这是一个典型的应用场景,Docker image中包含了程序需要的所有的运行时依赖,比如java的程序,肯定要在image中包含jdk;比如Python的程序,肯定要在image中包含对应版本的Python解释器。程序在我这跑得好好的,去你那就不行了,显然是环境问题。Docker把整个运行时环境打包放到image中,所以搞定了环境依赖问题

这点很重要么?真的很重要!如果你做过部署或发布系统将会对此感触颇深。

我们知道,一个程序要跑起来,需要这么几部分:代码 + 运行环境 + 配置 + 依赖的服务。代码当然就是同一份代码,不同的环境都一样,通常不会有问题,Docker image中包含了运行环境+配置,这对部署相当友好。如果你没有做过这种系统(其实大部分人都没有做过啦),但是你肯定装过软件,装一些复杂的软件的时候有没有因为版本依赖或者编译参数等让你抓狂?用了Docker再也没有这种问题了:

docker pull xxx; 
docker run xxx; 
done:)

所以总结起来就是:Docker解决了运行环境和配置问题,方便发布,也就方便做持续集成

2、系统好卡,肯定是又有哪个哥们的程序在作孽了 现在的服务器都牛的很,动不动128G内存,24个CPU,Linux本身就是个多租户的操作系统,可以多人共用,但是如果某个程序狂吃内存和CPU,占用了太多系统资源,这就会影响其他程序的运行。

一个公司的几个同事共用一台机器出现这种问题可以通过内部协调沟通解决。但是云主机提供商呢?不同的用户之间不认识,共用一台强大的计算机,结果某个程序耗尽了资源,用户肯定不乐意了。

所以虚拟机出现了,良好了做了资源隔离,不同用户之间彼此老死不相往来,不会相互影响,世界一下子清静了。但是,虚拟机有缺点:创建速度慢,迁移起来麻烦,因为中间加了一层guest os,有了性能损耗,一个牛逼的机器也就创建十几个虚拟机,太浪费了……

相对虚拟机的重量级虚拟化方案,Linux内核级的一些隔离方案让人们看到了希望,cgroups、namespace、tc、quota、chroot、lxc,终于,Docker出现了,Docker利用这些成熟的技术,让虚拟化变得轻量了起来,创建一个container瞬间完成,秒级!cpu指令集不再被翻译执行,性能损耗非常少,虽说隔离性没有虚拟机那么彻底,安全性上稍差一些,但也基本可以用,不用太担心:)

所以总结起来就是:更轻量的虚拟化,节省了虚拟机的性能损耗

上面两点是Docker解决的问题,那它有哪些应用场景呢?

其实从上面的描述中也基本可以窥其一二了

  • 1、程序分发,gitlab的安装很恶心吧,所以有人做了gitlab的image
  • 2、部署发布,这点对运维的同学很有帮助
  • 3、PaaS,tsuru、flynn都是基于Docker的,CloudFoundry也要从warden迁移到Docker,不解释

偶尔跟面试官侃点高大上的话题,惊死他!O(∩_∩)O哈哈~ 本文来自微信公众号:【it面试题】it_mianshiti

© 著作权归作者所有

UlricQin

UlricQin

粉丝 152
博文 18
码字总数 27238
作品 4
昌平
技术主管
私信 提问
加载中

评论(16)

Glaucus
Glaucus
不错不错,非常不错
xi惯
xi惯
点赞
Crazy罗小杰
Crazy罗小杰
待应用到实际场景
西夏一品堂
西夏一品堂
感觉没解决什么问题啊
fate-testarossa
fate-testarossa
我觉得docker暂时不适用于高新能计算吧
haitaosoft
haitaosoft
就是 轻量级的虚拟机。。。。
虚拟机就解决了1,轻量级(共用系统文件、内存)就解决了2。。。。
c
chuna_2001
有里
kingvax
kingvax
通俗易懂,很好!
zhanglei340
zhanglei340
总结的很好
无悔这一生
无悔这一生
前些时候还对docker的作用有些疑惑,看了博主的文章,感觉有那么点意思了
【Java每日一题】20161018

20161017问题解析请点击今日问题下方的“【Java每日一题】20161018”查看 今日问题: 请问主程序输出结果是什么?(点击以下“【Java每日一题】20161018”查看20161017问题解析) 题目原发布...

weknow
2016/10/18
5
0
【Java每日一题】20161110

20161109问题解析请点击今日问题下方的“【Java每日一题】20161110”查看 今日问题: 请问主程序输出结果是什么?(点击以下“【Java每日一题】20161110”查看20161109问题解析) 题目原发布...

weknow
2016/11/10
2
0
【Java每日一题】20161108

20161107问题解析请点击今日问题下方的“【Java每日一题】20161108”查看 今日问题: 请问注释1处输出结果是什么?(点击以下“【Java每日一题】20161108”查看20161107问题解析) 题目原发布...

weknow
2016/11/08
16
0
【Java每日一题】20161027

20161026问题解析请点击今日问题下方的“【Java每日一题】20161027”查看 今日问题: 请问主程序输出结果是什么?(点击以下“【Java每日一题】20161027”查看20161026问题解析) 题目原发布...

weknow
2016/10/27
10
0
【Java每日一题】20161201

20161130问题解析请点击今日问题下方的“【Java每日一题】20161201”查看 今日问题: 请问主程序输出结果是什么?(点击以下“【Java每日一题】20161201”查看20161130问题解析) 题目原发布...

weknow
2016/12/01
8
0

没有更多内容

加载失败,请刷新页面

加载更多

Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
54分钟前
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
今天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
今天
2
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部