用Docker为Laravel5.4部署本地开发环境:php7.1+redis+mysql+nginx

news2024/9/17 8:39:44

记一次用Docker为Laravel5.4部署本地开发环境:php7.1+redis+mysql+nginx

  1. 首先我们在官方镜像php:7.1-fpm-alpine的基础上安装pdo_mysql和redis扩展,以及composer
    # 使用官方的 PHP 7.1 FPM Alpine 镜像作为基础镜像
    FROM php:7.1-fpm-alpine
    
    # 更新软件包索引
    RUN apk update
    
    # 安装必要的依赖包
    RUN apk add --no-cache \
        curl \
        ca-certificates \
        unzip \
        libzip-dev \
        icu-dev \
        zlib-dev \
        tcl-dev \
        autoconf \
        g++ \
        libc-dev \
        make \
        libxml2-dev \
        re2c
    
    RUN docker-php-ext-install pdo_mysql \
        && docker-php-ext-enable pdo_mysql
    
    # 安装redis扩展
    RUN pecl install https://pecl.php.net/get/redis-4.3.0.tgz
    
    RUN echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
    
    # 安装 Composer
    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
        && chmod +x /usr/local/bin/composer
    
    # 设置工作目录
    WORKDIR /var/www/html
    
    # 暴露 PHP-FPM 默认监听的端口
    EXPOSE 9000
    
    # 启动 PHP-FPM 服务
    CMD ["php-fpm"]
    

​ 运行docker build -t my-php-fpm-composer .构建镜像。

  1. 编写docker-compose.yml

    version: '3.8'
    
    services:
      web:
        image: my-php-fpm-composer
        volumes:
          - .:/var/www/html
        depends_on:
          - db
          - composer
        environment:
          - DB_CONNECTION=mysql
          - DB_HOST=db
          - DB_PORT=3306
          - DB_DATABASE=homestead
          - DB_USERNAME=homestead
          - DB_PASSWORD=secret
    
      nginx:
        image: nginx:alpine
        ports:
          - "80:80"
        volumes:
          - .:/var/www/html
          - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
          - ./docker/snippets:/etc/nginx/snippets
        depends_on:
          - web
    
      db:
        image: mysql:5.7
        command: --default-authentication-plugin=mysql_native_password
        environment:
          MYSQL_ROOT_PASSWORD: secret
          MYSQL_DATABASE: homestead
          MYSQL_USER: homestead
          MYSQL_PASSWORD: secret
        volumes:
          - dbdata:/var/lib/mysql
    
      redis:
        image: redis:alpine
        volumes:
          - redisdata:/data
    
      composer:
        image: composer:latest
        volumes:
          - .:/var/www/html
        working_dir: /var/www/html
        command: install --ignore-platform-reqs --no-interaction --optimize-autoloader
    
    volumes:
      dbdata:
      redisdata:
    
  2. docker-compose.yml的目录放置配置文件

    1. nginx.conf

      server {
          listen 80;
      
          root /var/www/html/public;
          index index.php index.html index.htm;
      
          server_name localhost;
      
          location / {
              try_files $uri $uri/ /index.php?$query_string;
          }
      
          location ~ \.php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass web:9000;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
          }
      
          location ~ /\.ht {
              deny all;
          }
      
          # 确保这个位置允许访问
          location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
              add_header Cache-Control "public, max-age=86400";
              expires 30d;
              log_not_found off;
          }
      }
      
    2. fastcgi-php.conf

      # /etc/nginx/snippets/fastcgi-php.conf
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
      fastcgi_param DOCUMENT_ROOT $document_root;
      fastcgi_param SCRIPT_NAME $fastcgi_script_name;
      fastcgi_param REQUEST_URI $request_uri;
      fastcgi_param QUERY_STRING $query_string;
      fastcgi_param HTTPS $https if_not_empty;
      fastcgi_param GATEWAY_INTERFACE CGI/1.1;
      fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
      fastcgi_param REMOTE_ADDR $remote_addr;
      fastcgi_param REMOTE_PORT $remote_port;
      fastcgi_param SERVER_PROTOCOL $server_protocol;
      fastcgi_param SERVER_PORT $server_port;
      fastcgi_param SERVER_NAME $server_name;
      
  3. 最后我们运行docker-compose up 将容器运行起来

  4. 再进入php的容器docker-compose exec web sh,运行composer install 完成依赖包的安装。🎉到这就结束了,去你的项目中愉快玩耍吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka (快速)安装部署

文章目录 1、软件下载&配置环境1_JDK安装2_Zookeeper安装3_Kafka安装 2、单机安装1_配置主机名和IP映射2_单机Kafka配置 3、集群安装1_配置主机名和IP的映射关系2_时钟同步3_Zookeeper配置信息4_集群Kafka配置 4、kafka的其他脚本命令5、监控工具Kafka-eagle安装 1、软件下…

Java并发编程实战 07 | 如何正确停止线程

什么时候需要停止一个线程? 一个线程被创建并启动之后,大部分情况下都会自然运行至结束,但是也有一些情况需要主动停止线程,比如: 用户主动取消执行:用户可能会中止一个正在进行的操作,这时需…

Python系统教程004(字符串)

一、input函数的算术运算 一包奥特曼卡片卖0.5元,小华想编写一个只需要输入卡片的包数就能自动计算价格的程序,请你帮帮它。 解题 报出类型错误 注意: input函数接收到的键盘信息,默认都是字符串的数据类型。 字符串的数据类型…

书生浦语三期实战营 [进阶] LMDeploy 量化部署进阶实践

LMDeploy 量化部署进阶实践 1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 在终端中,让我们输入以下指令,来创建一个名为lmdeploy的conda环境,python版本为3.10,创建成功后激活环境并安装0.5.3版本的lmdeploy及相关…

IM即时通讯,稳定可靠的即时通讯服务-WorkPlus

在现代企业日常工作中,即时通讯已成为了一种不可或缺的沟通工具。为了满足企业对稳定可靠的即时通讯服务的需求,WorkPlus提供了一款优秀的IM即时通讯平台,以满足企业高效沟通和协作的要求。本文将深入探讨IM即时通讯服务的重要性以及WorkPlus…

Linux下的RTC应用

RTC RTC基础知识 1. RTC简介 RTC 全称是 Real-Time clock,翻译过来是实时时钟。实时时钟在日常生活中的应用也比较泛,比如电子时钟。实时时钟可以为系统提供精确的实时时间,通常带有电池,可以保证系统断电时还可以正常工作&…

JVM虚拟机 - 基础篇

一、初始JVM 1. JVM是什么 2. JVM的三大核心功能是什么? 3. 常见的JVM虚拟机有哪些? 二、字节码文件详解 1. Java虚拟机的组成 2. 字节码文件的组成 (1)基本信息 Magic魔数 主副版本号 (2)常量池 &#…

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)…

Day19_0.1基础学习MATLAB学习小技巧总结(19)——MATLAB绘图篇(2)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是…

H5漂流瓶社交系统源码

一个非常有创意的H5漂流瓶社交系统源码,带完整前端h5和后台管理系统。 环境:Nginx 1.20.1-MySQL 5.6.50-PHP-7.3 代码下载

python简单计算入门教程|加减法

python通过调用numpy模块,非常擅长数学计算。再通过调用matplotlib模块,可以自由自在地输出numpy计算的结果。 今天,我们就尝试一些基本计算。 下述是正弦函数和余弦函数的加法和减法计算结果。 图1 代码为: import matplotli…

【stata】处理城市名和城市代码

写了两个简单的外部命令,在这里分享一下,希望能帮到大家 1.citycode_mutate 第一个命令是citycode_mutate,用于识别字符串中可能存在的城市信息,并生成城市代码(图1图2)。 2.cityname_mutate 第二个命令…

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_word(struct pci_…

C++(一)----C++基础

1.C的发展史 C语言诞生后,很快普及使用,但是随着编程规模增大且越来越复杂,并且需要高度的抽象和建模时,C语言的诸多短板便表现了出来,为了解决软件危机,上世纪八十年代,计算机界提出了oop&…

拓扑排序-广度优先遍历思路

本质: 【广度优先遍历 】【贪心算法】应用于【有向图】的专有名词 应用场景:任务调度,课程安排 作用: 得到一个不唯一的【拓扑序】检测【有向图】是否有环,使用数据【并查集】 使用:先找度为0的前驱节点…

Linux运维排查常见故障_在tmp目录下有大量包含picture_ 的临时文件,每天晚上2 30需要对一天前的文件进行

echo“”>>/etc/security/limits.conf echo“*softnproc65535″>>/etc/security/limits.conf echo“*hardnproc65535″>>/etc/security/limits.conf echo“*softnofile65535″>>/etc/security/limits.conf echo“*hardnofile65535″>>/etc/secur…

【自动驾驶】控制算法(八)横向控制Ⅲ | 代码与模型

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

以太网--TCP/IP协议(一)

概述 以太网是局域网的一种,其他的比如还有令牌环、FDDI。和局域网对应的就是广域网,如Internet,城域网等。 从网络层次看,局域网协议主要偏重于低层(业内一般把物理层、数据链路层归为低层)。以太网协议…

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP…

vue动态统计图的绘画

效果图&#xff1a; 实现&#xff1a; 一、导入依赖 import echarts from echarts 二、vue的代码实现 1.在main.js导入文件 // 引入 echarts 插件 import echarts from echarts // 配置成全局组件 Vue.prototype.$echarts echarts2.代码实现 <template><!--为echa…