我应该如何容器化需要 apache/php/mysql 的应用程序,并具有经过身份验证的公共站点体验?



我花了几个月的时间构建一个应用程序,现在我希望部署它,但我是 Docker 的新手,在实际容器化我的应用程序时,我似乎有大脑阻塞。 我需要运行以下技术:

  • 菲律宾比索 7.2
  • MySQL 5.7
  • 阿帕奇 2.4
  • phpMyAdmin 4.7

我的应用程序需要仅通过https提供,我假设我的应用程序和mysql容器之间的连接也需要通过安全端口。

除此之外,我还有一个wordpress站点,它将作为我的应用程序的登录前体验,我想dockerize,但不应该共享同一个数据库。当我将其移动到生产环境时,我将不包括phpMyAdmin容器。

我需要多少个容器?我以为我至少需要 5 个:

  1. 阿帕奇
  2. .php
  3. MySQL (我的应用程序)
  4. MySQL (WordPress)
  5. phpmyAdmin

我的应用程序和 worpress 站点应该存在于 php 容器中吗?还是应该为每个容器创建单独的容器。

我的 docker-compose.yml 文件和 dockerfile 应该是什么样子才能实现这一壮举?

这里的驱动思想是容器应该包含一个"服务"。 您不会按软件组件(php,apache等)将内容分解为容器,而是根据需要组合以创建单个服务的任何内容。 因此,如果您的应用程序是由 Apache 托管的 PHP 应用程序,那么您需要一个包含 PHP、Apache 和应用程序代码的应用程序容器。 这将提供您的应用程序即服务。

Wordpress也是如此。 如果Wordpress在Apache后面运行并且需要PHP,你可以创建一个包含PHP,Apache,WordPress和WordPress内容的第二个容器,产生你的"Wordpress服务"。

每个单独的数据库都可以被视为一个服务,因此您可能需要两个运行MySQL的容器,一个为每个数据库提供服务。 您可以选择将数据库服务器视为一个整体服务,并让它同时为两个数据库提供服务。 然后你可以逃脱一个MySQL容器。 你走哪条路是一个小问题。 拥有单个数据库服务器可能会通过避免一些重复来节省一点资源。

如果所有服务都需要相互通信,使用 Docker 执行此操作的最简单方法是使用 Docker Compose。 这使您可以创建多个容器,这些容器相互了解,并且可以通过 Docker Compose 提供的一些简单 DNS 逻辑非常轻松地相互通信。 使用 Compose,您可以为每个容器指定一个简单的名称,然后可以通过 DNS 查找该名称以提供每个容器的 IP 地址。 例如,如果您的 MySql 容器被命名为"mysql",您的应用程序容器可以通过 DNS 地址"mysql"连接到它,而无需您进行额外的工作。

相关内容

最新更新