Docker为什么出现?
Docker的思想来自于集装箱;
JRE – 多个应用(端口冲突)— 原来都是交叉的!
隔离 : Docker核心思想,打包装箱,每个箱子是互相隔离的。
Docker通过隔离机制,可以将服务器利用到极致!
Docker的基本组成
镜像(image)
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务。
tomcat镜像 ==> run ==> tomcat容器(提供服务)
通过这个镜像可以创建多个容器(最终运行或者项目运行都是在容器中的)。
容器(container)
Docker利用容器技术,独立运行一个或者一组应用,是通过镜像来创建的。
有启动,停止,删除等Linux基本指令!
目前就可以把这个容器理解为一个简易的Linux系统
仓库(repository)
仓库就是存放镜像的地方,分为私有仓库和公有仓库;
Docker Hub(默认是国外的)
分层理解
分层的镜像
我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层层的在下载
思考:
为什么Docker镜像要采用这种分层的结构呢?
最大的好处,我觉得莫过于资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
查看镜像分层的方式可以通过docker image inspect name命令
理解:
所有的 Docker镜像都起始于一个基础镜像层,当进行修改或培加新的内容时,就会在当前镜像层之上,创建新的镜像层。
例子:
假如基于 Ubuntu Linux16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加 Python包,
就会在基础镜像层之上创建第二个镜像层;
如果继续添加一个安全补丁,就会创健第三个镜像层该像当前已经包含3个镜像层。
在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合,理解这一点非常重要
docker优点
打包、分发、部署
- 打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
- 分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
- 部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在
Windows/Mac/Linux
。
安装的优点
- 一个命令就可以安装好,快速方便
- 有大量的镜像,可直接使用
- 没有系统兼容问题,Linux 专享软件也照样跑
- 支持软件多版本共存
- 用完就丢,不拖慢电脑速度
- 不同系统和硬件,只要安装好 Docker 其他都一样了,一个命令搞定所有
部署的优势
常规应用开发部署方式:自己在 Windows 上开发、测试 —> 到 Linux 服务器配置运行环境部署。
问题:我机器上跑都没问题,怎么到服务器就各种问题了
用 Docker 开发部署流程:自己在 Windows 上开发、测试
—> 打包为 Docker 镜像(可以理解为软件安装包)
—> 各种服务器上只需要一个命令部署好
优点:确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。
通常用来做什么
- 应用
分发
、部署
,方便传播给他人安装。特别是开源软件和提供私有部署的应用 - 快速安装测试/学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上。例如
Redis
/MongoDB
/ElasticSearch
/ELK
- 多个版本软件共存,不污染系统,例如
Python2
、Python3
,Redis4.0
,Redis5.0
Windows
上体验/学习各种Linux 系统
返回 docker 系列