本文给大家介绍的是如何在docker中搭建一个PHP的开发环境,将用 zPhal-dockerfiles 做为例子,有需要的小伙伴可以参考下
1. 前言
1.1 为什么要用Docker ?
是否有这样的场景,你搞了一个项目,在本地开发时需要搭建环境,放到线上时也需要搭建环境,到公司想暗戳戳玩一下要搭建环境,不搭还不行,因为你的环境依赖还挺多。这个时候如果有了Docker,只需要在机器上装个Docker,放上写好的Dockerfile,一行命令就自动完成这个事,方便又高效,岂不是很爽?
1.2 准备
接下来,本文介绍如何搭建一个PHP的开发环境,将用 zPhal-dockerfiles 做为例子,这是我为我的博客系统准备的一套Dockerfile。
现在不管是Windows、Mac还是Linux,Docker都可以很好支持,包括Windows系统,在Win 10系统下Docker for Windows 其实还是挺不错的,就是比较吃内存。
通过Docker命令行,我们可以做很多事情,拉取镜像,运行容器,容器内执行命令等,但是现在,我们要用更加简单粗暴的方式,编写好Dockerfiles文件,然后通过docker-compose管理好这些文件,简化操作流程。
什么是Dockerfile?
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于拉取的基础镜像并最终创建一个新的镜像,通过Dockerfile我们可以创建一个你需要的镜像,里面是包含了你要安装的软件,相当于是提前定制好要安装的拓展,执行的命令等,然后一键执行,极大地简化操作流程。
按照本文来搭建环境,你需要:
首先了解一下Docker以及Docker的一些基本操作,还有docker-compose是什么。
然后需要安装Docker和docker-compose,我将使用docker-compose来管理我的Dockerfiles。
注意,编写Dockerfile是活的,不是死的,每个人写出来的Dockerfile都会不一样,取决于你的需求。
Docker的官方文档非常清楚,虽然是英文,但是基本上什么都有,有问题上文档翻是非常明智的: Docker Documentation 。
2. 开始编写
接下来都是以 zPhal-dockerfiles 为例子,完整的可以点链接进去看,下面的只是片段。
2.1 预览
首先,我们来看一下,我创建的这个Dockerfile项目,我大概分成了下面的目录(当然这个是自己定的,并不是要求这么去排版你的文件):
zPhal-dockerfilesapp/ index.php phpinfo.phpdata/ .gitignorefiles/ mysql/ conf.d/ mysql-file.cnf Dockerfile nginx/ conf.d/ default.conf zphal.conf Dockerfile nginx.conf php/ pkg/ .gitignore Dockerfile php.ini php-dev.ini php-fpm.conf redis/ Dockerfile docker-compose.ymllogs/.gitgnoreREADME.md
在这个项目里,我用到PHP、MySQL、Nginx、Redis以及Composer、Phalcon拓展等。
总的来说,我们做这件事有三个流程:编写好各个软件的Dockerfile;编写好配置文件;通过docker-compose处理所有的Dockerfile,包括将配置配置文件扔进去Dockerfile文件将构建的镜像中。
2.2 编写Dockerfile文件
2.2.1 PHP
下面是PHP的Dockerfile:
FROM php:7.2-fpm
MAINTAINER goozp "[email protected]"
设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
更新安装依赖包和PHP核心拓展
RUN apt-get update && apt-get install -y \git \libfreetype6-dev \libjpeg62-turbo-dev \libpng-dev \&& docker-php-ext-configure gd --wit<p style="color:transparent">本文来源gao!%daima.com搞$代*!码$网3</p><strong>搞代gaodaima码</strong>h-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \&& docker-php-ext-install -j$(nproc) gd \&& docker-php-ext-install zip \&& docker-php-ext-install pdo_mysql \&& docker-php-ext-install opcache \&& docker-php-ext-install mysqli \&& rm -r /var/lib/apt/lists/*