16.4 容器与生产环境
不同的产品技术团队对生产环境可能有不同的解读。在这里,生产环境是指企业运行其商业应用的IT环境,是相对于开发环境、预发布环境和测试环境而言的。
在生产环境中,容器既可以作为API后端服务器,也可以作为业务应用的Web服务器,还可以作为微服务中的服务节点。但是不管用户将容器用于哪种场景,在生产环境中运行容器与其他环境相比,在安全性与稳定性等方面都存在更高要求。
Docker算是IT生产环境与基础设施的新成员。近些年,Docker在DevOps和基础设施领域中快速风靡起来。Google、IBM、Amazon、Microsoft,以及几乎所有云计算供应商都宣布支持Docker。很多容器领域中的创业公司都在2014年或2015年初获得了风险投资。同时,Docker公司在2015年的估值也达到了10亿美元。
尽管Docker获得广大公有云厂商的大力支持,但是目前容器技术生态中已经存在许多分支与分歧,如rkt项目。为了解决容器生态中的差异化问题,为了从根本上解决生产环境中运用Docker的风险,Google、Intel、Microsoft、IBM、Amazon、VMware、Oracle、HPE、Facebook等IT巨头于2015年6月共同宣布成立OCI(Open Container Initiative)组织[1]。OCI组织的目标在于建立通用的容器技术标准。除了保障与延续既有容器服务的生命周期外,还通过不断推出标准的创新的容器解决方案赋能开发者。而OCI成员企业也会秉持开放、安全、弹性等核心价值观来发展容器生态。客观而言,OCI组织的出现确立了容器技术的标准,避免容器技术被单一厂商垄断。统一技术标准后,广大企业不用担心未来新兴的容器技术不兼容Docker。
2016年开始,大量企业的应用开始云化,部分已经云化的企业,开始实施全面容器化和微服务化。不过,用户不应该把容器当做“银弹”,并不是所有应用和服务都适合容器化。对于“12要素”[2]类型应用,容器化是非常容易和平滑的。因为这些应用是无状态的,而且它们在微服务架构中可以在很短时间内完成启停,高度保证了整个服务的可用性。传统数据库或有状态应用、对网络吞吐性能有高要求的应用并不适合容器化。
可以说,绝大部分的分层架构的企业架构,都可以平滑地在生产环境中容器化。而绝大部分完成容器化的企业架构,都可以通过代码重构完成微服务化,这样可以从服务层面进一步提高可用性,进一步降低IT固定成本。降低持续集成与部署成本。
现在越来越多的企业正在生产环境中使用Docker,Docker镜像下载量在2014年12月是6700万,一年后,镜像下载量上升到了12亿。最近某容器服务的研究显示,八成的IT从业者了解和接触过Docker,四成的组织目前正在生产环境中使用Docker,预计这个比例会在未来两年内还会继续上升。
在生产环境中使用容器时,需要考虑几个问题,下面的建议供大家参考:
·如果Docker出现不可控的风险,是否考虑了备选的解决方案;
·是否需要对Docker容器做资源限制,以及如何限制,如CPU、内存、网络、磁盘等;
·目前,Docker对容器的安全管理做得不够完善,在应用到生产环境之前可以使用第三方工具来加强容器的安全管理。如使用apparmor对容器的能力进行限制、使用更加严格的iptable规则、禁止root用户登录、限制普通用户权限以及做好系统日志的记录;
·公司内部私有仓库的管理、镜像的管理问题是否解决。目前官方提供的私有仓库管理工具功能并不十分完善,若在生产环境中使用还需要更多的工作。
[1] OCI组织官网:https://www.opencontainers.org/
[2] 12 Factor App:https://12factor.net/,本书后面第28章也介绍了这个概念。
