CS-Notes/notes/Docker.md

86 lines
4.2 KiB
Java
Raw Normal View History

2020-11-17 00:32:18 +08:00
# Docker
2019-04-25 18:24:51 +08:00
<!-- GFM-TOC -->
2020-11-17 00:32:18 +08:00
* [Docker](#docker)
2019-04-25 18:24:51 +08:00
<!-- GFM-TOC -->
2020-11-17 00:32:18 +08:00
## 解决的问题
2019-04-25 18:24:51 +08:00
由于不同的机器有不同的操作系统以及不同的库和组件在将一个应用部署到多台机器上需要进行大量的环境配置操作
Docker 主要解决环境配置问题它是一种虚拟化技术对进程进行隔离被隔离的进程独立于宿主操作系统和其它隔离的进程使用 Docker 可以不修改应用程序代码不需要开发人员学习特定环境下的技术就能够将现有的应用程序部署在其它机器上
2019-12-06 10:11:23 +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>
2019-04-25 18:24:51 +08:00
2020-11-17 00:32:18 +08:00
## 与虚拟机的比较
2019-04-25 18:24:51 +08:00
虚拟机也是一种虚拟化技术它与 Docker 最大的区别在于它是通过模拟硬件并在硬件上安装操作系统来实现
2019-12-06 10:11:23 +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>
2019-04-25 18:24:51 +08:00
2020-11-17 00:32:18 +08:00
### 启动速度
2019-04-25 18:24:51 +08:00
启动虚拟机需要先启动虚拟机的操作系统再启动应用这个过程非常慢
而启动 Docker 相当于启动宿主操作系统上的一个进程
2020-11-17 00:32:18 +08:00
### 占用资源
2019-04-25 18:24:51 +08:00
虚拟机是一个完整的操作系统需要占用大量的磁盘内存和 CPU 资源一台机器只能开启几十个的虚拟机
Docker 只是一个进程只需要将应用以及相关的组件打包在运行时占用很少的资源一台机器可以开启成千上万个 Docker
2020-11-17 00:32:18 +08:00
## 优势
2019-04-25 18:24:51 +08:00
除了启动速度快以及占用资源少之外Docker 具有以下优势
2020-11-17 00:32:18 +08:00
### 更容易迁移
2019-04-25 18:24:51 +08:00
提供一致性的运行环境已经打包好的应用可以在不同的机器上进行迁移而不用担心环境变化导致无法运行
2020-11-17 00:32:18 +08:00
### 更容易维护
2019-04-25 18:24:51 +08:00
使用分层技术和镜像使得应用可以更容易复用重复的部分复用程度越高维护工作也越容易
2020-11-17 00:32:18 +08:00
### 更容易扩展
2019-04-25 18:24:51 +08:00
可以使用基础镜像进一步扩展得到新的镜像并且官方和开源社区提供了大量的镜像通过扩展这些镜像可以非常容易得到我们想要的镜像
2020-11-17 00:32:18 +08:00
## 使用场景
2019-04-25 18:24:51 +08:00
2020-11-17 00:32:18 +08:00
### 持续集成
2019-04-25 18:24:51 +08:00
持续集成指的是频繁地将代码集成到主干上这样能够更快地发现错误
Docker 具有轻量级以及隔离性的特点在将代码集成到一个 Docker 中不会对其它 Docker 产生影响
2020-11-17 00:32:18 +08:00
### 提供可伸缩的云服务
2019-04-25 18:24:51 +08:00
根据应用的负载情况可以很容易地增加或者减少 Docker
2020-11-17 00:32:18 +08:00
### 搭建微服务架构
2019-04-25 18:24:51 +08:00
Docker 轻量级的特点使得它很适合用于部署维护组合微服务
2020-11-17 00:32:18 +08:00
## 镜像与容器
2019-04-25 18:24:51 +08:00
镜像是一种静态的结构可以看成面向对象里面的类而容器是镜像的一个实例
镜像包含着容器运行时所需要的代码以及其它组件它是一种分层结构每一层都是只读的read-only layers构建镜像时会一层一层构建前一层是后一层的基础镜像的这种分层存储结构很适合镜像的复用以及定制
构建容器时通过在镜像的基础上添加一个可写层writable layer用来保存着容器运行过程中的修改
2019-12-06 10:11:23 +08:00
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/docker-filesystems-busyboxrw.png"/> </div><br>
2019-04-25 18:24:51 +08:00
2020-11-17 00:32:18 +08:00
## 参考资料
2019-04-25 18:24:51 +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/)
- [理解 Docker2Docker 镜像](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)