## 省去虚拟机的烦恼 * 攻击面显著减小。不需要维护那么多虚拟机的密码。 * 不再需要配置复杂的 Linux 权限,反正在容器里就是 Root。 * 不再需要配置复杂的路由器和 Linux 的路由表、networkmanager,反正容器开了都是建好的。 * 不再需要重复运行大量无意义的 Linux 内核,巨大的节省资源 * 过去,运行三个独立的业务,需要三个 VM。包括缓存,可能至少需要占用 20GB 的主机内存。 * 迁移到容器后,唯一的内存开销就是容器的进程,每个业务只需要 200MB 内存。 * 不再需要担心内存泄漏而对服务器定时重启,而是只重启容器即可 ## 声明式数据中心 * 整个数据中心可以一键启动,一键关闭。 * 在事故时,可以使用备用设备启动集群,快速恢复。 * 所有对数据中心的变更都可以由 Git 版本控制,快速回滚。 * 可以非常容易的迁移到公有云、混合云。 * 部署新业务变得非常快,并且不会弄脏数据中心:只需要提供 Image 即可。 ## 软件定义网络 * 不再需要手工建设交换机 * 过去需要繁琐的建设交换机、网线,需要几个子网,就需要在交换机上手工配置隔离。 * 现在一个主机只需要连接一根物理网线,直接使用分布式虚拟交换机,想要几个子网就有几个子网。 * 对网络配置版本控制和声明式 * 过去对于网络的定义是使用文字描述的,要想恢复一个网络,需要复杂的物理操作和软件配置。 * 现在对于网络的定义是纯代码声明的,可以直接由 Git 版本控制,快速回滚。 ## 开发测试更容易 * 不需要配环境 * 不会出现“我的电脑上是好的” ## 无需活迁移 * 不需要为活迁移基础设施准备单独的网络设备。 * 极快的维护速度 * 过去为了对主机进行维护,需要复杂的操作,将主机上所有业务迁移到其它主机。这个过程需要 30 分钟。 * 现在可以直接在新的主机上启动新的容器,将流量切过去,等老的容器将最后一个连接释放,只需要几秒钟即可维护主机。 ## 更加容易 CI、CD * CD 0-down-time * 更新的本质是创建新版本的容器,再将新流量切过去,不会产生部署过程中的 downtime * 不需要在 CI 中配置密码 * CI 只需要负责将容器编译并发布到 Registry 即可。 * 不需要为了 CD 变更服务器 * 服务器只需要定时从 Registry 拉取最新版的 Image,再增量替换老的容器即可