• Docker到底是什么


    Docker

    要解释清楚Docker,首先要解释清楚容器的概念;而要解释容器,需要从操作系统说起。

    维基百科:操作系统就是管理计算机的硬件、软件和资源,并且为软件运行提供通用服务的系统软件。

    硬件管理:包括分配CPU时间、内存;从网络、存储设备等IO设备读写数据。

    软件管理:就是各种软件的运行,线程、进程调度之类的工作。

    为软件提供运行环境:通常一部分由操作系统内核提供,另一部分由运行库提供。

    应用程序、操作系统、硬件之间的层级关系如下:

    在这里插入图片描述

    随着硬件的性能提升和软件种类的丰富,两种情况很常见:

    1. 硬件性能过剩:很多计算机的硬件配置,即使不能完全满足峰值性能的要求,往往会有大量时间处于硬件资源闲置状态。
    2. 软件冲突:各个软件之间可能会出现冲突。

    早期时代为了解决软件冲突,一般是配置多台计算机(成本太高)或者在同一台电脑上安装多个操作系统(操作系统的安装、切换麻烦)。在硬件性能过剩的时候,硬件虚拟化的普及就自然而然提出了。

    硬件虚拟化:某个特殊的软件,仿真出一台或者多台计算机的各种硬件,俗称虚拟机,用户可以在这一台虚拟机上安装、运行操作系统和各种应用。

    虚拟机的一个缺点就是Guest OS通常会占用不少硬件资源。比如在虚拟机上运行Windows或者Linux,不运行任何其他应用,就需要占用一定的内存空间和硬盘空间。当同时运行比较多的虚拟机的时候,浪费的硬件资源就非常可观了。

    [注]Host OS指的是安装在你计算机上的系统,而Guest OS指的是安装在虚拟机上的系统。

    能不能所有的应用使用同一个的操作系统减少硬件资源的浪费,但是又能避免包括运行库在内的软件冲突呢?操作系统层虚拟化—容器概念诞生了。在Linux中可以通过控制组隔离,并把应用和运行库打包在一起,来实现这个目的。

    每一个应用和运行库的组合,就是一个容器,也就是Docker里面的一个集装箱。

    和虚拟机相比,容器有以下优点:

    1. 迅速启动:没有虚拟机硬件的初始化,没有Guest OS的启动过程,可以节约很多启动时间,这就是容器的“开箱即用”。
    2. 占用资源少:没有运行Guest OS所需的内存开销,无需为虚拟机预留运行内存,无需安装、运行应用不需要的运行库/操作系统服务。

    当然,和虚拟机相比,因为共用内核,只靠控制组隔离,应用之间的隔离不如虚拟机彻底,如果某个应用运行时导致内核崩溃,所有的容器都会崩溃;而虚拟机内的应用崩溃,理论上时不会影响其他虚拟机以及上面运行的应用。

    Docker把应用和运行库的文件打包成一个镜像,并且采用类似多次快照的存储技术,可以实现:

    1. 多个应用共用相同的底层镜像
    2. 应用运行时的IO操作和镜像文件隔离
    3. 通过挂载包含不同配置/数据文件的目录或者卷,单个应用镜像可以同时用来运行无数个不同业务的容器。

    此外,Docker公司提供公共的镜像仓库,连接操作,自动构成镜像,大大简化了应用分发、部署、升级流程。加上Docker可以非常方便的建立各种自定义的镜像文件,这些都是Docker成为最流行的容器技术的重要因素。

    通过上述技术的组合,绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,通过docker pull下载镜像,使用docker run运行应用。用户不需要去关心如何搭建环境、如何安装、如何解决不同发行版的库冲突,而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是docker标准化、集装箱的原因所在。

    参考文章

    知乎:木头龙

    如何通俗易懂解释Docker

  • 相关阅读:
    cesium wgs84 经纬度转笛卡尔坐标
    GoFrame+Vue+ElementUI管理后台源码
    迭代器模式c++实现
    OnlyOffice集成Springboot以及web端
    Android网络框架(三)——iptables
    开发与产品的战争之自动播放视频
    【Mac】破解死循环,成功安装 Homebrew、curl、wget,快速配置 zsh
    超全整理,性能测试——数据库索引问题定位+分析(详细)
    JAVA毕业设计Internet快递柜管理系统计算机源码+lw文档+系统+调试部署+数据库
    python之lambda表达式
  • 原文地址:https://blog.csdn.net/weixin_51703174/article/details/127453770