一、搭建本地PHP开发环境

概述

本文简单介绍通过启动一个nginx和fpm容器来搭建一个php web运行环境,以文档命令为例,H:/home/code/docker/web 目录下可以放多个子项目,只需针对不同的项目配置不同的nginx站点文件,在站点中指定下级项目目录即可,以后台项目admin为例, 则具体的子路径为H:/home/code/docker/web/admin,容器内路径为/var/www/html/admin

启用多项目需要修改的站点配置:

  1. root目录指定到下级项目路径

  2. fastcgi_param  SCRIPT_FILENAME 指定到下级项目路径

启用其他版本的php

如果需要启动其他PHP的版本,只需要再使用别的端口重新启动一个php-fpm容器即可,只需要在 -d 参数后修改依赖的镜像版本,比如:php:8.1-fpm-alpine、php:7.4-fpm-alpine、php:5.5-fpm-alpine

注:官方PHP镜像缺少常用扩展,比如redis,gd等,需自行基于官方镜像安装扩展二次打包, 或启动后手动安装扩展,也可使用其它途径提供的带常用扩展的镜像。

其它

使用docker compose 一次性编排多个容器,可一键启动项目所需全部容器, 见下文。

具体步骤

前置条件 : 已安装docker

方法一:手动搭建

1. 启动一个docker网络

docker network create --driver=bridge  nginx_network

2. 启动php8.1版本的 php-fpm容器

docker run --name  php-fpm-81 \
-v H:/home/code/docker/web:/var/www/html \
--network nginx_network \
--ip 172.18.0.3 \
--privileged=true \
-d php:8.1-fpm-alpine

3. 启动nginx容器

docker run --name nginx-common \
-p 8008:80 \
-v H:/home/code/docker/web:/var/www/html \
-v H:/home/docker/nginx_conf.d:/etc/nginx/conf.d \
--network nginx_network \
--ip 172.18.0.4 \
--privileged=true \
-d nginx

上述命令参数解析:

--name   为启动的容器命名

-p 映射端口,把本地宿主机的8008端口 映射到容器的80端口,访问本地8008端口即访问容器80端口

-v  映射本地文件目录 到 容器内部目录,比如项目代码目录

--network 关联容器网络

--ip 指定容器ip

--privileged 启用桥接

-d  后台启动一个容器,使用名为为php ,tag为 8.1-fpm-alpine 的镜像,本地不存在会从官方仓库拉取

4. 创建nginx站点配置

创建项目 admin.conf 文件, 把文件放到 H:/home/docker/nginx_conf.d 目录中,也就是启动nginx容器时 -v 命令映射的本地nginx站点配置文件夹

server {listen       80;server_name  192.168.0.195;location / {if (!-e $request_filename){rewrite ^/(.*) /index.php last;}root   /var/www/html/admin;index  index.html index.htm index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /var/www/html/admin;}location ~ \.php$ {root   /var/www/html;fastcgi_pass   172.18.0.3:9000; #php容器的ip地址fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /var/www/html/admin/$fastcgi_script_name; #fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}
}

访问  8008端口 打开admin项目

方法2:docker-compose一键启动

也可使用docker-compose服务编排,一键启动上述php和nginx等服务容器

创建 docker-compose.yml 文件,内容如下,修改项目路径和配置文件路径为自己的电脑文件夹路径:

#yaml 配置实例
version: '3'
services:php:container_name: php-fpm-81image: php:8.1-fpm-alpinerestart: alwaysnetworks:- nginx_networkports:- "9000:9000"volumes:- "H:/home/code/docker/web:/var/www/html" #代码目录#- "H:/home/code/docker/php81/etc:/usr/local/etc" #php配置文件夹,可选#- "H:/home/code/docker/php81/log:/var/log/php" #log,可选networks:nginx_network:ipv4_address: 172.18.0.3nginx:container_name: nginx-commonimage: nginx:latestrestart: alwaysenvironment:- TZ=Asia/Shanghaiports:- "8008:80"depends_on:- "php"volumes:- "H:/home/code/docker/web:/var/www/html" #代码目录- "H:/home/docker/nginx/nginx_conf.d:/etc/nginx/conf.d" #配置文件目录#- "H:/home/docker/nginx/log:/var/log/nginx" #log,可选networks:nginx_network:ipv4_address: 172.18.0.4networks:nginx_network:driver: bridgeipam:config:- subnet: 172.18.0.0/16

在上述文件存在的目录 执行  docker-compose up -d  命令启动容器, 访问8008端口查看项目运行情况

二、redis 和 mysql 的启动

redis启动

创建redis配置文件 myredis.conf , 对应本地文件夹为H:/home/code/docker/redis

port 6379
timeout 65
maxclients 10000
databases 16
maxmemory 1048576000
appendonly yes
#protected-mode no #关闭保护模式
#bind 0.0.0.0
requirepass 123456 #设置密码

启动redis

docker run \
--name php-redis \
--restart=always \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 6375:6379 \
-v H:/home/code/docker/redis/myredis.conf:/etc/redis/redis.conf \
-v H:/home/code/docker/redis/data:/data \
--network nginx_network \
--ip 172.18.0.5 \
--privileged=true \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes  --requirepass 123456 

mysql启动

创建配置文件my.cnf,放入目录为 H:/home/code/docker/mysql/conf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

启动mysql

docker run
-p 3307:3306 \
--name mysql \
--restart=always \
-v H:/home/code/docker/mysql/data:/var/lib/mysql \ #数据目录
-v H:/home/code/docker/mysql/conf:/etc/mysql/conf.d \ #配置目录
-v H:/home/code/docker/mysql/log:/var/log/mysql \ #log目录
--network nginx_network \
--ip 172.18.0.6 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

docker-compose启动 php+nginx+redis+mysql

附带php、nginx、redis、mysql 版本的docker-compose.yml 文件如下

#yaml 配置实例
version: '3'
services:php:container_name: php-fpm-81image: php:8.1-fpm-alpinerestart: alwaysnetworks:- nginx_networkports:- "9000:9000"volumes:- "H:/home/code/docker/web:/var/www/html" #代码目录#- "H:/home/code/docker/php81/etc:/usr/local/etc" #php配置文件夹,可选#- "H:/home/code/docker/php81/log:/var/log/php" #log,可选networks:nginx_network:ipv4_address: 172.18.0.3nginx:container_name: nginx-commonimage: nginx:latestrestart: alwaysenvironment:- TZ=Asia/Shanghaiports:- "8008:80"depends_on:- "php"volumes:- "H:/home/code/docker/web:/var/www/html" #代码目录- "H:/home/docker/nginx/nginx_conf.d:/etc/nginx/conf.d" #配置文件目录#- "H:/home/docker/nginx/log:/var/log/nginx" #log,可选networks:nginx_network:ipv4_address: 172.18.0.4redis:image: redis:latestcontainer_name: php-redisrestart: alwaysprivileged: true #root权限ports:- "6375:6379"volumes:- "H:/home/code/docker/redis/myredis.conf:/etc/redis/redis.conf"#配置目录- "H:/home/code/docker/redis/data/:/data" #数据目录networks:nginx_network:ipv4_address: 172.18.0.5command: redis-server /etc/redis/redis.conf #已对应的配置文件启动mysql:image: mysql:5.7container_name: php-mysqlprivileged: trueports:- "3307:3306"volumes:- "H:/home/code/docker/mysql/data:/var/lib/mysql" #数据目录- "H:/home/code/docker/mysql/conf:/etc/mysql/conf.d" #配置目录- "H:/home/code/docker/mysql/log:/var/log" #log目录environment:- MYSQL_ROOT_PASSWORD=123456networks:nginx_network:ipv4_address: 172.18.0.6
networks:nginx_network:driver: bridgeipam:config:- subnet: 172.18.0.0/16

三、docker常用命令参考

查看镜像

docker images

查看容器

docker ps

docker ps -a

构建自定义镜像

docker build -t my_images:1.0 .

查看容器信息

docker inspect 容器id

登录docker容器内部

docker exec -it 容器id bash

宿主机和容器复制文件

docker cp /home/docker/nginx/xxx  容器id:/etc/nginx/xxx

docker cp 容器id:/etc/nginx/xxx   /home/docker/nginx/xxx

docker网络

查看网络列表:docker network list

查看网络详情:docker network inspect  网络名称

docker本地PHP开发环境搭建相关推荐

  1. 微信本地模拟开发环境搭建

    修改Windows下的"C:\Windows\System32\drivers\etc\hosts",让域名和本地(127.0.0.1)映射.目的是为了模拟微信客户端在发送请求时, ...

  2. docker mysql 操作_[Docker] Docker 快速搭建本地MySQL开发环境

    [Docker] Docker 快速搭建本地MySQL开发环境 关于 Docker 的安装使用本文不再赘述,有兴趣的可以通过官网或是浏览我的专栏文章了解.今天着重给大家介绍下如何利用Docker快速搭 ...

  3. Docker02 基本命令、开发环境搭建、docker安装nginx、Dockerfile、路径挂载

    1 基本命令 1.1 docker相关 centos6.5 安装docker环境 >sudo yum install -y http://mirrors.yun-idc.com/epel/6/i ...

  4. docker开发环境搭建(windows)

    目录 Docker开发环境搭建 1.1mysql 1.1.1拉取镜像 1.1.2本地新建目录(windows为例) 1.1.3创建容器并添加本地映射 1.1.4连接容器数据库验证成功 2.1nacos ...

  5. Docker java项目发布/开发环境搭建

    Docker java项目发布/开发环境搭建 线上部署项目/开发环境搭建命令大全 关闭windows10 指定应用 安装Docker 安装 docker-compose 关于docker容器导致硬盘耗 ...

  6. 用 Docker 搞定 PHP 开发环境搭建

    避坑!用 Docker 搞定 PHP 开发环境搭建(Mac.Docker.Nginx.PHP-FPM.XDebug.PHPStorm.VSCode) 因为最近换电脑的缘故需要重新部署一下本地的开发环境 ...

  7. redash+mysql_Redash本地开发环境搭建

    开发环境搭建步骤 建议使用mac和ubuntu系统,同事刚开始使用windows安装,过程中遇到很多问题,改用ubuntu系统,本文适用mac和ubuntu系统. 官网建议使用虚拟机或Docker W ...

  8. Windows8.1+Eclipse搭建Hadoop2.7.2本地模式开发环境

    下面介绍如何在Windows8.1上搭建hadoop2.7.2的本地模式开发环境,为后期做mapreduce的开发做准备. 在搭建开发环境之前,首先选择开发工具,就是大家都很熟悉的Eclipse(本人 ...

  9. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建向社区贡献代码

    加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...

最新文章

  1. 多DHCP服务器的作用域 及备用DHCP服务器(一)
  2. 机器学习领域中的六大误区
  3. DevExpress ASP.NET 使用经验谈(9)-Dev控件客户端事件 ClientSideEvents
  4. [MySQL FAQ]系列 -- mysqldump出错一例:打开文件数太多
  5. 使用科大讯飞语音转文字的服务进行电话录音分析
  6. 我的技术回顾那些与ABP框架有关的故事-2018年
  7. C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针+switch
  8. python发邮件脚本_Python实现的简单发送邮件脚本分享
  9. 开发者究竟想从云中得到什么?
  10. SharePoint Designer中无法显示任何列表
  11. 配置vmcore通过ssh转储到其他主机的方法
  12. 系统管理员不可不知的三条黄金法则
  13. 【英语写作】以亚太杯为例
  14. 利用U盘重新安装XP系统
  15. Ceph用户:中国用户统计表(2018年度)
  16. Android SO逆向-C++虚函数表解析
  17. kindeditor上传图片后自动缩放尺寸
  18. 「太阁干货」华为模拟器eNSP安装教程
  19. 创建一个最简单的VST
  20. iOS 定制应用程序字体

热门文章

  1. 理解 PHP 8 的 JIT
  2. 【一】综合架构(web网站架构)
  3. 使用SQL和Pandas计算累计百分比
  4. 虚拟机的虚拟化如何开启?
  5. 浏览器上查看微信公众号的所有历史文章
  6. Leetcode|MySQL|数据库刷题记录(601~627)
  7. 接近8000字的Spring/SpringBoot常用注解总结!安排!
  8. AndroidStudio音乐播放器进度条和歌曲时间的操作
  9. 3D游戏设计作业(四)
  10. 机器学习——低秩矩阵分解中低秩的意义、矩阵填补、交叉验证