最后一个关键点是,不要期望能在Docker容器中运行所有东西。Heroku风格的“十二要素”([12 factor](http://12factor.net/))应用是最容易Docker化的,因为它们不维护状态。在理想的微服务环境中,容器能在几毫秒内启动、停止而不影响集群的健康或应用程序的状态。 类似[ClusterHQ](https://clusterhq.com/)这样的创业公司正着手实现Docker化数据库和有状态的应用程序,但眼下,由于编排和性能方面的原因,可能需要继续直接在虚拟机或裸机上运行数据库。 Docker还不适用于任何需要动态调整CPU和内存要求的应用[\[2\]](#anchor002)。允许动态调整的代码已经完成,但尚不清楚何时才能在一般的生产环境中投入使用。目前,若对容器的CPU和内存的限制进行调整,需要停止并重新启动容器。 另外,对网络吞吐量有高要求的应用进行最佳优化时不要使用Docker,因为Docker使用iptables来完成宿主机IP到容器IP的NAT转换。通过禁用Docker的NAT来提升网络性能是可行的,但这是一个高级的使用场景,很少有团队会在生产环境中这么做。 - - - - - - [[2]](#ac002) Docker 1.10版中新增的docker update命令可实现CPU和内存的动态调整。——译者注