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])
相关推荐
蜜獾云13 分钟前
linux-磁盘挂载
linux·运维·服务器
翻斗包菜32 分钟前
Nginx 四大核心功能实战:正向代理 + 反向代理 + 缓存 + Rewrite 正则
运维·nginx·缓存
阿望要努力上研究生40 分钟前
Docker入门常用指令和Docker概念
运维·docker·容器
蜜獾云42 分钟前
从linux内核理解Java怎样实现Socket通信
java·linux·运维
战南诚1 小时前
docker的使用技巧
运维·docker·容器
pupudawang1 小时前
使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南
运维·nginx·https
痴心阿文1 小时前
Nextjs用法整理
运维·服务器
無限神樂1 小时前
docker,docker compose,k8s之间的区别
docker·容器·kubernetes
Xu_youyaxianshen2 小时前
[特殊字符] Docker 小白极速入门笔记
linux·docker
getapi2 小时前
FinalShell 连接 CentOS 7 文件管理失败修复教程
linux·运维·centos