当前位置:   article > 正文

docker本地PHP开发环境搭建_docker搭建php开发环境

docker搭建php开发环境

一、搭建本地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容器

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

3. 启动nginx容器

  1. docker run --name nginx-common \
  2. -p 8008:80 \
  3. -v H:/home/code/docker/web:/var/www/html \
  4. -v H:/home/docker/nginx_conf.d:/etc/nginx/conf.d \
  5. --network nginx_network \
  6. --ip 172.18.0.4 \
  7. --privileged=true \
  8. -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站点配置文件夹

  1. server {
  2. listen 80;
  3. server_name 192.168.0.195;
  4. location / {
  5. if (!-e $request_filename){
  6. rewrite ^/(.*) /index.php last;
  7. }
  8. root /var/www/html/admin;
  9. index index.html index.htm index.php;
  10. }
  11. error_page 500 502 503 504 /50x.html;
  12. location = /50x.html {
  13. root /var/www/html/admin;
  14. }
  15. location ~ \.php$ {
  16. root /var/www/html;
  17. fastcgi_pass 172.18.0.3:9000; #php容器的ip地址
  18. fastcgi_index index.php;
  19. fastcgi_param SCRIPT_FILENAME /var/www/html/admin/$fastcgi_script_name;
  20. #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  21. include fastcgi_params;
  22. }
  23. }

访问  8008端口 打开admin项目

方法2:docker-compose一键启动

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

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

  1. #yaml 配置实例
  2. version: '3'
  3. services:
  4. php:
  5. container_name: php-fpm-81
  6. image: php:8.1-fpm-alpine
  7. restart: always
  8. networks:
  9. - nginx_network
  10. ports:
  11. - "9000:9000"
  12. volumes:
  13. - "H:/home/code/docker/web:/var/www/html" #代码目录
  14. #- "H:/home/code/docker/php81/etc:/usr/local/etc" #php配置文件夹,可选
  15. #- "H:/home/code/docker/php81/log:/var/log/php" #log,可选
  16. networks:
  17. nginx_network:
  18. ipv4_address: 172.18.0.3
  19. nginx:
  20. container_name: nginx-common
  21. image: nginx:latest
  22. restart: always
  23. environment:
  24. - TZ=Asia/Shanghai
  25. ports:
  26. - "8008:80"
  27. depends_on:
  28. - "php"
  29. volumes:
  30. - "H:/home/code/docker/web:/var/www/html" #代码目录
  31. - "H:/home/docker/nginx/nginx_conf.d:/etc/nginx/conf.d" #配置文件目录
  32. #- "H:/home/docker/nginx/log:/var/log/nginx" #log,可选
  33. networks:
  34. nginx_network:
  35. ipv4_address: 172.18.0.4
  36. networks:
  37. nginx_network:
  38. driver: bridge
  39. ipam:
  40. config:
  41. - subnet: 172.18.0.0/16

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

二、redis 和 mysql 的启动

redis启动

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

  1. port 6379
  2. timeout 65
  3. maxclients 10000
  4. databases 16
  5. maxmemory 1048576000
  6. appendonly yes
  7. #protected-mode no #关闭保护模式
  8. #bind 0.0.0.0
  9. requirepass 123456 #设置密码

启动redis

  1. docker run \
  2. --name php-redis \
  3. --restart=always \
  4. --log-opt max-size=100m \
  5. --log-opt max-file=2 \
  6. -p 6375:6379 \
  7. -v H:/home/code/docker/redis/myredis.conf:/etc/redis/redis.conf \
  8. -v H:/home/code/docker/redis/data:/data \
  9. --network nginx_network \
  10. --ip 172.18.0.5 \
  11. --privileged=true \
  12. -d redis redis-server /etc/redis/redis.conf \
  13. --appendonly yes --requirepass 123456

mysql启动

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

  1. [client]
  2. default-character-set=utf8
  3. [mysql]
  4. default-character-set=utf8
  5. [mysqld]
  6. init_connect='SET collation_connection = utf8_unicode_ci'
  7. init_connect='SET NAMES utf8'
  8. character-set-server=utf8
  9. collation-server=utf8_unicode_ci
  10. skip-character-set-client-handshake
  11. skip-name-resolve

启动mysql

  1. docker run
  2. -p 3307:3306 \
  3. --name mysql \
  4. --restart=always \
  5. -v H:/home/code/docker/mysql/data:/var/lib/mysql \ #数据目录
  6. -v H:/home/code/docker/mysql/conf:/etc/mysql/conf.d \ #配置目录
  7. -v H:/home/code/docker/mysql/log:/var/log/mysql \ #log目录
  8. --network nginx_network \
  9. --ip 172.18.0.6 \
  10. --privileged=true \
  11. -e MYSQL_ROOT_PASSWORD=123456 \
  12. -d mysql:5.7

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

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

  1. #yaml 配置实例
  2. version: '3'
  3. services:
  4. php:
  5. container_name: php-fpm-81
  6. image: php:8.1-fpm-alpine
  7. restart: always
  8. networks:
  9. - nginx_network
  10. ports:
  11. - "9000:9000"
  12. volumes:
  13. - "H:/home/code/docker/web:/var/www/html" #代码目录
  14. #- "H:/home/code/docker/php81/etc:/usr/local/etc" #php配置文件夹,可选
  15. #- "H:/home/code/docker/php81/log:/var/log/php" #log,可选
  16. networks:
  17. nginx_network:
  18. ipv4_address: 172.18.0.3
  19. nginx:
  20. container_name: nginx-common
  21. image: nginx:latest
  22. restart: always
  23. environment:
  24. - TZ=Asia/Shanghai
  25. ports:
  26. - "8008:80"
  27. depends_on:
  28. - "php"
  29. volumes:
  30. - "H:/home/code/docker/web:/var/www/html" #代码目录
  31. - "H:/home/docker/nginx/nginx_conf.d:/etc/nginx/conf.d" #配置文件目录
  32. #- "H:/home/docker/nginx/log:/var/log/nginx" #log,可选
  33. networks:
  34. nginx_network:
  35. ipv4_address: 172.18.0.4
  36. redis:
  37. image: redis:latest
  38. container_name: php-redis
  39. restart: always
  40. privileged: true #root权限
  41. ports:
  42. - "6375:6379"
  43. volumes:
  44. - "H:/home/code/docker/redis/myredis.conf:/etc/redis/redis.conf"#配置目录
  45. - "H:/home/code/docker/redis/data/:/data" #数据目录
  46. networks:
  47. nginx_network:
  48. ipv4_address: 172.18.0.5
  49. command: redis-server /etc/redis/redis.conf #已对应的配置文件启动
  50. mysql:
  51. image: mysql:5.7
  52. container_name: php-mysql
  53. privileged: true
  54. ports:
  55. - "3307:3306"
  56. volumes:
  57. - "H:/home/code/docker/mysql/data:/var/lib/mysql" #数据目录
  58. - "H:/home/code/docker/mysql/conf:/etc/mysql/conf.d" #配置目录
  59. - "H:/home/code/docker/mysql/log:/var/log" #log目录
  60. environment:
  61. - MYSQL_ROOT_PASSWORD=123456
  62. networks:
  63. nginx_network:
  64. ipv4_address: 172.18.0.6
  65. networks:
  66. nginx_network:
  67. driver: bridge
  68. ipam:
  69. config:
  70. - 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  网络名称

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/715463
推荐阅读
相关标签
  

闽ICP备14008679号