使用Docker的原因 (面试题)
1.简化程序
2.避免选择恐惧
3.节省开支
4.持续交付和部署
5.更轻松的迁移
应用场景
Web应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
PaaS:Platform as a Service,平台即服务
SaaS:Software as a Service,软件即服务
IaaS:Infrastructure as a Service,基础设施即服务
特点
标准化交付
Docker将应用打包成标准化单元,用于交付、部署
轻量级
容器及包含了软件运行所需的所有环境,而且非常轻量级
高可靠
容器化的应用程序,可以在任何Linux环境中始终如一的运行
隔离性
容器化的应用程序,具备隔离性,这样多团队可以共享同一Linux系统资源
介绍
开源的应用容器引擎,基于Go语言实现,
17.03版本后分为CE(社区)和EE版,命令一致
容器与容器之间相互独立,互不影响
搭建,发送,运行,
搭建一次,处处运行
解决的问题
合作开发的时候,在本机可以运行,在别人的电脑上跑不起来
服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了
测试阶段能运行但上线出现问题
公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器
微服务环境搭建问题
容器版本管理
Docker和虚拟机的不同点
1.性能对比 : Docker 虚拟机
特性 容器 虚拟机
启动速度 秒级 分钟级
存储占用 MB级 GB级
性能对比 接近原生级别 理论达不到原生级别
系统量级 单机可支持上千个 单机支持十几个
安全能力 依赖宿主系统安全能力 完全隔离
2. 应用场景不同:
若需要资源的完全隔离并且不考虑资源的消耗,可以使用虚拟机。若是想隔离进程并且需要运行大量进程实例,应该选择Docker容器
3. 使用资源方面不同
Docker容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级,消耗的资源更少。虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源
4.实现原理不同
虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x、AMD-V会通过一个Hypervisor层来实现对资源的彻底隔离。而容器则是操作系统级别的虚拟化,利用的是内核的cgroup和namespace特性,此功能通过软件来实现,仅仅是进程本身就可以实现互相隔离,不需要任何辅助