由于缺乏经验,我提出这个问题,我需要专业的建议。SO 中的问题主要是如何使用在单个 Web 主机上运行的 Docker 来部署或托管多个网站。这是可以做到的,但对于中等流量的网站来说这是理想的选择吗?
\n我在本地计算机上部署基于 Docker 的容器进行开发。软件容器具有主应用程序的副本,以及所有依赖项 \xe2\x80\x94 库、语言、框架和其他所有内容。
\n对我来说,将 \xe2\x80\x9cdocker-compose.yml\xe2\x80\x9d 或 \xe2\x80\x9cdockerfile\xe2\x80\x9d 迁移到任何远程 Web 服务器变得很容易。所有软件和依赖项都已安装,并且将像我的本地计算机一样运行。
\n(比如说)我有一个 VPS,我想使用 Docker 托管多个网站。我唯一需要配置的是端口,以便域可以映射到端口 80。为此,我必须使用额外的 NGINX 进行路由。
\n但 VPS 可以用来托管多个网站,而不需要容器化。那么,在 AWS、Google、Hostgator 等 Web 服务器中运行 Docker 是否有任何特殊好处,或者 Docker 是否最好或仅适合在本地计算机中进行开发,而不是部署在 Web 服务器中进行托管。
\n在我看来,docker 对于简单网络托管的主要好处如下:
隔离每个网站/服务可能有不同的依赖关系要求(一个可能需要 php 5,另一个需要 php 7 和另一个 Nodejs)。
关注点分离如果您将设置分成多个容器,您可以轻松升级或替换其中的一部分。(只需考虑有 2 个网站的设置,每个网站都需要一个 postgres 数据库。如果每个网站都有自己的数据库容器,那么在提升其中一个网站的 postgres 版本时不会出现任何问题,而不会影响另一个网站。)
可重复性,您可以构建一次 Docker 映像,在验收时对其进行测试,将完全相同的映像提升到暂存阶段,然后再提升到生产环境。您还可以在本地拥有与服务器上相同的环境
环境和设置您的每项服务可能依赖于不同的环境(例如 smtp 设置或数据库连接)。使用容器,您可以轻松地为每个容器提供特定的环境变量。
安全性人们可能会争论这一点,因为容器本身在安全性方面不会为您做太多事情。然而,由于更容易的依赖升级、独立的网络等,大多数人最终会得到更安全的设置。(这里再次考虑一下数据库容器,它们可以与您的应用程序/网站容器共享网络,并且无需在本地公开端口。)
请注意,您应该小心使用 docker 端口映射。它使用 iptables 并将覆盖大多数防火墙(如 ufw)的默认设置。这里有一个存储库,其中包含有关如何避免这种情况的信息: https: //github.com/chaifeng/ufw-docker
此外,还有很多项目可以自动将请求路由到应用程序(在本例中为容器),非常有趣且简单。他们通常还集成了一种正确的方法来执行 ssl 终止。如果您设置一个具有多个容器的网络服务器,并且这些容器都应该可以通过端口 80 和 443 访问,我强烈建议您研究traefik 。
| 归档时间: |
|
| 查看次数: |
14780 次 |
| 最近记录: |