php - Docker 最佳实践 : single process for a container

标签 php nginx docker virtual-machine dockerfile

docker best practices指南指出:

"...您应该只在单个容器中运行单个进程..."

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

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

最佳答案

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

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

所以:

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

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

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

关于php - Docker 最佳实践 : single process for a container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999865/

相关文章:

php - 是否可以防止从站点下载视频

Docker容器卡在exec命令上

php - 单击按钮时将 JSON 从 PHP 返回到 ajax

php - 单击<a> href链接后如何插入数据库?

nginx - 配置 Nginx 以忽略 url 中的路径

javascript - Nginx音频文件(wav/ogg/mp3)无法正常工作

docker 构建日志与我习惯的不同

docker - 在哪里从 Dockerfile、主机或中间容器执行 RUN 命令?

php - 复合 CHtml::listData 值

nginx - Dockerizing nginx 和 Flask