热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

痛点

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

从这篇文章你会得到

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

架构

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

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

环境说明

运行环境

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

启动

  1. 从gitee下载配置
  2. 根据自己的环境调整配置
  3. 准备好镜像
  4. 启动

启动命令

## 当前线程运行,要停止时,键入`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容器内代码,在 Nginxaccess.log 里查看访问的ip就是 remote_host .

最后

祝愿大家能一步到位,有问题留言,遇到疑难杂可以试试本地起虚拟机里跑docker容器的那种方案。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • Docker安装Rabbitmq(配合宝塔)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker安装Rabbitmq(配合宝塔)相关的知识,希望对你有一定的参考价值。一、事前准备 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
  • (九)Docker常用安装
    一、总体步骤1、搜索镜像2、拉取镜像3、查看镜像4、启动镜像5、停止镜像6、移除镜像二、安装tomcat1、dockerhub上面查找tomcat镜像 dockersearchto ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
  • 如何通过swoole加速laravel的问题?
    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下再来复习一下吧,导致php慢的各种因素中解析性语言的 ... [详细]
  • 【云计算】Dockerfile、镜像、容器快速入门 ... [详细]
author-avatar
无名有名我无名_593
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有