gpt4 book ai didi

php - Dockerized PHP应用程序架构最佳实践

转载 作者:行者123 更新时间:2023-12-02 21:27:51 25 4
gpt4 key购买 nike

我是Docker的新手。我在开发环境中与Docker一起玩了很多游戏,但是我只尝试部署一次真正的应用程序。

我已经阅读了大量的文档并观看了许多视频,但仍然有很多问题。
我确实知道Docker只是可以以多种不同方式使用的工具,但是现在我正在尝试寻找开发和部署Web应用程序的最佳方法。

我将使用真实的PHP App案例使我的问题更加具体和实用。
为了简单起见,假设我正在构建一个非常简单的PHP应用程序,所以我需要:

  • Web服务器(nginx)
  • PHP解释器(php-fpm或hhvm)
  • SESSION的持久性存储

  • 我能找到的最好的示例/教程是 this one year old post。迪伦提出了这种结构:

    他对整个PHP项目文件和日志使用 仅数据容器进行操作,并使用 docker-compose通过适当的链接运行所有这些图像。在开发环境中,我将主机目录挂载为数据卷,在生产环境中,我将文件直接复制到“仅数据镜像”并进行部署。

    这是可以理解的。我确实想在 nginxphp-fpm之间共享数据。 nginx需要访问静态文件(.img,.css,.js ...),而 php-fpm需要访问PHP文件。并且两个服务是分开的,因此可以独立更新/更改。

    仅数据容器共享一个 data volume,通过 nginx选项链接到 php-fpm--volumes-from

    但据我了解-仅数据容器和 -v标志存在问题。
    Official Docker Documentation表示 data volume是专门指定的用于保留数据的目录!据说

    Data volumes persist even if the container itself is deleted.



    因此,该解决方案非常适合我不想丢失的数据,例如 session 文件,数据库存储,日志等。但是不适用于我的代码文件,对吗?我确实想更改我的代码文件。我想部署更改而不重建 nginxphp-fpm图像。

    另一个问题是,当我尝试这种方法时,直到停止所有正在运行的容器,删除它们及其镜像并完全重建它们之后,我才能部署代码更改。只是重建和部署“仅数据”镜像没有任何作用!

    当数据直接存储在Interpreter容器中时,我已经看到了其他一些实现,但这不是一个选择,因为我还需要 nginx才能访问这些文件。

    问题是在哪里将项目代码文件放在哪里以及如何 部署此类应用程序的最佳实践是什么?

    谢谢。

    最佳答案

    是的,不要为您的代码使用数据量。 docker-compose指出了重新使用旧卷的重要性(这样就不会丢失数据),因此您总是会被旧代码所困扰。

    使用COPY指令在nginx Dockerfile中添加静态资源,并在应用程序(phpfpm)COPY中添加Dockerfile以添加代码。在开发人员中,您可以使用主机卷,这样就不必重新启动容器即可查看代码更改(假设Web服务器支持提取更改)。

    关于php - Dockerized PHP应用程序架构最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994334/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com