Docker 概述
Docker 为什么会出现?
一款产品:开发→上线两套环境,应用环境,应用配置。
开发--------运维。问题:我在我的电脑上可以运行。版本更新,导致服务不可用。
环境配置是十分的麻烦,每一个机器都要部署环境(集群 Redis、ES、 Hadoop.....)费时费力。
发布一个项目( jar+(Redis MySQL jdk ES))项目能不能都带上环境安装打包
之前在服务器配置一个应用的环境Redis、MySQL、jdk、ES、Hadoop,配置麻烦,不能够跨平台。( Windows发布到 Linux )
传统:开发jar,运维来做
现在:开发打包部署上线,一套流程做完
举个例子
安卓项目:java → apk → 发布 ( 应用商店) → 某某某使用apk → 安装即可用
网站项目:java → jar (环境) → 打包项目带上环境(镜像) → ( Docker仓库:商店) → 下载我们发布的镜像 → 运行即可
核心思想
打包装箱,Docker通过隔离机制,可以将服务器利用到极致
学习 Docker
Docker是基于Go语言开发的开源项目
Docker 能做什么
原来的虚拟机技术
Kernel:内核;Lib:运行所需要的库;APP:跑的程序
缺点:
- 资源占用十分多
- 冗余步骤多
- 启动很慢
容器化技术
Kernel:内核;Lib:运行所需要的库;APP:跑的程序
容器化技术不是模拟的一个完整的操作系统
比较
比较 Docker 和 虚拟机技术 的不同:
- 传统虚拟机,虛拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
- 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不干扰
DevOps (开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档、安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样
项目打包为一个镜像,扩展服务器A,服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服务器的性能可以被压榨到极致。