14. 虚拟化

未匹配的标注

如果你的应用程序在开发阶段与生产阶段的运行环境不一致,可能会在上线时遇到各种奇怪的 BUG 。在团队开发过程中,要让不同开发环境的所有成员都统一保持最新版本的软件和类库, 也是一件很让人头痛的事情。

如果你是 Windows 上开发并需要部署到 Linux (或其他非 Windows 的操作系统),或者是团队协同开发的时候,应该考虑使用虚拟机。这听起来挺麻烦的,但除了众所周知的虚拟化环境(如 VMware 或 VirtualBox )之外,还有很多工具可以帮助你通过几个简单的步骤便可设置好虚拟环境。

Vagrant

Vagrant 帮助你在已知虚拟环境的基础上直接构建自己的虚拟 Box,而配置这个环境只需要一个配置文件。你可以直接手动创建和配置 Box,也可以使用自动部署工具,如 PuppetChef 。通过配置 Base Box 可以快速配置多个完全一致的 Box ,再也不用维护复杂的配置命令列表。你无需执行许多手动步骤,就可以随时删除、重建一个全新的Base Box。

Vagrant 通过创建共享文件夹,用于在主机和虚拟机之间同步代码,这意味着你可以在主机上创建和编辑文件,然后在虚拟机内运行代码。

帮助

下面有一些服务, 可以帮助你更好的使用 Vagrant:

  • Puphpet: 用来构建 PHP 开发虚拟机的简单 GUI,主要侧重于 PHP。除了本地 VM 之外,它也可以用于部署到云服务。
  • Phansible: 提供一个易于使用的界面,帮助你为 PHP 的项目生成 Ansible 的 Playbook(自动化部署脚本)。

Docker

Docker - 完整虚拟机的轻量级替代品 - 之所以这么叫,是因为它全都与 “容器” 有关。容器是一个构建块,在最简单的情况下只执行一项特定的工作,例如运行 web 服务器。“镜像” 是用于构建容器的包 - Docker有一个装满镜像的存储库。

一个典型的 LAMP 应用程序可能有三个容器:web 服务器、PHP-FPM 进程和 MySQL。与 Vagrant 中的共享文件夹一样,你可以将应用程序文件留在原来的位置,并告诉 Docker 在哪里可以找到它们。

你可以通过命令行生成容器(请参见下面的示例),或者为了便于维护,为你的项目构建一个 docker-compose.yml 文件,指定要创建的容器以及它们之间的通信方式。

如果你正在开发多个网站,并且希望每个网站安装在单独的虚拟机上来实现分离,却又没有足够的磁盘空间或时间,来保证所有内容保持最新,这种情况下 Docker 可能会派上用场。它的效率很高:安装和下载速度更快,无论使用频率如何,你都只需为每个镜像存储一个副本,容器可以用更少的 RAM 共享相同的操作系统内核,因此可以同时运行更多服务器,停止和启动它们只需几秒钟,无需等待服务器完全启动。

例子: 在 Docker 里运行 PHP 应用

安装 Docker 后,只需一个命令即可在你的计算机上启动 web 服务器。下面的命令将下载一个功能齐全的 Apache 和 最新版本的 PHP 。并把 /path/to/your/PHP/files 映射到文档根目录,可以通过 http://localhost:8080 访问:

docker run -d --name my-php-webserver -p 8080:80 -v /path/to/your/php/files:/var/www/html/ php:apache

这会初始化并启动容器,-d 指令使其在后台运行。只需运行 docker stop my php webserverdocker start my php webserver 即可停止或启动容器(不需要其他参数)。

了解更多关于 Docker 的信息

上面的命令教你如何快速创建简单的服务器。你还可以做更多的事情(在 Docker Hub 上有数以千计构建好的镜像)。 花点时间了解术语并阅读 Docker用户指南,方便最大限度地利用它。不要在没有检查安全性的情况下运行下载的代码 —— 非官方镜像可能没有最新的安全补丁。如有疑问优先选择 官方仓库

PHPDocker.io 能自动生成全栈的 LAMP/LEMP 服务器,包含你自选的 PHP 版本和扩展。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/php-the-right-w...

译文地址:https://learnku.com/docs/php-the-right-w...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 查看所有版本


暂无话题~