【问题标题】:How to Dockerize a PHP app如何 Dockerize 一个 PHP 应用程序
【发布时间】:2017-01-13 21:59:42
【问题描述】:

我试图了解通过 Docker 部署 PHP Web 应用程序的一般过程。我有一个用 LAMP 开发的网络应用程序。

到目前为止,我了解到我首先必须下载并安装 Docker 本身。之后我必须安装 Docker Composer。然后使用 Composer,我必须创建一个包含我的服务器 (Apache) 映像的容器。

这就是我感到困惑的地方。然后我必须为我的数据库创建一个容器,为应用程序本身(包含代码的目录)创建另一个容器,还是为服务器、数据库和应用程序创建一个容器?

我不需要详细的解释,只是过程背后的大致思路,其余的我可以自己弄清楚

感谢任何可以提供任何帮助的人。

【问题讨论】:

  • 从一个容器运行多个服务通常是一个坏主意,所以是的,您应该为您的数据库有另一个 docker 容器(它的数据目录指向主机中的一个卷,否则数据会如果您更新/更改容器,则会丢失)。

标签: php apache docker


【解决方案1】:

best practices 建议每个进程/服务有一个 Docker 容器(一个容器用于 Apache + PHP,另一个容器用于 MySQL 等等)但这只是一个指导方针,并不意味着你不能只有一个容器,里面装着你需要的一切。

如果您决定只使用一个容器来运行所有服务,则只需使用Docker(引擎)就可以了。在这种情况下,您仍然可以使用 Docker Compose,但实际上并没有必要。

当您必须运行多个容器时,Docker Compose 会更有帮助。只需一个命令,您就可以启动并运行所有容器。同样在这里您只能使用 Docker 引擎,但您需要手动运行每个容器。

【讨论】:

    【解决方案2】:

    可以有很多方法,但最简单的方法是在一些 linux 机器上安装 docker,编写一个 docker 文件来安装和配置所有必需的组件,例如 apache、php、mysql 等,以及然后在容器内获取您的应用程序代码或将其作为外部卷从主机附加。

    dockerfile编写完成后,可以使用docker build命令构建docker镜像,镜像构建完成后可以在本地使用或者推送到dockerhub,或根据需要将其推送到您的私人码头登记处。

    另一种选择是,如果您只是想测试,您可以从 dockerhub 中提取一个 已经存在的图像,其中包含 LAMP 堆栈,然后您只需要执行 docker在将您的 php 应用程序附加为 外部卷 的图像上运行。

    当然,要访问 docker 外部端口 80 或 443 上的应用程序,您必须在 docker 文件中或在 docker run 命令时公开这些端口。

    对于测试环境,您可以在一个容器中运行所有服务。

    对于较大的部署,您可以考虑使用容器编排服务,例如 DockerSwarmKubernetes。您还可以尝试 DC/OS from MesoSphere,方法是从他们的 github 存储库中获取一个 vagrant 文件,该文件将为您在单台机器上设置 DC/OS。然后,您可以在 Mesos 上启动任意数量的服务。它们为服务安装、容器管理和扩展提供开箱即用的支持。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多