当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 17:31:09 PHP

痛点如何简单快速的初始化一个全新的PHP开发环境?当笔者尝试开始一个新的web项目时,往往会陷入重新搭建Docker环境的繁琐工作中。我觉得当你开始一个新的项目,或者快速的为了和之前的项目完全隔离,你也会搭建一个新的docker环境。从本文开始,您将使用docker-compose容器编排技术一步启动所有服务。官方基础上,php容器还打包了一些常用的扩展(附构建源码,动手能力强的可以自行打包),php、nginx、mysql都自带自定义配置文件(方便配置和调整开发和测试),所有下载。架构本文搭建的环境如上图。环境描述运行环境MacOS10.13.6VirtualBox5.2.14Ubuntu16.04.4Docker17.07.0-cecontainerNginx1.12.1-alpinePHP-fpm5.6MySQL5.7Redis3.2Memcached1.4.27这里是笔者运行环境的描述,使用在Mac机器上安装vbox虚拟机,在虚拟机内部的debian环境中安装Docker环境。这些文件放在Mac环境中。通过文件挂载方式,实时更新Mac环境编辑和Docker环境。你要问Mac下为什么不直接安装Docker,历史原因~运行资料├──build##dockerimage构建资料│├──php5.6##php5.6││├──Dockerfile││├──imagick-3.4.3.tgz││├──memcached-2.2.0.tgz││├──redis-4.0.2.tgz││├──sources.list││└──xdebug-XDEBUG_2_5_5。柏油。gz│└──php-cli##phpcli自建镜像│├──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##memcached配置││└──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││││2├──卷曲.ini││││├──20-gd.ini│││├──20-imagick.ini││││├──20-json.ini│││├──20-memcache.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##mysqllog││├──error.log││└──mysql.log│├──nginx##nginx日志││├──access.log│││├──access_xiuno.log││├──error.log││└──error_xiuno.log│└──php├──php##php代码存放目录│└──xiunobbs##php项目└──工具##php部分工具├──composer.phar└──phpunit-4.8.36.phar配置文件下载gitclonehttps://gitee.com/xupaul/docker_fast_init配置说明目前笔者还没有写相关的自动化脚本来自动适配用户的使用环境,所以这里需要对下载的配置进行调整文件docker-compose.yml文件调整该文件有大量的文件挂载配置,需要调整这个,举个例子。版本:“2”服务:http:image:nginx:1.12.1-alpinevolumes:-./config/nginx/nginx.conf:/etc/nginx/nginx.conf:rwports:-“8080:80”环境:TZ:"Asia/Shanghai"networks:tasker_net:ipv4_address:"192.63.0.11"例子中上卷下一行是挂载宿主机的nginx.conf配置文件,覆盖里面的nginx.conf文件容器。./文件路径是clonegit项目后的目录。如果你也用vbox虚拟机,那你需要把./换成docker运行环境的路径!ports中,为了不和本机80端口冲突,http服务只能申请一个小于1024的端口,有sudo权限。这里我使用8080作为默认值。其他容器的端口配置也遵循上面的规则,这样就可以用一条命令启动。为每个容器配置时区。对于网络ip部分,为了方便配置,手动分配ip。Nginx配置配置php-fpm之间的tcp通信和php路由的重写。配置静态资源缓存。启用MySQL配置记录一般查询日志,方便调试程序。注意这里挂载的配置文件的读写权限必须配置为只读!PHP配置php:image:paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2volumes:-./config/php/cli/php.ini:/usr/local/etc/php/php.ini/:rwports:-"9000"environment:PHP_IDE_CONFIG:"serverName=bs"XDEBUG_CONFIG:"remote_host=10.0.2.2remote_port=9000"我打包了一些php常用的扩展,需要调整xdebug看一下remote_host的ip(docker-compose.yaml、~/config/php/cli/20-xdebug.ini这两个文件都需要调整)。server_name需要结合开发IDE进行调整,比如Preferences|Languages&inPHPStormFrameworks下都有哪些记录|PHP|服务器配置路径,这里填什么。Redis配置没有特殊配置Memecached配置没有特殊配置镜像构建php镜像可以通过以下命令拉取:dockerpullpaulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2或者去~/build/php5.6下自行打包:dockerbuild-tpaulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2-fdockerfile。如果自定义tag名称,则需要包含调整docker-compose.yml,开始从gitee下载配置。根据自己的环境调整配置,准备镜像。镜像也可以直接拉取。我已经上传了官方的。start启动命令##当前线程正在运行,想停止时输入`Ctrl+C`docker-comose-f./docker-compose.yamlup##后台运行docker-comose-f./docker-compose.yamlup-dDestroydocker-comose-f./docker-compose.yamldown常见问题MySQL挂载的配置文件被忽略,不起作用。MySQL要求配置文件的权限是只读的。您需要以只读模式安装它。不知道怎么办remote_host禁用xdebug,搭建环境并启动,在IDE运行环境中通过http访问php容器中的代码(因为xdebug需要和IDE通信)(在浏览器中访问,注意端口映射),并且访问在Nginx.log中查看的ip是remote_host.dockerbuild。dockerbuild报错导致打包镜像失败。这种情况下,如果报了一些不重要的错误,可以选择忽略。您可以在命令末尾添加exit0以阻止错误。最后祝大家一步到位。如果您有任何问题,请留言。如果遇到困难,可以尝试在本地虚拟机中运行docker容器的解决方案。