2019-04-21 10:36:08 +08:00
|
|
|
|
<!-- GFM-TOC -->
|
2019-03-27 20:57:37 +08:00
|
|
|
|
* [一、解决的问题](#一解决的问题)
|
|
|
|
|
* [二、与虚拟机的比较](#二与虚拟机的比较)
|
|
|
|
|
* [三、优势](#三优势)
|
|
|
|
|
* [四、使用场景](#四使用场景)
|
|
|
|
|
* [五、镜像与容器](#五镜像与容器)
|
|
|
|
|
* [参考资料](#参考资料)
|
2019-04-21 10:36:08 +08:00
|
|
|
|
<!-- GFM-TOC -->
|
2019-03-27 20:57:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 一、解决的问题
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
|
|
|
|
由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。
|
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其它机器上。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-04-25 18:43:33 +08:00
|
|
|
|
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/011f3ef6-d824-4d43-8b2c-36dab8eaaa72-1.png" width="400px"/> </div><br>
|
2018-12-30 20:59:13 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
# 二、与虚拟机的比较
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-04-25 18:43:33 +08:00
|
|
|
|
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/be608a77-7b7f-4f8e-87cc-f2237270bf69.png" width="500"/> </div><br>
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 启动速度
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-22 19:29:26 +08:00
|
|
|
|
启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
而启动 Docker 相当于启动宿主操作系统上的一个进程。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 占用资源
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
# 三、优势
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
除了启动速度快以及占用资源少之外,Docker 具有以下优势:
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 更容易迁移
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-22 19:29:26 +08:00
|
|
|
|
提供一致性的运行环境。已经打包好的应用可以在不同的机器上进行迁移,而不用担心环境变化导致无法运行。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 更容易维护
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-22 19:29:26 +08:00
|
|
|
|
使用分层技术和镜像,使得应用可以更容易复用重复的部分。复用程度越高,维护工作也越容易。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 更容易扩展
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2018-08-25 23:12:21 +08:00
|
|
|
|
可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像可以非常容易得到我们想要的镜像。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
# 四、使用场景
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 持续集成
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
|
|
|
|
持续集成指的是频繁地将代码集成到主干上,这样能够更快地发现错误。
|
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
Docker 具有轻量级以及隔离性的特点,在将代码集成到一个 Docker 中不会对其它 Docker 产生影响。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 提供可伸缩的云服务
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
根据应用的负载情况,可以很容易地增加或者减少 Docker。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
## 搭建微服务架构
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
Docker 轻量级的特点使得它很适合用于部署、维护、组合微服务。
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
# 五、镜像与容器
|
2018-07-31 23:30:59 +08:00
|
|
|
|
|
|
|
|
|
镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。
|
|
|
|
|
|
2019-03-27 20:57:37 +08:00
|
|
|
|
镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。
|
|
|
|
|
|
|
|
|
|
构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。
|
|
|
|
|
|
2019-04-25 18:43:33 +08:00
|
|
|
|
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/docker-filesystems-busyboxrw.png"/> </div><br>
|
2019-03-27 20:57:37 +08:00
|
|
|
|
|
|
|
|
|
# 参考资料
|
|
|
|
|
|
|
|
|
|
- [DOCKER 101: INTRODUCTION TO DOCKER WEBINAR RECAP](https://blog.docker.com/2017/08/docker-101-introduction-docker-webinar-recap/)
|
|
|
|
|
- [Docker 入门教程](http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html)
|
|
|
|
|
- [Docker container vs Virtual machine](http://www.bogotobogo.com/DevOps/Docker/Docker_Container_vs_Virtual_Machine.php)
|
|
|
|
|
- [How to Create Docker Container using Dockerfile](https://linoxide.com/linux-how-to/dockerfile-create-docker-container/)
|
|
|
|
|
- [理解 Docker(2):Docker 镜像](http://www.cnblogs.com/sammyliu/p/5877964.html)
|
|
|
|
|
- [为什么要使用 Docker?](https://yeasy.gitbooks.io/docker_practice/introduction/why.html)
|
|
|
|
|
- [What is Docker](https://www.docker.com/what-docker)
|
|
|
|
|
- [持续集成是什么?](http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html)
|
2018-08-25 23:12:21 +08:00
|
|
|
|
|
2019-03-11 09:50:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-05-15 00:27:46 +08:00
|
|
|
|
</br><div align="center">🔔🔔🔔🔔🔔🔔🔔 </br></br> 更多精彩内容将发布在公众号 **CyC2018**,公众号提供了该项目的离线阅读版本,后台回复"下载" 即可领取。也提供了一份技术面试复习思维导图,不仅系统整理了面试知识点,而且标注了各个知识点的重要程度,从而帮你理清多而杂的面试知识点,后台回复"资料" 即可领取。我基本是按照这个思维导图来进行复习的,对我拿到了 BAT 头条等 Offer 起到很大的帮助。你们完全可以和我一样根据思维导图上列的知识点来进行复习,就不用看很多不重要的内容,也可以知道哪些内容很重要从而多安排一些复习时间。</div></br>
|
2019-03-27 20:57:37 +08:00
|
|
|
|
<div align="center"><img width="180px" src="https://cyc-1256109796.cos.ap-guangzhou.myqcloud.com/%E5%85%AC%E4%BC%97%E5%8F%B7.jpg"></img></div>
|