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

Docker Compose实战三:轻松部署PHP

通过前面的文章(Docker Compose基础语法与MySQL部署),你已经掌握了Docker Compose的基本语法和常用指令,并成功部署了一个MySQL数据库服务器。今天,我们将继续深入探索Docker Compose的强大功能,介绍如何使用它来部署PHP环境。PHP作为一种广泛使用的开源脚本语言,尤其适用于Web开发,并且与MySQL等数据库系统的集成非常便捷。本文将为你提供一个简单而高效的PHP部署解决方案。

一、环境准备

在开始之前,请确保你已经安装了Docker和Docker Compose。如果还没有安装,你可以访问Docker的官方网站下载并安装适用于你操作系统的版本。

二、创建项目目录

接下来,我们需要创建一个项目目录来存放相关的配置文件和代码。你可以使用以下命令来创建目录并进入其中:

mkdir -p /zzj/mydockercompose/phptry
cd /zzj/mydockercompose/phptry
mkdir -p ./nginx/{conf,log}
mkdir  ./www 

在这里插入图片描述
三、编写docker-compose.yml文件

在项目目录中,我们需要创建一个名为docker-compose.yml的文件。这个文件将定义我们的服务、网络、卷等配置。以下是一个基本的docker-compose.yml文件示例,用于部署PHP环境:

version: "3.9"  # 指定docker-compose文件使用的版本services:  # 定义服务# 定义名为php的服务php:image: php:7.4-fpm  # 使用官方的php镜像,版本为7.4-fpmcontainer_name: php-fpm  # 设置容器的名称为php-fpmvolumes:  # 挂载卷- /zzj/mydockercompose/phptry/www:/www  # 将宿主机的/zzj/mydockercompose/phptry/www目录挂载到容器的/www目录ports:  # 端口映射- "9000:9000"  # 将宿主机的9000端口映射到容器的9000端口,用于PHP-FPM的通信restart: always  # 设置容器总是重启,除非被手动停止# 定义名为nginx的服务nginx:image: nginx  # 使用官方的nginx镜像container_name: my_nginx  # 设置容器的名称为my_nginxdepends_on:  # 指定nginx服务依赖于php服务,确保php服务先启动(注意:这仅控制启动顺序,不保证服务可用性)- phplinks:  # 创建一个到php服务的链接(在现代Docker中,这通常不是必需的,因为服务可以通过网络名进行通信)- phpvolumes:  # 挂载卷- /zzj/mydockercompose/phptry/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf  # nginx配置文件- /zzj/mydockercompose/phptry/nginx/log:/var/log/nginx  # nginx日志目录- /zzj/mydockercompose/phptry/www:/usr/share/nginx/html  # 网站根目录,与php容器共享ports:  # 端口映射- "8080:80"  # 将宿主机的8080端口映射到容器的80端口,用于HTTP通信restart: always  # 设置容器总是重启,除非被手动停止

四、编写Nginx配置文件

接下来,我们需要在项目目录中编写一个Nginx的配置文件。

vim ./nginx/conf/default.conf

以下是一个简单的Nginx配置文件示例:

server {listen       80;listen  [::]:80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.php index.html index.htm;}# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000location ~ \.php$ {fastcgi_pass   php-fpm:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;include        fastcgi_params;}
}

五、启动服务

现在,我们已经准备好了所有的配置文件和代码。接下来,我们可以使用Docker Compose来启动服务。在项目目录中运行以下命令:

docker compose up -d

这个命令将在后台启动并运行PHP和Nginx容器。
在这里插入图片描述
你可以使用docker compose ps命令来查看容器的运行状态,这里就不做演示了。

六、验证部署

最后,我们需要验证PHP是否已经成功部署并正在运行。打开你的浏览器,访问http://localhost:8080,你应该会看到Nginx的默认欢迎页面。然后,你可以在www/index.php中创建一个简单的PHP脚本,内容如下:

<?php
echo "hello!php";
echo phpinfo();
?>

刷新浏览器并访问http://localhost:8080,你应该会看到PHP的配置信息页面。如下:
在这里插入图片描述
七、停止并删除服务

当你不再需要PHP和Nginx容器时,你可以使用以下命令来停止并删除它们:

docker-compose stop
docker-compose down -v

八、总结

通过本文的介绍,你已经学会了如何使用Docker Compose部署PHP环境。这种方法不仅简单易懂,而且非常灵活和强大。你可以根据自己的需求对PHP进行配置和扩展,以满足各种应用场景的需求。希望这篇博客对你有所帮助!如果你有任何问题或建议,请随时在评论区留言。

相关文章:

Docker Compose实战三:轻松部署PHP

通过前面的文章&#xff08;Docker Compose基础语法与MySQL部署&#xff09;&#xff0c;你已经掌握了Docker Compose的基本语法和常用指令&#xff0c;并成功部署了一个MySQL数据库服务器。今天&#xff0c;我们将继续深入探索Docker Compose的强大功能&#xff0c;介绍如何使…...

数据分析实战—房价特征关系

1.实战内容 &#xff08;1&#xff09; 读取房价特征关系表&#xff08;house_price.npz&#xff09;绘制离地铁站的距离与单位面积的房价的散点图&#xff0c;并对其进行分析&#xff1b; import pandas as pd import numpy as np import warnings warnings.filterwarnings(&…...

云和恩墨 zCloud 与华为云 GaussDB 完成兼容性互认证

近日&#xff0c;云和恩墨&#xff08;北京&#xff09;信息技术有限公司&#xff08;以下简称&#xff1a;云和恩墨&#xff09;的多元数据库智能管理平台 zCloud 与华为云计算技术有限公司&#xff08;以下简称&#xff1a;华为云&#xff09;的 GaussDB 数据库完成了兼容性互…...

【大语言模型LangChain】 ModelsIO OutputParsers详解

【大语言模型LangChain】 ModelsIO OutputParsers详解 一、简介二、OutputParsers 的优势三、解析器类型四、实战示例1、String 解析器2、Json 解析器3、Pydantic 解析器4、结构化输出解析器5、OpenAI 函数输出解析器5.1、JsonOutputFunctionsParser5.2、JsonKeyOutputFunction…...

PaddleSpeech本地部署文档

windows安装paddlespeech步骤&#xff1a; 1. 安装vs c编译环境 对于 Windows 系统&#xff0c;需要安装 Visual Studio 来完成 C 编译环境的安装。 Microsoft C Build Tools - Visual Studio 2. 安装conda conda create -y -p paddlespeech python3.8 conda activate pad…...

Android 第三方框架:RxJava:源码分析:责任链模式

文章目录 责任链模式RxJava中的责任链总结 责任链模式 RxJava中的责任链 链式调用的使用过程中形成了两个单向链表 第一个单向链表是Observable链表 它的形成过程&#xff1a; 1.首先调用Observable的静态方法创建第一个Observable对象&#xff0c;作为Observable链表的表…...

网络安全 与 加密算法

计算机中的网络安全 在本篇中介绍了以下几个方面: 机密性 密码学 对称加密算法(DES, 3DES, AES) 公开秘钥算法 RSA大素数的获取 完整性 散列函数(MD5, SHA-1, 并没有提及算法实现) 报文鉴别(MAC) 数字签名 端点鉴别 应用 SSL(TCP网络安全) 运行时安全 防火墙的基本知识 …...

UE4_贴花_贴花基础知识二

五、多表面投射 在本示例中&#xff0c;你将了解贴花如何在多个表面上进行投射。请注意&#xff0c;如果表面朝向与投射方向较为平行&#xff0c;贴花投射时必然会产生一些拉伸。另外&#xff0c;请记住&#xff0c;贴花可以在包括骨骼网格体在内的静态和动态网格体上进行投射。…...

ElasticSearch 搜索、排序、分页功能

一、DSL 查询文档 ElasticSearch 的查询依然是基于 json 风格的 DSL 来实现的。 官方文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl.html 1.1 DSL 查询分类 常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数…...

MySQL-9.1.0 实现最基础的主从复制

目录 1 实验介绍 2 实验准备 2.1 创建目录为MySQL挂载使用 2.2 编写 docker-compose.yml 文件 2.3 启动容器 3 主从复制操作 3.1 MASTER 操作指令 3.2 SLAVE1 操作指令 3.3 SLAVE2 操作指令 4 验证是否实现主从 4.1 导入sql脚本查看是否正常主从复制 4.2 检验从库是否看见复制…...

Java中的“泛型“

泛型&#xff08;Generics&#xff09;是Java中的一种重要特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff08;type parameters&#xff09;。泛型的主要目的是提高代码的类型安全性和重用性。下面我将详细讲解Java中的泛型。 1. 泛型的基本概念 泛型允许我…...

前端(五)css属性

css属性 文章目录 css属性一、字体属性二、文本属性三、背景属性四、盒子模型 一、字体属性 font-weight&#xff1a;文字粗细&#xff0c;在100到900之间&#xff0c;normal(400),bord(700),inherit(继承父类) font-style&#xff1a;文字风格&#xff0c;normal表示正常(默认…...

总结拓展十七:SAP 采购订单行项目“交货“页签解析

《 SAP采购订单行项目“交货”页签字段解析》 在 SAP 系统的采购流程中&#xff0c;采购订单行项目的“交货”页签承载着关键的信息&#xff0c;其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段&#xff0c;对于确保采购流程的顺利进行、优化…...

分布式日志系统设计

一、分布式日志系统定义 分布式日志系统是一种用于收集、存储和分析大规模分布式系统日志的系统。它可以帮助开发人员和系统管理员实时监控和调试系统&#xff0c;提高系统可靠性和可用性&#xff0c;同时也可以用于日志分析和故障排查。 二、简单设计思路 日志收集&#xff…...

DApp开发如何平衡性能与去中心化?

DApp的核心价值在于信任、透明和去中心化&#xff0c;但这些特点往往伴随着性能的瓶颈和高成本。在DApp开发中&#xff0c;如何在保证去中心化的前提下提升性能&#xff0c;成为开发者面临的重要挑战。如何实现性能与去中心化的平衡是一个重要课题。 一、为什么去中心化影响性…...

RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10

目录 前言 一、Qt5WebEngine简介 二、Qt5WebEngine编译 总结 前言 Rockchip RK3588是一款强大的多核处理器,广泛应用于边缘计算、人工智能、嵌入式系统等领域。为了在RK3588上运行自定义的Linux系统,并使用Qt5WebEngine进行Web内容渲染,Buildroot是一个非常合适的工具。本…...

2024年12月GESPC++三级真题解析

一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 题目123456789101112131415答案 B D A A D B C A A D D C D C A 1.下列二进制表示的十进制数值分别是&#xff08; &#xff09;[10000011]原&#xff08; &#xff09; [10000011]补&#xff…...

vue-router路由传参的两种方式(params 和 query )

一、vue-router路由传参问题 1、概念&#xff1a; A、vue 路由传参的使用场景一般应用在父路由跳转到子路由时&#xff0c;携带参数跳转。 B、传参方式可划分为 params 传参和 query 传参&#xff1b; C、而 params 传参又可分为在 url 中显示参数和不显示参数两种方式&#x…...

Asp.net 做登录验证码(MVC)

public class ValidateCode{/// <summary>/// 创建随机数/// </summary>/// <param name"num"></param>/// <returns></returns>public string CreateRandom(int num){string str "ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpq…...

在 Chrome中直接调用大型语言模型的API

AI 时代的高速发展&#xff0c;我们都习惯了使用 ChatGPT、Claude、Gemini 和其他 AI 工具来询问各种问题&#xff0c;目前大部分的 AI 应用都是通过服务端 API 来实现的。 如果想要在 Web 上使用 AI 功能往往需要靠服务器来处理一些非常大的模型。这在制作一些生成内容的 AI …...

流程越来越规范,但员工体验却越来越差

在很多企业推进 IT 管理规范化的过程中&#xff0c;流程建设往往是重点。 审批流程更加清晰&#xff0c;操作步骤更加标准&#xff0c;所有请求都可以通过系统统一管理。从管理角度来看&#xff0c;这是明显的进步。 流程可控、操作可追溯、风险也更容易管理。但从员工的实际体…...

QAnything混合检索实战:ElasticSearch与向量搜索的协同优化

QAnything混合检索实战&#xff1a;ElasticSearch与向量搜索的协同优化 1. 为什么电商搜索总在“猜”用户心思&#xff1f; 你有没有遇到过这样的情况&#xff1a;在电商平台搜索“轻便透气运动鞋”&#xff0c;结果首页全是厚重的登山靴&#xff1f;或者搜“适合夏天穿的连衣…...

智能求职工具GetJobs:让你的投递效率提升300%的全流程指南

智能求职工具GetJobs&#xff1a;让你的投递效率提升300%的全流程指南 【免费下载链接】get_jobs &#x1f4bc;【找工作最强助手】全平台自动投简历脚本&#xff1a;(boss、前程无忧、猎聘、拉勾、智联招聘) 项目地址: https://gitcode.com/gh_mirrors/ge/get_jobs 每天…...

只剩马斯克自己!xAI 11个联合创始人跑光了

11位联合创始人三年出清、只剩马斯克一人&#xff0c;xAI这场「天团散伙」背后&#xff0c;藏着AI时代最残酷的人才战争与帝国裂缝。3月28日&#xff0c;Ross Nordeen悄悄摘掉了自己在X平台上的xAI员工认证标识。他发了一张照片——「触碰一些草」。没有长篇告别信&#xff0c;…...

深度学习基石:从卷积神经网络理解 Stable Yogi 的图像生成能力

深度学习基石&#xff1a;从卷积神经网络理解 Stable Yogi 的图像生成能力 你是不是也好奇&#xff0c;像 Stable Yogi 这样能“凭空”画出精美图片的模型&#xff0c;它的“眼睛”和“大脑”究竟是怎么工作的&#xff1f;为什么给它一段文字描述&#xff0c;它就能理解并生成…...

AsyncAPI通道管理终极指南:如何高效组织消息流的关键技巧

AsyncAPI通道管理终极指南&#xff1a;如何高效组织消息流的关键技巧 【免费下载链接】spec The AsyncAPI specification allows you to create machine-readable definitions of your asynchronous APIs. 项目地址: https://gitcode.com/gh_mirrors/spec/spec AsyncAPI…...

RTKLIB进阶指南:深入理解北斗三代CNAV电文与BDS-3星历数据结构

RTKLIB进阶指南&#xff1a;北斗三代CNAV电文与星历数据结构深度解析 当你在RTKLIB的源码中第一次看到eph_t结构体里那些神秘的Adot、ndot字段时&#xff0c;是否好奇过它们如何精确描述北斗三号卫星的轨道变化&#xff1f;这些看似简单的浮点数背后&#xff0c;隐藏着中国自主…...

USB批量传输中ZLP的必要性:为何512字节整数倍数据包会丢失

1. USB批量传输中的ZLP到底是什么&#xff1f; 第一次遇到USB批量传输丢数据的问题时&#xff0c;我也是一头雾水。明明发送端显示数据已经成功发送&#xff0c;接收端却死活收不到完整数据。后来排查发现&#xff0c;问题出在数据包大小刚好是512字节的整数倍时。这就是我们今…...

Codesys电子凸轮Cam表两种设置方法对比:可视化拖拽 vs 程序动态配置

Codesys电子凸轮Cam表设置方法深度对比&#xff1a;可视化拖拽与程序动态配置实战解析 在工业自动化领域&#xff0c;电子凸轮技术正逐步取代传统机械凸轮&#xff0c;成为运动控制系统的核心组件。作为Codesys平台下的重要功能&#xff0c;Cam表的设置方法直接关系到运动轨迹…...

旧设备优化指南:iPhone 6s系统降级与性能提升全攻略

旧设备优化指南&#xff1a;iPhone 6s系统降级与性能提升全攻略 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 当你的iP…...