一、历史演化
1、演化史
2、物理机时代
2.1、图解
一个物理机上安装操作系统,然后直接运行我们的软件。也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费。
2.2、缺点
- 部署慢
- 成本高
虚拟机都不开,直接上物理机部署应用,那成本能不高嘛
- 资源浪费
硬件资源没有合理利用
- 不易迁移和增加机器
每次迁移都要重新安装一模一样的运行环境等
- 受限于硬件
3、虚拟机时代
3.1、图解
一个物理机上虚拟化出来多个虚拟机,每个虚拟机上进行安装操作系统,然后在虚拟机上直接运行我们的软件。比如阿里云、腾讯云等云服务器都是虚拟机。
3.2、特点
- 多部署
一个物理机上创建多个虚拟机,每个虚拟机的ip都不同,一个软件可以在不同虚拟机上进行部署。
- 资源隔离
每个虚拟机都由独立分配的内存磁盘等硬件资源,通过Hypervisor分配。
- 易扩展
随时随地都能在一个物理机上开出新的虚拟机。成本也低。
- 成本相对较低
3.3、缺点
- VM需要安装操作系统
假设我们的应用程序只有几KB,或者几十MB,但是却要在虚拟机上安装一个几百兆的操作系统来跑。
4、容器化时代
4.1、有什么用
看完了物理机时代和虚拟机时代后发现各有缺点,而容器化技术可以完美解决虚拟机时代的缺点。
或许你一定遇到过程序在我本地是正常的,为毛到了QA环境就GG了?或者本地和QA都测试通过了,为毛上线就GG了?这大多是因为环境不同所导致的,最简单的例子:本地和QA是jdk1.8,线上是1.6等等。容器化技术比如docker,开发者可以将安装环境和程序一起打包给运维,运维直接安装你这个打包的“脚本”即可,所有的环境都是你本地正常运行的。
如果没看懂就粗浅的理解为:你用shell命令写了个脚本,下载jdk,配置环境变量、下载tomcat、部署你的程序等等这一套流程,然后交给运维,运维直接sh xxx.sh就完事了,环境什么的都是你给的,不会出现环境不一致的情况。你肯定有疑问:我虚拟机上有jdk了,你给我的脚本里再安装jdk肯定不行啊,容器化技术可以让资源隔离,互不影响。
4.2、对比虚拟机时代
虚拟化技术是物理硬件的隔离,容器化技术是app层面的隔离,两者不冲突。往往容器化时代都是基于虚拟机基础之上做的资源隔离。它可以基于虚拟机的操作系统部署多服务,不再需要额外安装操作系。
4.3、特点
- 标准化的迁移方式
那肯定啊,开发者将环境和程序打包给运维,运维直接执行就完事了。
- 统一的参数配置
废话,包都是开发者给的,开发者难道把一个应用程序打两个不同的包给运维?
- 自动化部署
- 应用集群监控
- 开发与运维之间的沟通桥梁
加粗了,自行体会。
二、什么是Docker?
Docker就是容器化技术的一种具体实现。基于Go语言开发。
加粗的一句话已经解释的明明白白了,不明白就等于没看懂上面的。
三、Docker的安装
基于Centos7的安装。
1、官方安装地址
https://docs.docker.com/engine/install/centos/
官方由于是国外的,所以不推荐,推荐下面的安装方式。
2、国内源安装
2.1、安装工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
device-mapper-persistent-data lvm2是干嘛的?
docker要想数据存储就必须要安装这两个,这两个是为了docker做数据存储用的。
2.2、添加源为国内
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3、更新安装Docker-CE
sudo yum makecache fast sudo yum -y install docker-ce
2.4、验证是否安装成功
sudo service docker start docker version
2.5、先爽一把helloworld
好不容易安装完了,先爽一把helloworld。
docker pull hello-world docker run hello-world