Docker快速搭建一套PHP、Nginx、MySQL、Redis、Xdebug、Memcached 开发环境并演进

采用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

这里说明一下笔者运行环境,采用了在Mac机上安装vbox虚拟机,在虚拟机里面的debian环境安装了Docker环境,文件放在Mac环境,通过文件挂载方式,达到Mac环境编辑,Docker环境实时更新效果。你要问为啥不在Mac下直接装Docker,历史原因~

运行材料

.

├── 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 https://gitee.com/xupaul/docker_fast_init

配置说明

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

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

启动

从gitee下载配置

根据自己的环境调整配置

准备好镜像

启动

启动命令

## 当前线程运行,要停止时,键入`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.

docker build 时报错导致打包镜像失败

遇到这种情况,如果时一些不要紧的报错,可以选择忽略他们。可以在命令后面追加 exit 0 来屏蔽错误

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容