第二章 . 在 Docker 中运行 PHP 脚本

在咱们开始构建应用程序之前,先理解一下如何在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](https://docs.docker.com/engine/tutorials/dockervolumes/). 通常,您将门路传递到主机零碎、冒号、以及容器中文件夹的门路上。 卷是一个弱小的工具,然而对于这个简略的示例,咱们只是将当前目录(应用$(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 应用程序。