第二章 . 在 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/php
7d63c13d9b9b: Pull complete
24b15dfd3cfa: Pull complete
64625c2e355f: Pull complete
275a8dd8f358: Pull complete
25140c092894: Pull complete
48e615a81d63: Pull complete
5b1d56720240: Pull complete
16d610fad528: Pull complete
68ac649f8fe5: Pull complete
这示意 Docker 正在拉取 PHP 最新版镜像。当拉取实现时,在终端会显示一个如下的状态,表明它曾经获取了最新的版本:
Digest: sha256:16573d7e56efa328e59066205870e66c0ad851491df9d0ee66c05bbe4961f8ed
Status: 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 应用程序。