利用Docker-Compose实现本地开发环境
我很荣幸最近在cPanel Conference 2018上谈论Docker如何对开发人员有用。很难将所有内容都放在紧密的谈话格式中,并且在演讲后给予观众反馈,我希望这篇文章有用。
那么这一切又是什么呢?正如您现在可能听到的那样,Docker可能主要被称为生产操作系统级虚拟化环境 - 但它的实用程序并不止于此。在WHMCS,我们使用Docker进行了近三年的本地开发并取得了巨大的成功。让我们来看看到达那里需要什么。
首先,对于那些不熟悉Docker的人来说 - 它是一个使用容器执行操作系统级虚拟化的软件包。在一个非常基础的层面上,它允许在称为“容器”的封闭环境中运行Apache或MySQL等软件,可以在几秒钟内启动或停止。从某个角度来看,它可能会与虚拟机进行比较,但是它会产生更少的开销,并且允许运行多个容器而不会使主机OS过载。
Docker环境软件适用于所有主要操作系统,包括Linux,macOS和Windows。虽然特定于操作系统的实现可能会发生变化,但最终结果是相同的 - 您可以以相同的干净,可移植和可扩展的方式在各种主机操作系统上运行Docker容器。
值得注意的是,Docker容器旨在运行单个进程。该过程定义容器的生命周期 - 一旦进程退出,容器就会停止。但是,为了支持Web应用程序,我们通常需要多个软件应用程序 - 例如用于Web服务器的Apache + PHP,用于数据库服务器的MySQL等等。由于Docker容器旨在运行单个进程,这意味着我们需要多个容器才能运行Web应用程序。使用名为“docker-compose”的工具很容易实现。它在Docker环境的标准发行版中可用,旨在同时启动,运行和停止多个容器,同时允许它们使用虚拟网络在彼此之间进行通信。
使用Docker进行本地开发可能听起来有点过分,但它有助于解决大多数Web应用程序软件开发人员遇到的以下问题:
通过统一软件运行时设置,Docker可帮助您重现客户报告的设置并消除多个开发人员计算机之间的差异。如果它打破了你同事的设置,你几乎可以放心它会破坏你的同事。
由于不同的软件组件彼此分离(几乎就像它们在不同的主机上运行一样),您可以安全地升级PHP,而不用担心它会对MySQL服务器做什么。
出于同样的原因,交换不同的容器变得更加容易 - 例如,在4个主动支持的PHP版本中的任何一个之间切换不会超过几秒钟。
如果您需要特定的应用程序,您几乎总能在Docker Hub上找到它,这是预构建的Docker镜像的官方存储库。如果您找不到某些内容,可以使用易于使用的文件格式快速修改和扩展Docker镜像。
使用一组Docker容器进行本地开发的一个鲜为人知的好处是能够将它们用作运行自动化测试的环境。然而,这将成为单独文章的主题 - 但如果您需要,可能存在。
每个软件应用程序在容器内的Docker中运行。每个容器都使用通常称为“Dockerfile”的文件进行描述。
它包含告诉Docker如何准备容器以满足您需求的说明。第一行指定要开始的图像 - 它从Docker Hub自动下载。在这种情况下,我们将从运行Apache和PHP 7.2的映像开始。
要同时运行多个容器,我们使用名为“docker-compose.yml”的文件:
它将同时启动多个容器。在上面的屏幕截图中,您可以看到其中包含多个容器的“services”节点。一个这样的容器是“web”,它被指示开始使用特定的“dockerfile”。您还可以看到“卷”节点,它指示主机文件系统的哪些部分应映射到容器内的特定路径。这允许我们的Web容器使用其内置的Apache / PHP堆栈轻松地为我们的应用程序文件提供服务。
要启动容器集,可以使用docker-compose工具并指定docker-compose.yml文件。幸运的是,所有这些步骤都封装在我们将在下面讨论的启动脚本中。
为了让您快速上手,我们准备了一个您可以克隆的GitHub存储库。按照以下步骤开始:
1。如果尚未设置Docker环境,请访问https://www.docker.com并下载适用于您的操作系统的Docker发行版。运行安装并确保它已设置并运行。
2.克隆样板库:https ://github.com/arkamax2k/docker-php-dev
3.在终端中,切换到新创建的目录并启动容器:
$ docker / tools / start.sh
完成 - 你是现在运行一个功能齐全的PHP Web开发环境。打开localhost:8081确认:
您可以使用提供的按钮确认您的环境是否按照您的需要进行设置。要更改PHP版本,请转到终端,从Docker运行Ctrl-C,然后使用带有可选参数的启动脚本:
$ docker / tools / start.sh --php 72
有关更多示例,请参阅GitHub上的文档和一个高级用法部分。所有PHP版本都包含Xdebug,因此您甚至可以直接使用调试器。