您的位置 首页 php

使用Docker3步搭建起PHP、Nginx、MySQL、Redis、Xdebug开发环境

痛点

笔者在尝试起一个新web项目时,往往会陷入重新建立一套 Docker 环境的繁琐事当中。我想大家在开始做一个新项目时,或者快速为了和以前的项目做完全的隔离,也会起一套新docker环境。

从这篇文章你会得到

采用`docker-compose`容器编排技术,一步启动全部服务。php容器在官方的基础上还打包了一些常用拓展(附带build源码,动手能力强可以自己打包),php,nginx,mysql都附带有自定义配置文件(便于开发测试的配置调整),都供下载。

架构

运行架构

本片文章搭建出来的环境如上图。

环境说明

运行环境

* `Mac OS 10.13.6`

* `Virtual Box 5.2.14`

* `Ubuntu 16.04.4`

* `Docker 17.07.0-ce`

容器

* `Nginx 1.12.1-alpine`

* `PHP-fpm 5.6`

* `MySQL 5.7`

* ` Redis 3.2`

* `Memcached 1.4.27`

运行材料

.
├── build ## docker 镜像build 材料
│ ├── php5.6 ## php 5.6
│ │ ├── Dockerfile
│ │ ├── imagick-3.4.3.tgz
│ │ ├──  memcached -2.2.0.tgz
│ │ ├──  redis -4.0.2.tgz
│ │ ├── sources.list
│ │ └── xdebug-XDEBUG_2_5_5.tar.gz
│ └── php-cli ## php cli 的自建镜像
│ ├── amqp-1.9.3.tgz
│ ├── Dockerfile
│ ├── Dockerfile-php-swoole
│ ├── memcached-3.0.4.tgz
│ ├── redis-4.1.1.tgz
│ ├── sources.list.jessie
│ ├── swoole-4.0.4.tgz
│ ├── swoole-4.2.6.tgz
│ ├── xdebug-2.6.1.tgz
│ └── yaf-3.0.7.tgz
├──  config  ## 配置文件
│ ├── apt ## 由于使用的debian系列,所以命名apt
│ │ └── sources.list ## 更新为国内源
│ ├── memcached ## memchached的配置
│ │ └── memcached.conf
│ ├── mysql ## mysql 的配置
│ │ ├── conf.d
│ │ │ └── mysqld_safe_syslog.cnf
│ │ └── my.cnf
│ ├── nginx ## nginx 的配置
│ │ ├── conf.d
│ │ │ ├── default
│ │ │ └── xiuno
│ │ ├── mime.types
│ │ ├── nginx.conf
│ │ └── sites-enabled
│ ├── php ## php的配置,分cli,和fpm配置
│ │ ├── cli
│ │ │ ├── conf.d
│ │ │ │ ├── 05-opcache. ini 
│ │ │ │ ├── 10-pdo.ini
│ │ │ │ ├── 20-curl.ini
│ │ │ │ ├── 20-gd.ini
│ │ │ │ ├── 20-imagick.ini
│ │ │ │ ├── 20-json.ini
│ │ │ │ ├── 20-memcache.ini
│ │ │ │ ├── 20-mysqli.ini
│ │ │ │ ├── 20-mysql.ini
│ │ │ │ ├── 20-pdo_mysql.ini
│ │ │ │ ├── 20-readline.ini
│ │ │ │ ├── 20-redis.ini
│ │ │ │ ├── 20-xdebug.ini
│ │ │ │ └── swoole.ini
│ │ │ └── php.ini
│ │ ├── fpm
│ │ │ ├── conf.d
│ │ │ │ ├── docker.conf
│ │ │ │ ├── www.conf
│ │ │ │ └── zz-docker.conf
│ │ │ ├── docker-php-fpm.conf
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ └── pool.d
│ │ │ └── www.conf
│ │ └── mods-available
│ │ ├── curl.ini
│ │ ├── gd.ini
│ │ ├── imagick.ini
│ │ ├── json.ini
│ │ ├── memcache.ini
│ │ ├── mysqli.ini
│ │ ├── mysql.ini
│ │ ├── opcache.ini
│ │ ├── pdo.ini
│ │ ├── pdo_mysql.ini
│ │ ├── readline.ini
│ │ ├── redis.ini
│ │ └── xdebug.ini
│ └── redis ## redis 配置
│ ├── redis.conf
│ ├── redis-server.sh
│ └── sentinel.conf
├── data ## 为了数据持久化
│ ├── mysql ## mysql 文件挂载
│ └── redis ## redis 持久化数据文件夹
├── docker-compose.yaml ## 容器编排 !!!
├── log ## 各个容器产生的日志
│ ├── mysql ## mysql日志
│ │ ├── error.log
│ │ └── mysql.log
│ ├── nginx ## nginx 日志
│ │ ├── access.log
│ │ ├── access_xiuno.log
│ │ ├── error.log
│ │ └── error_xiuno.log
│ └── php
├── php ## php代码存放目录
│ └── xiunobbs ## php项目
└── tool ## php 一些工具
 ├── composer.phar
 └── phpunit-4.8.36.phar
 

配置文件下载

git clone 
 

配置说明

目前笔者还没有写相关自动化脚本自动适配用户的使用环境,所以这里需要先调整一下下载后的配置文件。

docker-compose.yml 文件调整

这个文件有大量的文件挂载配置,这块就需要调整,拿一个举例。

version: "2"
services:
 http:
 image: nginx:1.12.1-alpine
 volumes:
 - ~/config/nginx/nginx.conf:/etc/nginx/nginx.conf:rw
 ports:
 - "8080:80"
 environment: 
 TZ : "Asia/Shanghai"
 networks:
 tasker_net:
 ipv4_address: "192.63.0.11"
 

在例子中最后`volumes`的下一行,是将宿主机的`nginx.conf`配置文件挂载并覆盖容器内的`nginx.conf`文件,`~/`文件路径就是clone git项目后的目录直接替换即可。

如果你也使用了虚拟机,那么你需要`~/`要替换为`docker`的运行环境的路径!

在`ports`这里,http服务为了不和本机的80端口冲突,以及`sudo`权限才能申请的小于1024的端口,这里我以8080作为默认值。其他容器的端口配置也遵循以上的规则,为的是能一个命令就能启动起来。

为每个容器都配置了时区。

网络ip这部分,为了便于配置就手动分配ip了。

Nginx 配置

配置好了php-fpm之间tcp通讯,以及php路由的rewrite。配置了静态资源缓存。

MySQL 配置

额外配置了一般性的查询日志,便于debug程序。

PHP 配置

php:

image: paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2

volumes:

– ~/config/php/cli/php.ini:/usr/local/etc/php/php.ini/:rw

ports:

– “9000”

environment:

PHP_ IDE _CONFIG: “serverName=bs”

XDEBUG_CONFIG: “remote_host=10.0.2.2 remote_port=9000”

我为php一起打包了一些常用拓展,其中xdebug需要调整一下`remote_host`的的ip(docker-compose.yaml, ~/config/php/cli/20-xdebug.ini 两个文件内的都需要调整). `server_name` 需要结合开发IDE一起调整,如PHPStorm里` Preferences | Languages & Frameworks | PHP | Servers `配置路径下有什么可用的记录,那么这里填什么。

Redis 配置

没有特殊配置

Memecached 配置

没有特殊配置

镜像构建

php镜像

可以通过如下命令拉取:

docker pull paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2
 

或者在到 `~/build/php5.6` 下自行打包:

docker build -t paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2 -f dockerfile .
 

如果自定义tag name,需要一并调整docker-compose.yml

启动

1. 从gitee下载配置

2. 根据自己的环境调整配置

3. 启动

启动命令

## 当前线程运行,要停止时,键入`Ctrl+C`
docker-comose -f ./docker-compose.yaml up
## 后台运行
docker-comose -f ./docker-compose.yaml up -d
 

摧毁

docker-comose -f ./docker-compose.yaml down
 

常见问题

  • MySQL 挂载的配置文件被忽略,不起作用

MySQL 要求配置文件的权限为只能读,你需要已只读方式挂载

  • 不知道remote_host怎么办

禁用xdebug,搭建好环境并启动,在IDE运行的环境(因为`xdebug`需要和IDE通讯)访问以`http`(在浏览器访问,注意端口映射)的方式访问php容器内代码,在`Nginx`的`access.log`里查看访问的ip就是`remote_host`.

最后

祝愿大家能一步到位。

PHP

文章来源:智云一二三科技

文章标题:使用Docker3步搭建起PHP、Nginx、MySQL、Redis、Xdebug开发环境

文章地址:https://www.zhihuclub.com/150089.shtml

关于作者: 智云科技

热门文章

网站地图