
# 应用容器化改造方案概述
本手册基于云容器引擎实践所编写，用于指导您已有应用的容器化改造。
#### 什么是容器
容器是操作系统内核自带能力，是基于Linux内核实现的轻量级高性能资源隔离机制。
云容器引擎CCE是基于开源Kubernetes的企业级容器服务，提供高可靠高性能的企业级容器应用管理服务，支持Kubernetes社区原生应用和工具，简化云上自动化容器运行环境搭建。
#### 为什么需要使用容器
- 更高效的利用系统资源。 容器不需要硬件虚拟化以及运行完整操作系统等额外开销，所以对系统资源利用率更高。相比虚拟机技术，一个相同配置的主机，往往可以运行更多数量的应用。
  
- 更快速的启动时间。 容器直接运行于宿主机内核，无需启动完整的操作系统，可以做到秒级甚至毫秒级的启动时间。大大节约开发、测试和部署的时间。
  
- 一致的运行环境。 容器镜像提供了完整的运行时环境，确保应用运行环境的一致性。从而不会再出现"这段代码在我机器上没问题"这类问题。
  
- 更轻松地迁移、维护和扩展。 容器确保了执行环境的一致性，使得应用迁移更加容易。同时使用的存储及镜像技术，使应用重复部分的复用更为容易，基于基础镜像进一步扩展镜像也变得非常简单。
  
 
#### 企业应用容器化改造方式
应用容器化改造，一般有以下三种方式：
- 方式一：单体应用整体容器化，应用代码和架构不做任何改动。
- 方式二：将应用中升级频繁，或对弹性伸缩要求高的组件拆分出来，将这部分组件容器化。
- 方式三：将应用做全面的微服务架构改造，再单独容器化。
这三种方式的优缺点如[表1]。
 表1应用容器化改造方式 
| 应用容器化改造方式                                                                           | 优点                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 缺点                                                                                                                                                                                                                                                                  |
|:---|:---|:---|
| 方式一： 单体应用整体容器化                             | - 业务0修改：应用架构和代码不需要做任何改动。  - 提升部署和升级效率：应用可构建为容器镜像，确保应用环境一致性，提升部署效率。  - 降低资源成本：容器对系统资源利用率高。相比虚拟机技术，一个相同配置的主机，往往可以运行更多数量的应用。                                                                                                                                                     | - 整体性架构扩展难度大，随着应用程序代码扩展，更新和维护工作非常复杂。  - 推出新功能、语言、框架和技术都比较困难。   |
| 方式二： 先将部分组件容器化（将对弹性扩展要求高，或更新频繁的组件拆分出来，先容器化改造） | - 渐进式变革：在原有架构推倒重建太伤筋动骨，通过较为缓和的改动，更容易接受。  - 弹性更灵活：将对弹性要求高的组件容器化，当需要扩展时，只针对该容器扩展，弹性更灵活，且能降低系统资源。  - 新特性上线更快：将更新频繁的组件容器化，只针对这个容器进行升级，上线更快。                                                                                                                            | 需要对业务做部分解耦拆分。                                                                                                                                                                                                                                                       |
| 方式三： 整体微服务架构改造，再容器化                        | - 单独扩展：拆分为微服务后，可单独增加或缩减每个微服务的实例数量。  - 提升开发速度：各微服务之间解耦，某个微服务的代码开发不影响其他微服务。  - 通过隔离确保安全：整体应用中，若存在安全漏洞，会获得所有功能的权限。微服务架构中，若攻击了某个服务，只可获得该服务的访问权限，无法入侵其他服务。  - 隔离崩溃：如果其中一个微服务崩溃，其它微服务还可以持续正常运行。   | 业务需要微服务化改造，改动较大。                                                                                                                                                                                                                                                    |
   
本教程以"方式一"为例，将单体的企业ERP系统做整体的容器化改造。
