Docker最佳实践:容器的单个进程

And*_*gan 6 php nginx virtual-machine docker dockerfile

Docker 最佳实践指南指出:

"......你应该只在一个容器中运行一个进程......"

Nginx和PHP-FPM应该在不同的容器中运行吗?或者这是否意味着微服务架构只在容器中运行一个服务或"app"?

将这些服务放在单个容器中似乎更容易部署和维护.

小智 5

根据用例,您可以在单个容器中运行多个进程,但我不建议这样做.

从某种意义上说,在不同的容器中运行它们更简单.保持容器小,无状态,并且只需一个工作就可以更容易地维护它们.让我告诉你我的容器工作流程是如何处于类似的情况.

所以:

  1. 我有一个容器,其中nginx暴露给外界(:443,:80).在此级别,可以直接管理配置,证书,负载均衡器选项等.
  2. 一个(或多个)容器与应用程序.在这种情况下,一个php-fpm容器与应用程序.Docker镜像是无状态的,容器会挂载并共享静态文件的卷,依此类推.此时,您可以随时销毁并重新创建应用程序容器,从而保持负载均衡器的正常运行.此外,您可以在同一代理(nginx)后面拥有多个应用程序,并且管理其中一个应用程序不会影响其他应用程序.
  3. 数据库的一个或多个容器......同样的好处适用.
  4. Redis,Memcache等

具有这种结构,部署是模块化的,因此每个"服务"都是分离的,并且在逻辑上独立于系统的其余部分.

作为副作用,在此特定情况下,您可以对应用程序执行零停机部署(更新).这背后的想法很简单.当您必须进行更新时,使用更新的应用程序创建docker镜像,运行容器,运行所有测试和维护脚本,如果一切顺利,则将新创建的容器添加到链(负载均衡器),并且轻轻地杀死旧的.就是这样,你有更新的应用程序,用户根本没有注意到它.