为什么会出现docker?

  1. 开发,上线两套环境部署麻烦,容易出问题
  2. 减少配置,像一个集群,每一个机器都需要配置很麻烦
  3. 可以打包项目带上环境,别人拉取镜像,直接运行即可
  4. 多个应用可能出现端口冲突,docker可以隔离应用,最大化利用资源

传统虚拟机与 docker运行结构图

docker jar 依赖包 docker运行jar和直接运行jar_docker

docker和虚拟机技术区别?

对比项

虚拟机

Docker

隔离性

较强

强,容器隔离,有自己的文件系统

计算机资源

完整的操作系统上运行,资源占用多

直接运行在宿主机上,没有自己的内核,轻量

启动速度



快速扩展能力

一般


跨平台迁移能力

一般


对微服务架构的支持

一般


对Devops的支持

一般


镜像大小

大,达到几百MB,几GB

小,可小至几兆

虚拟化类型

硬件虚拟化

OS虚拟化

性能

5%-20%损耗

物理机性能

安全性



docker优势

区别

不用docker

使用docker

部署

一堆帮助文档,安装程序

打包镜像发布测试,一键运行

运维

开发、测试环境分别维护,容易出问题

容器化后,开发测试高度一致

资源利用

内核级虚拟化,一个物理机上可以运行多个实例,性能榨干

docker组成

组成

释义

镜像(image)

容器创建的根据,模板

容器(container)

根据镜像创建的一个简易Linux上的应用实例

仓库(repository)

镜像存储(分共有和私有)

Run的流程和Docker流程

docker jar 依赖包 docker运行jar和直接运行jar_容器_02

底层原理

docker jar 依赖包 docker运行jar和直接运行jar_docker jar 依赖包_03

Docker为什么比VM快?

  1. Docker有着比虚拟机更少的抽象层
  2. Docker利用的是宿主机的内核,VM需要的是CentOS

所以Docker创建容器的时候,不需要多加载一个操作系统内核。虚拟机加载CentOS是分钟级别的,而Docker直接利用宿主机的操作系统,省略了这个复杂的过程,秒级启动的。

原理图:

docker jar 依赖包 docker运行jar和直接运行jar_docker_04

释义:

docker jar 依赖包 docker运行jar和直接运行jar_Docker_05