Docker出现的原因

  1. 在开发的过程中,我们常常会遇见这样的问题:代码在我的电脑上还运行得好好滴,怎么到另外一台电脑上就报错了呢?这里就涉及到了环境的问题。产品上线需要开发人员和运维人员。按照传统的做法,开发人员只需将代码打包发送给运维人员。运维人员为了代码能够在自己的电脑上成功运行,就不得不逐个手动环境配置 。整个过程非常麻烦(配置五小时,运行一分钟),严重降低开发效率。
  2. 我们从商店下载应用程序运行,希望能够直接运行,而不是还要部署上层依赖。

Docker的出现

Docker概述 - 图1

  1. Docker通过集装箱机制,将代码和环境配置封装在一起,很好地解决环境一致性问题,更有益于应用迁移。
  2. Docker的隔离机制,保证了各个部分安全地运行,提高了效率
  3. 更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  4. 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效

Docker能做什么

以前地虚拟化技术:虚拟出整个电脑
内核+ 全部的ib+app
image.png
虚拟技术的缺点:

  1. 占用的资源特别多。
  2. 启动慢,同时运行的数量少
  3. 冗余的步骤很多。


    容器化技术
    容器化技术并不模拟出一个完整的操作系统
    image.png
    比较docker和虚拟化技术的不同:

  4. 传统的虚拟机,虚拟出一条硬件,一个完整的操作系统,并在这个操作系统上安装和运行应用程序。

  5. 容器内的应用直接运行在宿主机的内容上,它不虚拟硬件,也没有内核,更加轻便。
  6. 每个容器之间都是相互隔离,没有接口。每个容器都有一个属于自己的文件系统,互不影响。

DevOps(开发 运维)

  1. 应用更快速地交付和部署

传统:一大堆的帮助文档,安装程序
docker: 打包镜像发布测试,一键运行

  1. 更便捷地升级和易扩缩容

传统:当应用要升级的时候,会对环境等进行逐个升级,操作麻烦
docker:对镜像进行整体升级就可以了
传统:扩缩容需要考虑各种环境配置问题,以及各部分之间的影响。
docker:虽然公用内核,但是因为隔离机制,直接添加镜像就可以了。

  1. 更简单的系统维护

传统:开发人员只给jar/war包,运维人员要自己处理环境配置等问题(十分麻烦
docker:开发人员和运维人员的环境高度一致,一键运行,系统维护更加简单

  1. 更高效地计算机系统资源利用

传统:虚拟一条硬件,一个完整地操作系统,占用资源很多而且步骤冗余
docker:内核级别的虚拟化,可以在物理机上运行很多容器实例,服务器的性能得到进一步提升。