1. 物理机演进到虚拟化部署
1.1 物理机部署
在早期的项目部署中是非常繁琐和复杂的,通常就是一台物理机跑起来一个项目
- 部署非常慢
- 成本很高
- 资源浪费
- 难以扩展和迁移
1.2 虚拟部署
1.2.1 虚拟机
虚拟机的出现可以很好的解决物理机部署存在的问题
- 一台物理机可以部署多个app
- 实现环境上的隔离
但是虚拟机也存在很大的问题,虚拟机有独立的操作系统,非常消耗物理机的资源,可能一台物理机也创建不了太多的虚拟机
1.2.2 容器技术
容器技术的出现,可以让不同的操作系统共享相同的物理机资源,解决了宿主机部署冲突的问题,如进程空间,网络空间和文件系统空间
- 更高效的利用系统资源
- 更快的启动时间
- 更轻松的迁移和扩展
- 轻量级的实现资源环境隔离
docker就是对容器实现增删改查的软件
2. docker使用原理流程
2.1 LXC技术
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求
linux是支持LXC技术的
2.2 docker管理容器
docker是基于Golang开发的一款管理容器的软件,其本质上就是调用linux的LXC,完成对容器的增删改查操作,每一个容器都有独立的
- 网络空间
- 文件系统空间
- 进程空间
容器的性能
- 实现环境交付的一致性
- 实现环境的隔离,不会产生部署冲突
- 轻量级
- 高性能
- 弹性扩缩容
说白了,就是在一台物理机上,尽可能创建更多的相互隔离的环境,满足不同服务的部署
2.3 基于docker实现项目的部署
3. 容器化开发部署
开发一个项目通常由开发,测试和运维三大部门组成,每个部门都有自己的工作环境,之前的做法都是各自安装项目的运行环境,极大的造成时间上的浪费
现在的devops文化倡导的就是敏捷开发,这就要求必须使用docker技术来进行开发部署
- 源码部署:对于开发人员开发的源码,通常使用gitee或者github实现源码的分享
- 环境部署:对于开发人员编写的dockerfile,生成对应的镜像,上传到镜像仓库中,如docker hub
- 基于源码和容器可以快速的实现项目的部署运行或者测试