zoukankan      html  css  js  c++  java
  • Docker(转载)

    segment上的大神 吴yh坚 对容器有个比较透彻的说明,感兴趣的可以读一下下文:

    https://segmentfault.com/a/1190000006245007

    容器,目前最火的话题了,在后端的开发中,容器的运用也已经是主流技术了,今天,我们就来说说容器技术,之前我对这一块的了解不是很多,但是最近有些特殊原因转成运维工程师了,而公司的全线服务都是docker的,以一个开发人员的习惯,转成运维以后,还是想对这种东西总想深入了解一下,于是看了不少相关资料并且看了一下docker的源代码,发现这东西确实很厉害,和之前脑中的docker印象完全不同,于是有了这篇文章。

    先说结论,容器真的很好,很轻量级,功能又很重量级。

    前言
    首先,虽然目前docker技术如此火爆,但是其实容器技术本上并不是什么高大上的东西,总的来讲,就是对目前的Linux底层的几个API的封装,然后围绕着这几个API开发出了一套周边的环境。

    之前所有的讲关于容器的文章,一开始就开始讲UTC隔离,PID隔离,IPC隔离,文件系统隔离,CGroups系统,今天这一篇,我们换一个视角,我们从以下几个方面来说一下容器技术。

    首先,我们从容器和虚拟机说起,都说容器是非常轻量级的,那么和虚拟机比起来,到底轻在什么地方呢。

    第二部分,我们会通过一步一步的说明,通过构造一个监狱,来说明如何建立一个简单的容器,会涉及到容器的各种技术,当然还有一些没有涉及到的,我认为不影响理解。

    第三部分,我们会通过代码实战一把,看看如何一步一步按照第二部分的说明启动一个容器并运行自己的代码,这一部分的全部代码都在github上。

    最后,我会再说一下docker技术,因为docker从代码来看,容器技术只是他的一小部分,完整的docker远比单纯的容器要复杂,我会简单的说一下我对docker的理解,包括docker使用的其他技术点。

    容器和虚拟机
    要说容器,跑不了和虚拟机进行比较,虚拟机是比较古老的技术了,虚拟机的架构图如下所示。

     

    虚拟机核心是什么?是模拟硬件,让虚拟机的操作系统以为自己跑在一个真实的物理机器上,用软件模拟出来CPU,内存,硬盘,网卡,让虚拟机里面的操作系统觉得自己是在操作真实的硬件,所以虚拟机里面的CPU啊,内存啊都是假的,都是软件模拟出来的(现在有硬件虚拟化技术了,比纯软件模拟要高级一些,但操作系统不管这些),既然操作系统都骗过去了,当然跑在操作系统上的进程同样也骗过去了呗,所以这些进程都完全感知不到底层硬件的区别,还以为自己很欢乐的跑在一台真实的物理机上了。

    那么容器又是什么鬼呢?容器的架构图如下(这张图网上找的,侵权马上删)

     

    和虚拟机一个很明显的区别就是容器其实并没有模拟硬件,还是那个硬件,还是那个操作系统,只不过是在操作系统上做了一点文章【这张图中就是docker engine了】,让进程以为自己运行在了一个全新的操作系统上,有一个很形象的词来描述他就是软禁!就是把进程软禁在一个环境中,让进程觉得自己很happy,其实一切尽在操作系统的掌控之中,其实虚拟机也是,虚拟机是把操作系统软禁起来了,让操作系统觉得很happy,容器是把进程软禁起来,你看,一个是软禁操作系统,一个是软禁进程,这两个明显不是一个级别的东西,谁轻谁重不用说了吧。

    既然容器和虚拟机的区别在于一个是通过模拟硬件来软禁操作系统,一个是通过做做操作系统的手脚来软禁进程,那么他们能达到的效果也是不一样的。

    对于虚拟机来说,既然是模拟的硬件,那么就可以在windows上装linux虚拟机了,因为反正是模拟硬件嘛,虚拟机内部的操作系统也不知道外面的宿主机是什么系统。

    容器就不一样了,因为是在操作系统上做文章,所以不可能在linux上装windows了,并且还有一点就是,容器内的操作系统其实就是外面宿主机的操作系统,两者其实是一个,你在容器内用uname -a看到的内核版本和外面看到的是一样的。本质上容器就是一个进程,他和宿主机上任何其他进程没什么本质的区别。

    作者:天际使徒
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    linux redis安装 5.0.2
    Linux nginx安装步骤 centos7
    fastjson JSONObject.toJSONString 出现 $ref: "$."的解决办法(重复引用)
    docker redis安装及配置(外网访问 关闭安全限制 设置密码)
    JDK dump
    mysql8 修改root密码
    docker系列详解<二>之常用命令
    获取地理位置
    js调用摄像头
    点击时扩散效果
  • 原文地址:https://www.cnblogs.com/Horizon-asd/p/14142207.html
Copyright © 2011-2022 走看看