大多数 WordPress 站点采用 LNMP(Linux+Nginx+MySQL+PHP)架构,而 LNMP 一般是直接安装在系统里。这会导致一个问题,就是系统、软件、数据都糅合在一起,没有明确的边界。
借助 Docker 这类容器技术可以很好地隔离站点,那么,我们是否有必要将 WordPress 站点容器化?
容器化的优势
容器化具有大量的优势,否则 Docker、Podman、K8S 这类产品也不会如此热门。用容器来托管 WordPress 优势也很明显——
- 快速部署。传统裸机安装各种软件很容易出错,配置繁琐不说,编译时间还长。如果使用 Docker,则只需要编写好 compose 文件,就可以一条命令将站点批量上线。
- 站点隔离、独立管理。无论是裸机还是容器,当服务器上有多个站点时,一般都是用 Nginx 配置文件来反代到特定的站点。区别在于,传统模式下,我们很难独立去管理单个站点的启动、停止、重启,而借助容器,我们可以轻松对特定站点进行操作。
- 数据隔离、便于迁移。添加站点容易,迁移站点却很麻烦,为什么呢?因为系统、程序和数据是混杂在一起的,迁移站点时任何一处出现错误都可能导致网站异常。但如果使用的是 Docker,那么只需要导出 compose 文件,再从容器挂载的卷里导出数据,在新的服务器上导入即可。
- 安全。WordPress 是全球使用最多的 CMS,大量黑客都贪婪地盯着这块肥肉。如果是用传统方式运行,那么一个站点被攻破后,很可能导致整个服务器都被控制。另外,一个站点被攻击时,很可能会耗尽整个服务器的资源,导致整个服务器宕机。容器的隔离机制可以避免以上问题,限定资源的情况下,某个站点被入侵,或者资源占用飙升,都不会影响其他站点的继续运行。
既然容器拥有这么多优势,那么,是不是建议把所有 WordPress 站点都容器化呢?下面我们分情况来判断。

实操建议
无论是在新的服务器上创建新的站点,还是改造已有的 WordPress 站点,在做出决定之前,有几个因素是我们必须要考虑的。
一、服务器资源是否充足
容器可以让应用更加稳健,但这是在服务器资源充足的情况下。
每一个容器可以看作是独立的操作系统环境,这本身会占用部分资源;如果有多个 WordPress 站点,那么从资源隔离的角度,虽然可以共用一个 Nginx,但数据库最好能够独立运行。
比如传统模式下只需要安装一套 Nginx+MySQL+PHP 环境,之后添加虚拟主机和安装 WordPress 程序,多个站点通常共用一个数据库。而使用容器时,则有几个站点就要有几个数据库,导致资源占用翻倍。当资源不足时,容器很可能会被踢下线,造成服务中断。
耕读君在之前申请的甲骨文服务器上测试过,一个 WordPress 站点刚运行起来,没有添加任何内容的情况下 MySQL 容器就占用了 500MB 左右的内存。因此,假设网站的数据量和访问量接近,在传统模式下,一台 2C2G 的入门级小 VPS 能撑起4、5个 WordPress,但是用容器的话,则内存很可能就会被耗尽。
二、是否掌握了容器相关技术
传统部署模式比较繁琐,但因为技术成熟,网上有大量逐步操作的教程,而且也有 Oneinstack 这类工具,可以帮助小白用户在服务器上完成部署。
使用容器则需要额外花时间学习相关技术,包括理解镜像、容器、卷、网络等概念和关系,要学会编写 compose 等等。另外,镜像作者将许多应用都封装好了,暴露的操作和接口都要查阅作者编写的手册。如果手册不够详细,也会给用户带来额外的试错成本。
三、是否有技术迁移的必要性
无论是程序还是网站,在它运行正常,能够满足业务需求的情况下,最好的建议是保持现状。
我们运营网站的最终目的并不是为了探索新的建站技术,而是通过网站获取流量,转化成营收。技术是我们达成目的的工具,而不是目的。所以当现有的技术能够满足需求,没有变更的紧迫性时,就不要去改变它。
如果服务器资源不充足,那么裸机运行会更高效,不必为了容器化而花钱扩容;如果没有掌握容器技术,可以在虚拟机等环境下学习,等以后有需要的时候再应用。总之,一切应以业务需求为主。