这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战
Docker 为什么会出现?
一款产品: 从开发到上线,最少有两套环境(开发、生产)
在开发的工程中,我们可能会遇到以下问题:
- 在开发的电脑可以运行!在其他环境出现问题了
- 版本更新,导致服务不可用
- 环境配置是十分的麻烦,每一台机器都要部署环境(集群
Redis、ES、Hadoop...),配置起来费时费力- 不能够跨平台(比如
Windows开发,linux发布)
所以,我们会希望在部署时,项目能不能带上环境打包!比如说:发布一个spring boot项目同时带上数据库、缓存等。
传统:开发将项目打包,剩余交给运维来做 现在:开发打包部署上线,一套流程做完
Docker就是给以上的问题,提出了解决方案!
就好比,开发人员给应用商店发布了一个应用,用户下载安装就可以使用
开发 --->
APK---> 发布(应用商店)---> 用户下载APK---> 安装使用
Docker 就是开发人员把项目和环境打包好,发布到仓库,运维人员下载运行即可
开发 --->
jar(打包项目带上环境:镜像)---> 发布到(Docker仓库) ---> 运维下载 ---> 运行使用
Docker 的思想来自于集装箱!
隔离:Docker的核心思想,打包装箱,每个箱子之间是互相隔离的。
没有使用docker之前,一个系统上运行很多应用,多个应用之间可能会出现一些问题,而且这些应用之间是交叉的(比如都在使用数据库,端口错误),而且项目之间不会影响。
Docker通过隔离机制,可以将服务器的利用到极致!
Docker 历史
2010年,法裔美籍开发者和企业家 Solumon Hykes,在美国成立了一家公司dotCloud,做一些PaaS的云计算服务。
底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为Docker。Docker就是这样诞生的!
2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为Docker,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。同时将Docker开源,被越来越多的人发现docker优点。之后Docker每个月都会更新一个版本。
2014年4月,Docker1.0发布!
Docker 为什么这么火?
相对于其他的容器技术,十分的轻巧!
在容器技术之前,都是使用的虚拟机(VM ware)。
虚拟机:需要先装 VM ware,通过这个软件我们可以虚拟出来一台或者多台电脑。虚拟出来的电脑会比较笨重,占用资源很多。
虚拟机属于虚拟化技术,Docker容器技术也是虚拟化技术
vm:linux centos原生镜像(一个电脑) 隔离:需要开启多个虚拟机,大小几个G,启动几分钟。
docker: 隔离:镜像(最核心的环境:4m,然后我们需要什么安装什么增加什么进去),十分小巧,运行镜像即可。大小几M,秒级启动
Docker 是基于go语言开发的。
文档:docs.docker.com/ 文档是非常详细的
仓库地址: registry.hub.docker.com/
Docker能干什么?
虚拟机技术
缺点:
- 资源占用十分多
- 冗余步骤多
- 启动慢
容器化技术
容器化技术不是模拟一个完整的操作系统,只是操作系统的核心
比较
- 传统虚拟机:虚拟出一套硬件,运行一个完成的操作系统,然后再这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以经轻便了
- 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps(开发运维)
- 更快速的交付和部署
传统,一堆帮助文档,安装程序
Docker: 打包镜像发布测试,一件运行 - 更便捷的升级和扩缩容
使用
Docker之后,我们部署应用集合搭积木一样! - 更简单的系统运维
在容器化之后,我们开发、测试环境都是高度一致的。
- 更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器示例!服务器的性能被压榨到极致。