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

环境解释

运行环境

`Mac OS 10.13.6`

php与mysql项目开发应用Docker3步搭建起PHPNginxMySQLRedisXdebug开辟情况 HTML

`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

启动

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