• Docker容器与虚拟机有什么区别


    概述:

    Docker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

    Docker解决的主要问题

    有过后台开发经验的同学,一定遇到过下面这些问题:

    程序在开发环境跑得好好的,但是部署到生产环境,却状况频出;

    假设某个程序要在客户的环境上进行部署,虽然在自己的环境上部署、验证成功,但始终担心客户的环境上缺少某些必要的库文件,或者某些文件的版本不符合要求;

    那么,有了docker,这些问题都将不复存在。

    什么是Docker

    Docker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

    如果不好理解,我们再拿集装箱打个比方。

    集装箱解决了什么问题呢?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

    docker也是类似的理念。我们可以在一台机器上跑多个互相毫无关联的docker容器,每一个容器就相当于一个集装箱。

    Docker里的几个基本概念

    • 镜像

    镜像可以理解为一堆静态的文件

    • 容器

    容器则是镜像run起来之后的一个实例。镜像之于容器就好比面向对象编程里的class之于object。

    • 仓库

    镜像需要地方保存,这个地方就是仓库

    与传统虚拟化的区别

    这里我们顺便讲一下传统虚拟化。

    我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Dokcer则是在OS的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。

    虚拟化与docker的区别

    docker设计小巧,部署迁移快速,运行高效,应用之间相互独立,管理人员可以看到所有容器的内容,虚拟化技术比较臃肿,不论什么应用都需要先创建新的系统,并且并非按照应用隔离,而是按照系统隔离,管理员无法看到系统内部信息。

    举个例子,Docker就是手机中的各种APP,只需要一个系统就可以下载自己所需的应用,但是虚拟化技术相当于你的苹果手机安装一个庞大软件,这个软件上安装安卓系统、魅族系统等,每个系统上还要安装各类应用,比较麻烦。

    但两者没有绝对的好坏,主要还是看应用场景,根据不同的需求选择不同的解决方案即可

     虚拟机和docker区别:

    1.资源:vmwre是系统级对整个系统硬件分割,docker是进程级占用资源少
    2.启动:vmwre启动需要几分钟,docker是秒级

    3.部署速度:docker比vmwre快很多

    4.移植性方面:Docker容器轻便、灵活、适应于Linux,而虚拟机相对笨重,与虚拟化技术的耦合度非常高,因此移植性相对较差。

    docker相当于vmwre,镜像相当于虚拟机的镜像盘,实际运行的虚拟机相当于docker的容器
     
     

    为什么使用Docker?

    优点:

    • 一致的运行环境
    • 更快启动速度
    • 隔离性
    • 弹性伸缩、快速扩展
    • 迁移方便
    • 持续交付和部署
    • 开发人员和运维人员职责分离

    缺点:

    • 安全性不如虚拟机
    • 隔离性不如虚拟机
    • 大规模不易管理
    • 排查问题困难
    • 不支持Windows
     
     
    #——————————————docker作用/用途/用于场景——————————————————————————————————————————————
    1)测试:Docker 很适合用于测试发布,将 Docker 封装后bai可以直接du提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。
    2)测试数据分离:在测试中,经常由于测试场景变换,需要修改依赖的数据库数据或者清空变动 memcache、Redis 中的缓存数据。Docker 相较于传统的虚拟机,更轻量与方便。可以很容易的将这些数据分离到不同的镜像中,根据不同需要随时进行切换。
    3)开发:开发人员共同使用同一个 Docker 镜像,同时修改的源代码都被挂载到本地磁盘。不再因为环境的不同而造成的不同程序行为而伤透脑筋,同时新人到岗时也能迅速建立开发、编译环境。
    4)快速部署:Docker通过创建流程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。
    5)应用隔离:有很多理由你需要在一台机器上运行多个应用,这就需要将原来铁板一块monolithic的应用切分为很多微服务。实现应用之间的解耦,将多个应用服务部署在多个Docker中能轻松达到这个目的。
    6)持续集成:Docker可以快速创建和撤销容器,在持续集成的环境中,可以频繁和快速地进行部署和验证工作。
     
  • 相关阅读:
    ubuntu16.04安装opencv3.4.0
    基于flask+gunicorn+nginx来部署web App
    ubuntu更换pip install,apt-get,conda install 成国内源
    Ubuntu16.04安装编译caffe以及一些问题记录
    Tutorial for MI5 ! flash MI5 to Native Anriod 9
    在服务器上实现SSH(Single Stage Headless)
    .NET Core容器化开发系列(一)——Docker里面跑个.NET Core
    .NET Core容器化开发系列(零)——计划
    基于.NET Standard的分布式自增ID算法--美团点评LeafSegment
    基于.NET Standard的分布式自增ID算法--Snowflake代码实现
  • 原文地址:https://www.cnblogs.com/chen-xia/p/13785430.html
Copyright © 2020-2023  润新知