当前位置: 首页 > article >正文

mac下使用docker安装php7.4环境

已经很久没写php了,但是有些老项目需要维护,mac是Intel的,之前是使用brewa安装php环境,只能更新8.0以后的,所以本次使用docker来搭建一个php项目环境,详细流程。

本项目以 Laravel 框架为例,启动文件按照自己的项目而定

安装目录自定义,我本地的安装目录是 ysw 是我本机的名称,目录可以自己定

/Users/ysw/docker_data

1、在docker_data在创建目录

        1.nginx

        2.php

2、在docker_data下创建文件

        1.docker-compose.yml

services:
  nginx:
    build:
      context: ./nginx  # 确保 ./nginx 目录存在并包含 Dockerfile
    container_name: nginx-container
    ports:
      - "80:80" #注意本地的apacha环境,是否启动,启动则停止,或者修改docker映射端口
    volumes:
      # 这是项目地址,按照自己的项目地址改正即可 :后面的是docker映射目录,记得改名称
      - /Users/ysw/current/demo1:/var/www/demo1
      # 配置第二个用例 demo2项目地址修改即可
      - /Users/ysw/current/demo2:/var/www/demo2
      # 这是nginx配置文件,按照我给的目录层级则不需要改动,反之自己修改
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  php:
    build:
      context: ./php  # 确保 ./php 目录存在并包含 Dockerfile
    container_name: php-container
    volumes:
      - /Users/ysw/current/demo1:/var/www/demo1
      # 配置第二个用例 demo2项目地址修改即可
      - /Users/ysw/current/demo2:/var/www/demo2 
      # 项目如果需要 ssh,则需要加这一段,反之去除
      - /Users/ysw/.ssh:/root/.ssh  # 持久化 SSH 密钥,按需添加
  
  # docker搭建的redis需要这一段,如果不是则去除即可,这是网络设置,docker内通信用的
  redis:
    image: redis:latest
    container_name: redis-container
    ports:
      - "6379:6379"  # 映射 Redis 到主机

3、在docker_data下的php目录创建文件,基本全部复制即可,不需要改动

        1.Dockerfile

# 使用 PHP 7.4 FPM 镜像
FROM php:7.4-fpm

# 设置工作目录
WORKDIR /var/www/html

# 更新包列表并替换为阿里云的 Debian 镜像源
RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y \
    git \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    libzip-dev \
    unzip \
    && apt-get clean

# 配置 GD 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg

# 安装 PHP 扩展,按需添加
RUN docker-php-ext-install -j$(nproc) gd bcmath zip pdo_mysql

# 安装 Redis 扩展
RUN pecl install redis && docker-php-ext-enable redis

# 安装 composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 清理不必要的文件
RUN apt-get autoremove -y && \
    rm -rf /var/lib/apt/lists/*

4、在docker_data下的nginx目录创建文件,基本全部复制即可,不需要改动

        1.Dockerfile

FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf

        2.nginx.conf

server {
    listen 80;
    # 配置好后,需要在本机的 vim /etc/hosts 文件最后加入 127.0.0.1  demo1.test.com
    server_name demo1.test.com;

    # 这个目录就是上面指定的docker映射目录,不理解直接复制粘贴
    root /var/www/demo1/public;  # 确保这个路径指向 Laravel 的 public 目录

    # 下面的不要动
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;  # 将请求路由到 index.php
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;  # 确保 PHP 容器的端口
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

# 配置第二个项目 demo
server {
    listen 80;
    # 配置好后,需要在本机的 vim /etc/hosts 文件最后加入 127.0.0.1  demo1.test.com
    server_name demo2.test.com;

    root /var/www/demo2/public;
    # 下面的不要动
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

5、打开终端  进入  /Users/ysw/docker_data 

        brew 安装 docker-compose    执行 : brew install docker-compose

        如果已经有了则不需要处理,注意:新版的docker-compose 改为了 docker compose

        输入 (注意顺序)

                docker-compose down(这个是结束,重启先输入这个,没有启动过则没有任何输出),以下是正常的输出结果

[+] Running 4/4
 ✔ Container nginx-container    Removed                                                                                                                                     0.2s 
 ✔ Container redis-container    Removed                                                                                                                                     0.2s 
 ✔ Container php-container      Removed                                                                                                                                     0.2s 
 ✔ Network docker_data_default  Removed

                docker-compose up -d --build(第一次启动先输入这个),启动打印较多,只是复制最终的输出结果

[+] Running 4/4
 ✔ Network docker_data_default  Created                                                                                                                                     0.1s 
 ✔ Container redis-container    Started                                                                                                                                     0.3s 
 ✔ Container php-container      Started                                                                                                                                     0.3s 
 ✔ Container nginx-container    Started

6、在 浏览器输入 http://admin.test.com/ 即可显示,表示环境配置正常,具体路由按照自己的项目定

        

docker ps 查看启动项

7、注意事项

  1. 不能设置代理(翻墙),我本地翻墙后是访问不了的,你们自己测试即可
  2. git 可能存在 ssh校验,需要在本地生成 ssh-keygen -t ed25519 -C "<comment>"
    1. 并上传到git服务器,再上传到docker 
    2. 进入到 本机的 ssh 目录 执行以下命令,不会的问去ai
    3. 上传到docker,ssh生成之后是有2个文件,名称是自己起的,记得修改
      1. docker cp ./ysw-20241025-6 php-container:/root/.ssh/id_rsa
      2. docker cp ./ysw-20241025-6.pub php-container:/root/.ssh/id_rsa.pub
  3. 本机的apacha一定要停止(注意开启是否自启,否则下次开启又启动不了了),会干扰docker的nginx 端口冲突无法启动(修改docker映射端口不受此影响)
  4. 本机的brew安装的 ngixn、php、apache等最好都卸载掉,统一使用docker
  5. openssl记得升级,不会的就使用brew安装新版
  6. Dockerfile是没有后缀的,注意系统的隐藏文件后缀,可在终端查看是否带后缀
  7. 配置好后,一定要在本机的 vim /etc/hosts 文件加入 127.0.0.1  demo1.test.com
  8. 注意,redis是加入到了docker网络,如果项目启动报redis链接错误,在项目内redis配置改为  REDIS_HOST=redis-container(参考 docker ps 容器的名称,container_name),原来是 REDIS_HOST=127.0.0.1(这是报错信息:Connection refused [tcp://127.0.0.1:6379])

     


http://www.kler.cn/a/375171.html

相关文章:

  • Issac ROS navigation测试
  • 美国加州房价数据分析01
  • 注意力机制详解
  • java web springboot
  • 自动驾驶控制算法-横向误差微分方程LQR前馈控制
  • 03.01、三合一
  • 网络编程基础-Reactor线程模型-原理剖析
  • Nginx负载均衡配置详解
  • ConcurrentHashMap底层实现是什么
  • Linux高阶——1027—
  • AI产品经理实战手册:策略、开发与商业化指南
  • 2021李宏毅机器学习 1 机器学习基础 笔记
  • 树莓派开发相关知识六 -串口通讯
  • TCP/IP网络编程:理解网络编程和套接字
  • 【面试每日一题之CSS】2、line-height和heigh区别
  • Spring Boot实战:打造现代租房管理系统
  • 如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?
  • YOLOv6-4.0部分代码阅读笔记-loss_fuseab.py
  • Gitee push 文件
  • 【CRM系统选型指南:国内九大主流工具比较】
  • 专业140+总分430+四川大学854信号与系统考研川大原951电子信息与通信工程,真题,大纲,参考书。
  • 《证据规定》之对鉴定意见异议的处理
  • java项目之基于springboot的疾病防控综合系统的设计与实现(springboot)
  • 微信jssdk在企业微信中失效
  • BGP路径属性与路由反射器
  • 下划线命名转驼峰