尝试各种 PHP 执行环境!Docker 才是 2016 年的潮流!

大家好,
我是开发团队野生队的成员 Mandai。
如果您想使用 Docker 创建时尚的开发环境,为什么不尝试使用 Docker Build 创建自己的 Docker 镜像呢?
拥有一个易于使用的 Docker 镜像将使您在配置方面拥有更大的灵活性!
这是 Docker 入门系列文章中的一篇。
如果您想阅读之前的 Docker 入门系列文章,请点击下方链接。
请注意,这不是一个复制粘贴就能完成的系列,因为它无法通过复制粘贴来实现。
关于 PHP 执行环境
Docker Hub 上的 Docker 镜像质量很好,可以直接使用,没有任何问题。
- 例如,您可能需要更精确地指定存放源文件的目录。
- 我想用 PHP 中的 ffmpeg 对音频文件进行编码。
- 我想使用带有大量扩展模块的PHP。
为了满足这些要求,我认为唯一的选择就是我们自己重新构建 Docker 镜像。
在许多情况下,可以通过修改现有的 Docker 镜像并重新构建来解决此问题,但也可以在编译 PHP 时包含该模块。Docker 构建使用 Dockerfile 完成,Dockerfile 相当于操作手册,可以清晰地说明正在执行的操作。
换句话说,你当前使用的 Docker 镜像中也包含一个 Dockerfile,如果你对该 Dockerfile 进行一些修改并重新构建,就可以得到你想要的最佳 Docker 镜像。
此外,Dockerfile 实际上都上传到了 GitHub,而且其中很多都是开源的(官方 Docker 镜像的开源倾向更为明显),因此它是查看各种 Dockerfile 并借鉴其方法的绝佳场所。
这次,我想以官方 PHP Docker 镜像为参考,创建一个包含多字节兼容 PHP 的 Docker 镜像。
首先,找到基础 Docker 镜像。
通过查看 Docker Hub 上列出的 Docker 镜像,很容易找到一个与你想要创建的镜像接近的版本。这次,我官方的 PHP Docker 镜像为基础,并进行一些修改。在该页面上,有一个指向 GitHub 上托管的 Dockerfile 的链接。
我通过链接 (7.0/apache/Dockerfile) 找到了一个用于创建 PHP 7.0 系列 + Apache Docker 镜像的 Dockerfile 文件。
我将以此为基础,在虚拟机上克隆这个仓库并进行一些修改。
cd ~ vagrant@vagrant:~$ git clone https://github.com/docker-library/php.git vagrant@vagrant:~$ cd /home/vagrant/php/7.0/apache
在 ./configure 选项中添加“--enable-mbstring”。
另外,创建一个测试 PHP 文件并将其复制到 Docker 镜像中。
vi Dockerfile # Dockerfile,大约在第 59 行 && ./configure --enable-mbstring # ← 添加 --with-config-file-path="$PHP_INI_DIR" # 将以下 COPY 命令添加到 Dockerfile 中的相应位置 # 我将其添加到 WORKDIR /var/www/html 之前。 COPY mbstring.php /var/www/html/
使用 Docker 构建编译 PHP
修改完成后,创建 mbstring.php 文件。
echo "<?php echo mb_convert_kana('1234567890', 'N');" > mbstring.php
创建完成后,尝试运行 docker build 函数。
vagrant@vagrant:~/php/7.0/apache$ docker build -t myphp7 .
上次构建不同,这次构建会花费相当长的时间,因为 apt-get 更新和其他一些任务会频繁运行。
构建完成后,尝试从 Docker 镜像创建 Docker 容器。
vagrant@vagrant:~/php/7.0/apache$ docker run -it myphp7 /bin/bash root@66c8bbc720a9:/var/www/html# ls mbstring.php root@66c8bbc720a9:/var/www/html# service apache2 start [...] 启动 Web 服务器:apache2AH00558:apache2:无法可靠地确定服务器的完全限定域名,使用 172.17.0.3。请全局设置“ServerName”指令以抑制此消息。确定 root@66c8bbc720a9:/var/www/html# curl http://localhost/mbstring.php 1234567890root@66c8bbc720a9:/var/www/html#
它执行一条将半角数字转换为全角数字的命令,然后完成,转换成功,没有任何问题。
你不需要从零开始,但如果你找到一个相对简单的 Dockerfile 并以此为基础,应该可以快速构建完成。官方的 PHP Docker 镜像甚至没有包含 vim,所以如果你想修改内部配置,使用 apt-get 安装 vim 应该不成问题。
使用 Vagrant 创建虚拟环境时,文件大小是一个需要考虑的问题,但创建 Docker 镜像时,文件大小会减少到原来的四分之一(当然,这仅仅是 PHP 执行环境),因此更容易共享。此外,如果只共享 Dockerfile 和要包含在 Docker 镜像中的文件,也很容易在 Git 仓库中进行管理。
在开发初期构建环境时,能够将整个过程编译成一个命令有很多优势,因此,如果能够通过添加最佳编译选项来提供最佳执行环境,而不仅仅依赖 apt-get 或 yum,那就太好了。
就这样。
0