在我们开始构建运用程序之前,先理解一下如何在Docker中运行一个PHP脚本。我们从编写一个经典的Hello World开始
PHP脚本如下:
<?php echo "Hello World!";
你可以在虚拟机或者条记本的终端上运行这个脚本(假设你已经安装了PHP)。你该当可以看到终端输出 Hello World !
Docker 镜像先容
Docker 在一个容器中运行每个进程。所有这些容器都在主机上运行,这是你在这本书里的电脑。一旦运用程序准备好进入生产环境,做事器(或多个做事器)将充当 Docker 主机。
每个运行的容器后面都有一个“镜像”。Docker 镜像是由软件开拓职员利用 dockerfile 创建和掩护的。换句话说,如果您想从头创建自己的 Docker 镜像,那么首先要创建一个新的Dockerfile,然后“构建”一个镜像,然后在容器中 “运行” 该镜像。
常日我们不须要从头构建镜像。大多数盛行的软件(包括PHP)都有由软件开拓职员或感兴趣的社区掩护的镜像。在这没必要构建一个全新的镜像,但是稍后我们将会讲解到如何通过编写自己的 Dockerfile 来扩展现有镜像。
Docker 镜像可以构建并存储在主机上,也可以保存在远程 "registry" 中。除了掩护核心的Docker 平台之外,Docker 团队还掩护一个名为 Docker Hub 镜像管理平台,在这里可以免费存储公共镜像。大多数开源软件团队在 Docker Hub 上托管官方镜像,包括 PHP。
获取PHP Docker 镜像
为了在容器中运行 hello.php 脚本,首先须要为 pull 一个 PHP 镜像,选择 PHP 的最新稳定版本。在终端中实行:
$ docker pull php:latest
在你的终端该当可以看到类似这样的东西:
latest: Pulling from library/php7d63c13d9b9b: Pull complete24b15dfd3cfa: Pull complete64625c2e355f: Pull complete275a8dd8f358: Pull complete25140c092894: Pull complete48e615a81d63: Pull complete5b1d56720240: Pull complete16d610fad528: Pull complete68ac649f8fe5: Pull complete
这表示 Docker 正在拉取 PHP 最新版镜像。当拉取完成时,在终端会显示一个如下的状态,表明它已经获取了最新的版本:
Digest: sha256:16573d7e56efa328e59066205870e66c0ad851491df9d0ee66c05bbe4961f8edStatus: Downloaded newer image for php:latest
把稳:“latest”标记是大多数 Docker 映像用于其软件的最新版本的标准约定。不要不加区分地利用“latest”,由于它会自动检索到“latest”版本,纵然有重大的版本变动。
由于 hello.php 脚本很大略,以是我们利用哪个版本的PHP并不主要,但是如果我们须要为一个现有项目运行一个旧版本的PHP呢? 这是 Docker 真正的亮点,由于我们只须要在运行Docker pull时指定PHP版本。例如,下载PHP 5.6镜像,只需运行如下代码:
docker pull php:5.6
我们也可以利用这个方法来得到最新的、未发布的PHP版本(假设 PHP registry's list 中至少有一个Beta 版本)。这对付须要常常利用多个 PHP 版本的开拓职员非常有帮助。
将代码放入容器中
为了更好的往下进行,您必须轻微理解 Docker 如何访问主机系统上的文件。一个正在运行的容器不能直接读取或写入文件到您的打算机—容器实质上它是独立的系统。相反,我们要运行的容器数据来自于主机中挂载的 volume 或者在构建镜像时添加代码。
在本书的后面,我们将先容如何用 Dockerfiles 构建 Docker 映像并以这种办法添加代码,但是对付这个大略的 Hello World! 示例,我们将 hello.php 的目录文件挂载到我们须要运行的PHP容器中。
在Docker中运行Hello World脚本
现在我们已经从Docker Hub中获取了一些PHP镜像,并且对Docker如何利用卷有了一些理解,我们可以在终真个容器中运行我们的脚本:
docker run --rm -v $(pwd):/app php:latest php /app/hello.php
如果统统精确,该当可以看到输出Hello World!。恭喜你在Docker中运行了第一个PHP脚本!
它是如何运行的?
让我们回顾一下Docker命令以及它的含义:
docker run - 这是Docker的命令 在新容器中运行命令.有很多选项可供您输入,但我们将从根本知识开始。--rm - 这见告Docker在命令运行后“删除”容器。 或者,您可以保存容器以再次运行它,但如果您终极没有删除容器,它会占用空间,因此在大多数情形下最好设置删除选项。-v $(pwd):/app - 这是Docker的命令 mount a volume. 常日,您将路径通报到主机系统、冒号、以及容器中文件夹的路径上。 卷是一个强大的工具,但是对付这个大略的示例,我们只是将当前目录(利用$(pwd))从终端挂载到新的 Docker 容器中的 /app 目录中。php:latest - 这表示我们为这个容器利用的镜像。您也可以指定其他的PHP镜像(例如:PHP:7.0或PHP:5.6)来利用该措辞的特定版本。php /app/hello.php - 末了,这是 Docker 将在容器中运行的命令。由于我们将代码挂载在容器的/app目录中,因此必须从该目录运行脚本。现在您已经对 Docker 有了基本的理解,并且可以在容器中运行 PHP 脚本,现在是时候构建一些更有用、更有趣的东西了。可以大略的安歇一下,并阅读一些关于 Docker 的资料(https://doc,docker.com/) ,当您准备好之后,请连续阅读本文,开始在 Docker 中构建 PHP web 运用程序。