在我们开始构建运用程序之前,先理解一下如何在Docker中运行一个PHP脚本。
我们从编写一个经典的Hello World开始

PHP脚本如下:

<?php echo "Hello World!";

你可以在虚拟机或者条记本的终端上运行这个脚本(假设你已经安装了PHP)。
你该当可以看到终端输出 Hello World !

docker执行php脚本Docker PHP 入门实践二 Ruby

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 运用程序。