之前有片文章讲过如何通过Docker来构建Laravel的开发环境,其实变通一下就能够在本地电脑上用Docker运行任何PHP项目,让任何PHP项目都能运行在Docker环境中主要是需要根据PHP项目的依赖制作PHP镜像的Dockerfile。这篇文章就主要讲一下如何根据需求制作PHP的Docker镜像文件。

1. 继承基础镜像

首先需要根据你的PHP项目对PHP的要求找到基础镜像,然后再在基础镜像的基础上按需安装PHP的扩展。在Dockerfile中使用FROM命令指定基础镜像。

From <image>
  • FROM 指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
  • FROM 必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从 FROM 语句开始。

这里我们打算制作一个PHP7.2的包括FPM的定制化镜像,所以首先在Dockerfile中指定基础镜像:

FROM php:7.2-fpm

2. 安装PHP扩展

定制PHP镜像的主要工作就是安装各种PHP扩展,在Dockerfile中PHP镜像安装扩展有三种方法,每种方法都有它特定的使用场景,下面依次来说。

2.1安装dockerhub中php官方提供的扩展

在DockerHub中提供了一些官方的PHP扩展,可以通过docker-php-ext-install脚本命令在Dockerfile中列出要安装的扩展,下面让我们的PHP镜像安装上常用的pdopdo_mysqlmcrypt这些扩展。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath

如果你需要对扩展指定一些自定义的编译参数的话,docker提供了另外一个有用的脚本docker-php-ext-configure来传递编译参数(一般情况下用不到)。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\&& docker-php-ext-install -j$(nproc) iconv \&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \&& docker-php-ext-install -j$(nproc) gd

2.2 使用PECL安装扩展

DockerHub上只是提供了一部分PHP的扩展,安装这些以外的扩展仍然需要PECL, 在Docker镜像中使用pecl install下载、编译、安装扩展然后使用docker-php-ext-enable

下面使用PECL安装了PHPredis还有grpc扩展。

RUN pecl install grpc \&& docker-php-ext-enable grpc \&& pecl install -o -f redis \&& docker-php-ext-enable redis \&& rm -rf /tmp/pear

2.3 源码安装扩展

有些扩展即无法使用docker-php-ext-install安装也无法通过PECL安装,只能通过源码编译安装(PHP扩展型的框架Phalcon就是这样,不过设置比较复杂,以后再讲), 在Docker中同样能够通过源码安装PHP扩展

RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \&& mkdir -p /tmp/xcache \&& tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \&& rm xcache.tar.gz \&& docker-php-ext-configure /tmp/xcache --enable-xcache \&& docker-php-ext-install /tmp/xcache \&& rm -r /tmp/xcache

讲在最后

文章重点讲了一下Docker中怎么安装PHP的扩展,其实还有其他很多与Docker相关的概念需要了解才能制作出自己需要的镜像文件,好在Docker官方教程里有详细的讲解,感兴趣的一定要按照教程的步骤自己实践一下。

现在服务的业务组织里服务端开发语言主要用Go,PHP更多的是一些老系统、管理后台或者活动类系统在用,最近两个月我写过的PHP代码数都能数过来,更多的时间还是在写Go代码。所以最近写的关于PHP类的技术文章也很少,之后有时间了会写如何在Docker里安装和配置Phalcon。

教你如何做出自己想要的PHP Docker镜像相关推荐

  1. 教你如何做出有创意的作品

    我们都知道创新对于一个设计师是多么重要的一件事,一个成功的设计作品可能往往就是那灵光一闪的创意.千锋教你如何做出有创意的作品.(来源:千锋UI) 我们想创意,要去生活中寻找灵感.越贴近生活越好,而不是 ...

  2. 互联网高手教你如何搜集你想要的信息

    互联网高手教你如何搜集你想要的信息 写在前面 几个月前,团队邀我做次内部的分享,主题是如何有效搜索信息.这是因为平时工作中,我经常会分享一些专业学习文档,而这些文档的出现往往很及时,回应一些我们自己项 ...

  3. 乔布斯的3个工作技巧:教你如何得到自己想要的

    史蒂夫乔布斯不仅仅创建了当代最有价值的两家公司,更重要的是,他给商业世界带来的影响力. 无论是创建苹果公司,还是之后的皮克斯公司,起步之时,乔布斯都面临过许多障碍.但是乔布斯用他自己的方式创造了属于自 ...

  4. 【Linux】22.当前运行的docker修改环境后,想在本地保存为镜像的方法

    当前运行的docker修改环境后,想在本地保存为镜像的方法 docker images 查看所有镜像 docker ps # 查看当前运行的镜像 docker commit -m="123& ...

  5. 【docker】查看docker镜像的版本号TAG,从远程仓库拉取自己想要版本的镜像

    [docker]查看docker镜像的版本号TAG,从远程仓库拉取自己想要版本的镜像

  6. 教你如何做出想要的PHPDocker镜像

    之前有篇文章讲过如何通过Docker来构建Laravel的开发环境,其实变通一下就能够在本地电脑上用Docker运行任何PHP项目,让任何PHP项目都能运行在Docker环境中主要是需要根据PHP项目 ...

  7. 他是“创业教父”,做出4家上市公司,秘诀6个字:找俗人,打呆仗!

    来 源:和牛财经  作 者:穆清 作为"携程"四君子之一的季琦,在前十余年的创业生涯中,先后创办携程.如家.汉庭三家市值超过百亿的上市公司,被誉为"创业教父". ...

  8. 《北大学霸教你快速学会你想学的任何知识》笔记

    一个前提:学会提问 两组概念:知识的分类,认知的分层 三个技能:思维过滤 + 个性笔记 + 高效记忆 四步提升:知识体系 + 学习迁移 + 元认知能力 + 知觉学习 一.学会提问 成为学霸的一个前提: ...

  9. 抖音短视频怎么制作?简单几步教你轻松做出火爆抖音的效果!

    抖音短视频怎么制作?如何制作一款火爆的抖音短视频?其实现在抖音上最火的还是那种把图片做成视频的形式.很多获得百万赞的视频都是那种由多张图片做成的小视频形式.而且还带有特色的切换效果,看起来十分有趣并且 ...

最新文章

  1. Linux的ELF格式分析
  2. 2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授
  3. 中科院sci分区表_最新 | 2020中科院SCI分区表 食品科技类
  4. jQuery事件4——hover
  5. 上传文件Base64格式(React)
  6. C++ vector用法
  7. FortiGuard 实验室报告:全球受攻击的IoT设备呈指数级增长
  8. 怪盗基德的滑翔翼(信息学奥赛一本通-T286)
  9. MySQL sql trace的使用
  10. 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组
  11. mac苹果ping不通网络
  12. 数据库原理及应用教程(第4版|微课版)陈志泊-第一章习题
  13. 编程猫的python咋样_编程猫的课程怎么样?
  14. 【Java系列】:异常-Exception
  15. 回顾展望:杀毒软件的“前世今生”
  16. 后付费和账单分期真的可以缓解经济压力么
  17. python定义整数_Python | 程序定义一个整数值并打印
  18. 如何利用手机作为电脑的麦克风
  19. 基于艾宾浩斯遗忘曲线的APP(大学毕业设计)
  20. 海思[hi3531]编译环境搭建(针对用于编译程序不制作内核和系统的开发者)

热门文章

  1. Ubuntu15.10 安装JDK,配置环境变量, 解决无法登录的问题
  2. Spring -Bean的作用域
  3. 精通Windows Sockets 网络开发-基于Visual C++实现
  4. 怎么用程序实现调用Android手机的拍照功能
  5. word2003插入页码
  6. VueThink配置
  7. layoutSubviews调用
  8. ios7以后隐藏状态栏
  9. TextView跑马灯效果
  10. 数据库事务的四个隔离级别