码头工人最佳实践 https://docs.docker.com/engine/articles/dockerfile_best-practices/指南指出:
“...您应该只在单个容器中运行单个进程...”
Nginx 和 PHP-FPM 应该在单独的容器中运行吗?或者这是否意味着微服务架构仅在容器中运行一项服务或“应用程序”?
将这些服务放在一个容器中似乎更容易部署和维护。
根据使用情况,您can在单个容器内运行多个进程,尽管我不建议这样做。
从某种意义上说,在不同的容器中运行它们甚至更简单。保持容器较小、无状态且围绕单个作业可以更轻松地维护它们。让我告诉你我的容器工作流程是如何处于类似情况的。
So:
- 我有一个带有 nginx 的容器,该容器暴露于外界(:443,:80)。在此级别,可以直接管理配置、TLS 证书、负载均衡器选项等。
- 一个(或多个)包含应用程序的容器。在这种情况下,带有应用程序的 php-fpm 容器。 Docker镜像是无状态的,容器挂载并共享静态文件的卷等等。此时,您可以随时销毁并重新创建应用程序容器,保持负载均衡器正常运行。此外,您可以在同一代理(nginx)后面拥有多个应用程序,管理其中一个应用程序不会影响其他应用程序。
- 用于数据库的一个或多个容器...同样的好处也适用。
- Redis、Memcache 等
有了这种结构,部署是模块化的,因此每个“服务”都是分离的,并且在逻辑上独立于系统的其余部分。
作为副作用,在这种特殊情况下,您可以这样做零停机部署(更新)应用程序。这背后的想法很简单。当您必须进行更新时,您可以使用更新的应用程序创建一个 docker 映像,运行容器,运行所有测试和维护脚本,如果一切顺利,您可以将新创建的容器添加到链(负载均衡器)中,并且轻轻地杀死旧的。就是这样,您已经更新了应用程序,而用户根本没有注意到它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)