1.背景
在工作中,我们可能都遇到过以下问题:
1. 开发人员的开发机器上需要安装各种软件和 一大堆依赖库,如Java、Nginx、Tomcat、MySQL、Redis等,还要修改各种配置,可能花了很长时间,还是存在问题。
2. 测试人员按照开发给出的文档部署应用和服务,测出了一堆问题,结果发现因环境问题引起的。
3. 运维工程师同时维护开发、测试、生产三套环境,经常在不同环境下安装相同的软件、依赖,修改相同的配置,工作量巨大且容易出错。
4. 运营搞线上活动期间,系统流量会骤然增大,需要紧急扩容,传统方式需要至少一小时才能完成,如果没有提前完成,活动期间用户操作会很卡、体验很差。
5. ......
然后,这些问题在Docker面前根本不值一提,分分钟就能搞定。
2.Docker是什么
Docker是Go语言编写的容器虚拟化解决方案,基于apache2.0协议,2013年出现,发展非常迅猛,目标是成为云应用的基石。
Docker将应用构建成镜像,并且支持版本控制,应用版本与镜像版本一一对应,镜像可以发布到镜像仓库,如果希望运行某个应用,可以从镜像仓库下载指定版本的镜像到本地运行。
Docker的口号:Build once,Run anywhere,Configure once,Run anything。
3.容器虚拟化 vs 传统虚拟化
对于“虚拟化”,相信大家都不陌生,Vmware就是传统虚拟机的一种。传统虚拟化需要为每个虚拟机单独提供一套操作系统,而Docker容器虚拟化基于LXC实现Linux Kernel共享,容器与Host共享操作系统内核,IO和CPU性能接近于物理机。
下面2张是Docker容器与传统虚拟机的架构图比较(来源于Docker官网)
![](https://img.haomeiwen.com/i1643904/4142003805e32e4c.png)
![](https://img.haomeiwen.com/i1643904/6f07cd6b810beffe.png)
容器与虚拟机的比较
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘 | MB | GB |
性能 | 接近物理机 | 明显弱于物理机 |
单机支持量 | 支持上千个容器 | 只支持几十个 |
4.Docker的结构
Docker程序本身是C/S架构,包括Docker Client和Docker Server;整个Docker生态系统又可以分为Docker程序自身和Docker仓库。
网友评论