文章目录
关于Docker的应用我其他两篇文章中有,链接如下:
安装: Centos7安装docker并更改阿里云下载镜像地址
使用: Docker拉取Mysql镜像并启动访问及docker常用命令介绍
1. 我们为什么使用Docker?
当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。
就好比我之前开发的一个电商项目,其中包括 Java 环境/Tomcat/ MySQL / JDBC 驱动包/相应 jar 包,还有SSM框架及搜索引擎Solr等技术,仅仅是在windows系统上协调这些项目的版本,保证环境不冲突及项目正常运行,就需要大量时间来调试,而我们技术人员往往在windows系统上开发及调试,那么上线的时候需要部署到linux系统中,这就会导致由于环境不同的产品部署问题。
往往就算不跨系统,而是换一台同样操作系统的服务器,要移植部署依然很麻烦,那么为了解决这个问题,Docker就体现出了他的用处!
2. Docker是什么?
Docker 是一个开源的应用容器引擎
Docker 其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。
再通俗点说,我们使用Docker,只需要配置一次Docker容器上面的应用,就可以跨平台,跨服务器,实现应用程序跨平台间的无缝衔接
Docker实际上就相当于一个封闭的沙盒或者是集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上,实现容器虚拟化技术,随用随搬
一句话,Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
2.1 镜像-(概念:复制的程序)
- 定义:Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
- 作用 : Docker镜像是用来启动容器的,也用来创建新的容器,类似于虚拟机的快照。
- 特点 : 镜像不包含任何动态数据,其内容在构建之后也不会被改变,在Docker里可以创建镜像,也可以从第三方的网站上下载别人已经做好的镜像来使用
2.2 容器-(概念:集装箱)
- 定义 : 一个Docker镜像可以实例化出来多个容器,而每一个容器之间是独立运行的,没有任何依赖
- 作用 : 运行程序员开发的应用程序的
- 特点 : Docker镜像是不能运行的,是静态的,而Docker容器是运行的,是动态的,可以将Docker容器想像成一个简化版的操作系统和一些核心基础的应用。每个容器运行一个独立的应用程序。
2.3 仓库-(概念:存放镜像的地方)
- 定义 : Docker仓库提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像位置的
- 作用: 我们自已创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用
总结: 说白了镜像就等于一个centos系统的安装程序,一个镜像只是一个只读环境而已,这个镜像提供的是基础的运行环境,而你在Centos7系统中安装的应用,比如Redis,Mysql这些应用就相当于一个容器,这些容器都是单独可运行的,仓库的概念就更好理解了,在Centos7系统中下载的所有应用都被收集到同一个仓库里了,比如Maven仓库
3. Docker的作用?
3.1 结论
绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突,而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是所说的标准化、集装箱的原因所在。
- 解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况
- 限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
- docker的标准化让快速扩展,弹性伸缩变得简单
3.2 总结
容器不是模拟一个完整的操作系统而是对进程进行隔离,有了容器,我们就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行
3.3 举例
举例: 我把货物一辆兰博基尼跑车(好比开发好的应用APP),打包放到一容器集装箱里,它通过货轮可以轻而易举的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。而且运输期间,我的兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另外一个码头卸货后,依然可以完美风骚的赛跑(启动正常)
4. 传统虚拟机与Docker虚拟化技术的对比
领域 | 传统虚拟机 | Docker虚拟化 |
---|---|---|
应用交付与部署 | 每发布一个应用程序,都需要走一遍流程 | 集装箱式交付,整体交付 |
资源消耗 | 传统虚拟机要具备独立的虚拟CPU、内存、操作系统,如果我们有10个虚拟机,则需要安装10个操作系统,虚拟出来10个CPU、内存等,因此造成大量的资源浪费 | 容器可以运行相同的一个操作系统内核,让一个容器的消耗与一个进程一样 |
启动 | 虚拟机硬件需要初始化,需要启动时间 | 没有虚拟机硬件初始化过程,开箱即用 |
应用安装 | 需要大量的安装包及安装过程,如下载完整镜像也非常耗费时间 | 统一仓库拉取,结构简单,拉取速度快 |
故障 | 虚拟机内应用崩溃,理论上不会影响其它虚拟机以及上面运行的应用的,除非是硬件或者Hypervisor有Bug | 因为共用内核,只靠cgroup隔离,应用之间的隔离是不如虚拟机彻底的,如果某个应用运行时导致内核崩溃,所有的容器都会崩溃 |
5. Docker和虚拟机形象比喻
什么是物理机
什么是虚拟机
什么是Docker
参考资料:
https://www.zhihu.com/question/28300645/answer/585166942
https://baijiahao.baidu.com/s?id=1665273511649700130&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1668622380573288716&wfr=spider&for=pc
https://blog.csdn.net/qsbbl/article/details/86715741
https://baijiahao.baidu.com/s?id=1666555716941349742&wfr=spider&for=pc