写点什么

Docker PHP 入门实践 (二)

作者:sunmking
  • 2022-11-04
    上海
  • 本文字数:2057 字

    阅读完需:约 7 分钟

Docker PHP 入门实践(二)

第二章 . 在 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. 通常,您将路径传递到主机系统、冒号、以及容器中文件夹的路径上。 卷是一个强大的工具,但是对于这个简单的示例,我们只是将当前目录(使用 $(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 应用程序。


发布于: 刚刚阅读数: 5
用户头像

sunmking

关注

还未添加个人签名 2018-03-27 加入

还未添加个人简介

评论

发布
暂无评论
Docker PHP 入门实践(二)_php_sunmking_InfoQ写作社区