Docker,容器,虚拟机和红烧肉

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

Docker是什么?容器又是什么?

Docker 直译:码头工人。是在码头上搬运货物的工人
容器 英文:Container,如果再翻译回来就有2个不同的释义:集装箱/容器。

如果按照这世界上大多数正常人的理解,大家会把 Docker(码头工人)和 Container (集装箱)这一对事物放在一起,他们的关系一目了然:码头工人搬运集装箱。但是如果按照这世界上另外的一类人(程序员)的理解,我们会这样组合 ,Docker (代码集装箱搬运工)和 Container (容器)。

Docker与容器是完全2个不同的东西,Docker是用来组装/搬运/拆包容器的工具。当然也可以是人,我们原来这些苦逼的程序员谁没干过zip/copy/paste/unzip的工作呢?其实Docker就是这样一个工具,用来打包 (build)/传送(push/pull)/拆包 (run) 那些需要运行的应用。而容器就是那个包。

docker-concept

那么容器又是什么?

其实和集装箱很类似,就是把那些需要放在一起从A地运送到B地运行的,不能和其他程序混杂的代码封装成的一个包而已。这个概念从计算机出现的那天基本上就存在了,只是这么多年我们一直在不停的改进,但从来没有一个像docker这样的工具让容器的使用变的如此简单。在Unix/Linux的世界里,它曾将叫做 Process Container,现在被称为Control Group (cGroup);在Windows世界里,我们曾经有组件。他们的目的都一样,为了把程序从A地运送到B地,同时确保他们可以相互隔离的运行。

Docker绝对不等同于容器。一个是干活的人,一个是被搬运的物品,能一样吗?但是我仍然在各种技术文章,会议演讲上看到和听到将他们混为一谈的说法。实在觉得需要给他们正名,也是今天写这个文章的主要原因。

Docker,容器与虚拟机有啥区别?

在每一篇介绍Docker的文章里面都会看到与虚拟机比较的内容,其实我觉得这完全是拿苹果和香蕉比较,它们完全不具备可比性,至少在技术上!
大家为啥要这样比较,主要目的是让那些不了解IT但是却在管理IT的人(对,就是你的领导和你的客户)理解为啥他们好不容易,花了n多钱建立起了虚拟化平台/私有云,现在还要再花钱搞容器,搞docker。对的,这纯粹是个市场行为,与技术无关,因为他们在技术上不具备可比性。
惯常的说法,容器启动迅速(对,它只需要加载那些当前应用的进程)虚拟机启动缓慢(废话,它要加载一堆和应用无关的进程好吗)。你试试把100个应用打包到一个容器里面然后启动它,估计你一定会被98%的Windows用户打败。
给你一个hyper-v, vmware, kvm你跑不了容器,你还是需要在上面启动虚拟机,然后才能运行容器。就好像你要在家里提供100个品类的菜单,然后让你儿子每天回来点餐,给他个沙漏,然后说你随便点,我保证在10分钟内上菜。你当你是谢霆锋呢?人家谢大厨后面有10个帮厨,10个采购,10个餐厅经理,10个服务员,做的菜都是提前腌制的。你就算有三头六臂也只能说:臣妾做不到啊!
所以,容器之所以快,是把每次都要启动操作系统的操作预先完成了,这样只需要启动应用本身而已。而且,容器不会比直接启动一个应用快,甚至还会更慢一点。

然并卵,那我要这七十二变有何用?

牢骚发够了,还是说说Docker到底有啥用?Docker这个搬运工与其他搬运工不同的是,他在组装容器的时候会把应用需要的其他配件都放在一个集装箱里。这样,集装箱到货以后,直接开包就可以完成应用组装;不用再到其他地方七拼八凑的去找各种配件了。这就好比你想做红烧肉,原来的应用打包只给你打包了肉(应用),别的什么八角,香叶,冰糖,生抽老抽(应用依赖环境)都不带;现在商家提供一站式服务,一个包里不光有肉,还有七七八八所有的东西。你家里有炉子,有锅就够了(操作系统)。
另外,Docker厉害的地方在于,它不光提供了这些配料,还把物流给你搞定了。我们现在可以直接向商家(Docker Hub)下单,商家送货上门(Docker Pull),你准备好炉子和锅(操作系统),直接下锅(Docker Run),菜就上桌喽。

最后,用一句话定义Docker,那就是:优化应用运维过程的工具和生态系统。

晚上吃红烧肉!祝大家胃口好!

hongshaorou

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac终端操作文件或文件夹(持续更新)

1、复制文件夹(有文件) cp -R 要复制的文件 要复制到哪个路径 2、复制文件 cp 要复制的文件 要复制到哪个路径 3、移动文件夹 mvdir 你要移动的文件夹 要移动到哪里

前端进阶系列(六):盒模型

盒模型是界面布局需要掌握的基本功。盒模型基本概念 盒模型四要素:margin、border、padding、content。 盒模型分为:标准盒模型(W3C盒模型) 、 怪异盒模型(IE盒模型) 盒模型区别 怪异盒模型总宽度 content…

holer实现外网访问内网数据库

外网访问本地数据库 本地安装了数据库,只能在局域网内访问,怎样从公网也能访问内网数据库? 本文将介绍使用holer实现的具体步骤。 1. 准备工作 1.1 安装并启动数据库 默认安装的数据库端口是3306。 2. 实现步骤 2.1 下载并解压holer软件包 Ho…

Docker 概念解析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Docker的功能定位Docker为基于Linux容器的开源项目,其利用Linux内核中的各项功能——例如命名空间与控制组——以在操作系统之…

C语言 常用API

MySQL的C语言API接口 1、首先当然是连接数据库,函数原型如下: MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long …

hadoop生态搭建(3节点)-10.spark配置

# https://www.scala-lang.org/download/2.12.4.html# 安装 scala tar -zxvf ~/scala-2.12.4.tgz -C /usr/local rm –r ~/scala-2.12.4.tgz # http://archive.apache.org/dist/spark/spark-2.3.0/ # 安装 spark tar -zxf ~/spark-2.3.0-bin-hadoop2.7.tgz -C /usr/local mv /u…

持续集成coding

1、安装docker yum -y install docker yum -y install composer yum -y install docker-compose 2、启动docker服务 service docker start 3、测试安装结果 docker-compose --version 4、创建目录 mkdir /data/continus-deploy 5、写入docker-compose.yml version: …

JSON字符串转换为Map

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 本文是利用阿里巴巴封装的FastJSON来转换json字符串的。例子如下: [java] view plain copy package com.zkn.newlearn.json;…

排序与查找 详细分析

C语言五种基本排序算法 程序员可以使用的基本排序算法有5种: 插入排序(insertionsort.)交换排序(exchangesOrt)选择排序(selectionsort)归并排序(mergesort)分布排序(distributionsort) 为了形象地解释每种排序算法是怎样工作的,让我们来看…

《Netkiller Spring Cloud 手札》Spring boot 2.0 mongoTemplate 操作范例

2019独角兽企业重金招聘Python工程师标准>>> 本文节选自 《Netkiller Spring Cloud 手札》 Netkiller Spring Cloud 手札 Spring Cloud Cookbook Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市望海路半岛城邦三期 518067 86 13113668890<netkillermsn.com> …

ZooKeeper原理及使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ZooKeeper是Hadoop Ecosystem中非常重要的组件&#xff0c;它的主要功能是为分布式系统提供一致性协调(Coordination)服务&#xff0c;与…

自律只需要这篇文章

1. 钻研&#xff0c;只要你有一个方面特别优秀&#xff0c;则在这个社会就足够了,能够吃一辈子 2. 领悟&#xff0c;需要的时候&#xff0c;别人给你只是一个具体的方向&#xff0c;具体的路还是要自己去设计 3. 执行力&#xff0c;晚上喜欢想想没有小本本记录&#xff0c;那么…

数据和文件操作

怎样用C语言对某个目录下的文件名进行排序? 在4&#xff0e;8的例子中&#xff0c;用_dos_findfirst()和_dos_findnext()函数遍历目录结构&#xff0c;每找到一个文件名&#xff0c;就把它打印在屏幕上&#xff0c;因此&#xff0c;文件名是逐个被找到并列出来的。当你对某个目…

这些年来什么才是最好的投资?

这些年&#xff0c;就是从我毕业&#xff08;2006&#xff09;以后... 聊投资&#xff0c;不免说股市&#xff1b;股市平时没什么人谈&#xff0c;一般暴涨暴跌时大家的谈兴就起来了。而最近这一周&#xff0c;全球股市都开启了暴跌模式&#xff0c;让投资者亏损惨重&#xff0…

electron安装比较慢的方法

ELECTRON_MIRROR"https://cdn.npm.taobao.org/dist/electron/" npm install electron

vim 正则非贪婪模式

比如多匹配使用 .* 效果自然是贪婪模式&#xff0c;JS 的非贪婪很简单&#xff0c;是 .*? 即可&#xff0c;而 vim 不同&#xff0c;语法是 .\{-}&#xff0c;注意 \ 转义。 转载于:https://www.cnblogs.com/ZweiZhao/p/10062543.html

循环结构 案例分析

怎样才能知道循环是否提前结束了 循环通常依赖于一个或多个变量&#xff0c;你可以在循环外检查这些变量&#xff0c;以确保循环被正确执行。请看下例&#xff1a;int xchar * cp[REQUESTED_BLOCKS]/ * Attempt (in vain, I must add... )toallocate 512 10KB blocks in memory…

工作中常用的但是又容易忽略的问题

个人平时总结 Document 对象 每个载入浏览器的 HTML 文档都会成为 Document 对象。 Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。 提$(document)是一个选择器&#xff0c;选中的是整个html所有元素的集合示&#xff1a;Document 对象是 Window 对象的一…

JAVA经典面试题汇总(保存这篇就够了)

一. java基础篇 1.final 关键字的作用? 被 final 修饰的类不可以被继承。被 final 修饰的方法不可以被重写。被 final 修饰的变量不可以被改变&#xff0c;如果修饰引用&#xff0c;那么表示引用不可变&#xff0c;引用指向的内容可变。被 final 修饰的方法&#xff0c;JVM …