为什么会出现docker?
- 开发,上线两套环境部署麻烦,容易出问题
- 减少配置,像一个集群,每一个机器都需要配置很麻烦
- 可以打包项目带上环境,别人拉取镜像,直接运行即可
- 多个应用可能出现端口冲突,docker可以隔离应用,最大化利用资源
传统虚拟机与 docker运行结构图
docker和虚拟机技术区别?
对比项 | 虚拟机 | Docker |
隔离性 | 较强 | 强,容器隔离,有自己的文件系统 |
计算机资源 | 完整的操作系统上运行,资源占用多 | 直接运行在宿主机上,没有自己的内核,轻量 |
启动速度 | 慢 | 快 |
快速扩展能力 | 一般 | 强 |
跨平台迁移能力 | 一般 | 强 |
对微服务架构的支持 | 一般 | 强 |
对Devops的支持 | 一般 | 强 |
镜像大小 | 大,达到几百MB,几GB | 小,可小至几兆 |
虚拟化类型 | 硬件虚拟化 | OS虚拟化 |
性能 | 5%-20%损耗 | 物理机性能 |
安全性 | 强 | 弱 |
docker优势
区别 | 不用docker | 使用docker |
部署 | 一堆帮助文档,安装程序 | 打包镜像发布测试,一键运行 |
运维 | 开发、测试环境分别维护,容易出问题 | 容器化后,开发测试高度一致 |
资源利用 | 内核级虚拟化,一个物理机上可以运行多个实例,性能榨干 |
docker组成
组成 | 释义 |
镜像(image) | 容器创建的根据,模板 |
容器(container) | 根据镜像创建的一个简易Linux上的应用实例 |
仓库(repository) | 镜像存储(分共有和私有) |
Run的流程和Docker流程
底层原理
Docker为什么比VM快?
- Docker有着比虚拟机更少的抽象层
- Docker利用的是宿主机的内核,VM需要的是CentOS
所以Docker创建容器的时候,不需要多加载一个操作系统内核。虚拟机加载CentOS是分钟级别的,而Docker直接利用宿主机的操作系统,省略了这个复杂的过程,秒级启动的。
原理图:
释义: