远离搭建环境的烦恼,使用docker官方镜像也能简单搭建本地开发环境(可配置多站点,可灵活切换多个php版本)。本文全是干货,无脑按步骤操作即可。

第一步:在本地创建一个工作目录,目录结构如下:

lnmpnginxconfvhostdefault.conflogsredisdatalogredis.conf # 需要自己去下载redis.conf文件内容https://redis.io/topics/config,我这边是6.2版本 protected-mode no 设置成no,logfile 改为"/dev/log",# bind 127.0.0.1注释掉,requirepass 'xxxx'设置密码www # 项目代码存放目录docker-compose.yml

docker-compose.yml的内容:

services:nginx:image: nginxrestart: alwaysports:- "8000:80"volumes: - ~/www/docker/lnmp/www:/usr/share/nginx/html- ~/www/docker/lnmp/nginx/conf:/etc/nginx/conf.d- ~/www/docker/lnmp/nginx/logs:/var/log/nginxnetworks:- dnmpcontainer_name: nginx_testphp:image: php:7.3-fpmrestart: alwaysvolumes:- ~/www/docker/lnmp/www:/www# - ~/www/docker/lnmp/php/conf:/usr/local/etc/phpnetworks:- dnmpcontainer_name: php_testredis:image: redis:6.2restart: alwaysports:- "6378:6379"volumes:- ~/www/docker/lnmp/redis/data:/data# 需要自己去下载redis.conf文件内容https://redis.io/topics/config,我这边是6.2版本- ~/www/docker/lnmp/redis/redis.conf:/etc/redis.conf- ~/www/docker/lnmp/redis/log:/dev/log #默认redis的日志路径networks:dnmp:ipv4_address: 172.20.3.4 # 为redis容器指定ipcontainer_name: redis_test
networks: dnmp: #可手动创建网络 docker network create --subnet=172.20.3.0/24 lnmp_dnmpipam:config:- subnet: 172.20.3.0/24 # 本机ip的网络段

nginx的default.conf内容:

server {listen   80;server_name  localhost;location / {root  /usr/share/nginx/html;index index.html index.htm index.php;try_files $uri $uri/ /index.php?$query_string;}error_page    500 502 503 504 /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location ~ \.php$ {fastcgi_pass  php:9000;fastcgi_index  index.php;fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;include       fastcgi_params;}
}

第二步:打开终端,执行

cd ~/www/docker/lnmp # 进入工作目录(docker-composer.yml所在目录)
docker-compose up -d # 执行docker-compose.yml内容

再执行

docker ps

可以看到我们本地多了三个容器分别是nginx_test、php_test、redis_test。

此时,最基础的开发环境就已经搭建好了,可以在lnmp/www目录中新建index.php,浏览器打开网址:localhost:8000,查看效果。

第三步:为php容器安装项目运行所需扩展:

完成前两步,虽然可以解析一些简单的PHP脚本,但是对于网校的开发还缺少一些扩展。所以我们还要手动安装部分扩展。

docker exec -it php_test /bin/bash
docker-php-ext-install sockets pdo_mysql

至此,本地的开发环境虽然可以用,但还不满足我们的日常开发需求。接下来就简单的处理一下nginx的配置,以支持多站点运行。

第四步:nginx多站点配置

在default.conf文件中加入

include /etc/nginx/conf.d/vhost/*.conf;

在vhost目录中新建文件www.xxx.com.conf

server {listen    80;            # 监听端口server_name www.xxx.com;  # 站点域名location / {root    /usr/share/nginx/html/www.xxx.com/public;index    index.html index.htm index.php;try_files $uri $uri/ /index.php?$query_string;}# PHP配置location ~ \.php$ {fastcgi_pass    php:9000;fastcgi_index    index.php;fastcgi_param    SCRIPT_FILENAME    /www/www.xxx.com/public/$fastcgi_script_name;include        fastcgi_params;}
}

在工作目录下的www目录中,新建www.xxx.com目录,并把网校API项目放入其中(当然最好是git clon下来)。例如:(不要忘记修改env中redis的连接地址,redis的host可设置为redis的ip或redis容器名称)

在宿主机/etc/hosts配置 www.xxx.com

127.0.0.1 www.xxx.com

请求www.xxx.com:8000,可查看效果。

第五步:切换php版本

docker pull想要的php版本,例如

docker pull php:7.2-fpm

启动一个php7.2版本的容器,加入到前面创建的网络并绑定www目录:

docker run -itd --name php72 --net lnmp_dnmp -v ~/www/docker/lnmp/www:/www php:7.2-fpm

执行成功后,修改nginx配置中的fastcgi_pass参数,改为php容器名称:端口号9000:

location ~ \.php$ {fastcgi_pass    php72:9000;
}

重启nginx容器:

docker restart nginx_test

请求本次修改的nginx配置对应的站点域名,查看php版本切换效果。

此环境能够满足日常开发需求,目录结构和其他配置都可以DIY,大家可以添加更多丰富的功能或配置,也许以后可以成为一套标准的开发环境模型。


结尾:

操作过程中有可能用到的命令:

# 修改nginx配置,记得重启nginx# update读取所有源的软件列表
apt-get update
# 安装vim
apt-install vim

docker:用官方镜像在本地搭建PHP开发环境相关推荐

  1. 3.1【微信小程序全栈开发课程】在本地搭建后端开发环境

    第二章将前端页面的框架基本搭建好了,第三章,我们来做登录功能,登录功能需要在后端获取到用户信息,返回到前端.所以先来搭建后端开发环境 1.后端开发环境介绍 我们的项目用的是前后端分离开发 前端可以理解 ...

  2. docker 添加端口映射_Docker快速搭建PHP开发环境详细教程

    想必作为一个web开发的程序员,近些年对docker技术一定不会陌生,docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux ...

  3. docker配置python环境_PyCharm使用Docker镜像搭建Python开发环境

    在我们平时使用PyCharm的过程中,一般都是连接本地的Python环境进行开发,但是如果是离线的环境呢?这样就不好搭建Python开发环境,因为第三方模块的依赖复杂,不好通过离线安装包的方式安装.本 ...

  4. Docker 中国官方镜像加速

    通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像.该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker ...

  5. Docker国内官方镜像地址

    Docker国内官方镜像地址 博主: haitianisgood 原博客网址: https://mp.csdn.net/mdeditor/80480359 最近发现'https://registry. ...

  6. Docker最全教程之使用Docker搭建Java开发环境(十八)

    前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. 本篇仅作探索,希望 ...

  7. Docker最全教程之使用Docker搭建Java开发环境

    前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. Java [Jav ...

  8. 五分钟用Docker快速搭建Go开发环境

    挺早以前在我写过一篇用 Docker搭建LNMP开发环境的文章:用Docker搭建Laravel开发环境,里面详细介绍了将 nginx. mysql和 php三个容器用 docker-compose编 ...

  9. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

最新文章

  1. 计蒜客 神奇的二叉树 ( 已知先序和中序遍历构建二叉树 )
  2. 基于三维向量对的乱序堆叠物体的位姿识别
  3. CSS Guide Lines
  4. Spring AOP动态代理-切面
  5. JSP复习笔记——第10章 连接数据库 之 jsp+DAO实现留言管理程序
  6. 投屏画面尺寸拉伸怎么办_手机投屏转换器设置方法图文教程
  7. 业务的可变性和不可变性分析_不可变性真的意味着线程安全吗?
  8. 如何绘制逻辑图 — 2.要素的属性
  9. web端四方支付 只有安卓可以跳转
  10. 环世界服务器显示不出来,环世界控制台代码 | 手游网游页游攻略大全
  11. 【科普】数字货币的基石--区块链
  12. 【区块链】——区块链学习初探(一)
  13. 网站管理后台帐号密码暴力破解方法
  14. unity显示no camera rendering
  15. Keil_MDK 中绝对地址定位问题
  16. tomcat html位置,HTML的Tomcat
  17. 如何设置payjs的微信jsapi支付目录
  18. 设计模式(十三) 代理模式和Java动态代理
  19. 2021年第六届数维杯B题 中小城市地铁运营与建设优化设计
  20. php性能分析工具 xhprof,php 性能分析工具 xhprof

热门文章

  1. 推荐系统 之 Transformer
  2. Java调用Canda环境下的Python脚本所遇到环境问题的解决方法
  3. threejs自定义顶点(vertex)创建几何体
  4. laravel 悲观锁
  5. 中财网爬取上市公司第一大股东持股比例
  6. Fiori程序员用ADT不正经的ABAP数据库建表操作、数据录入
  7. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...
  8. 教师简历系统Python-tkinter
  9. 7-4 输出菱形图案 (5分)
  10. textarea赋值的属性