Docker Compose实战三:轻松部署PHP

news/2024/12/16 19:46:27/

通过前面的文章(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"><?php
echo "hello!php";
echo phpinfo();
?>

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

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

docker-compose stop
docker-compose down -v

八、总结

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


http://www.ppmy.cn/news/1555665.html

相关文章

Go 怎么做性能优化芝麻开门篇

一、性能优化的流程 我们在对某个功能&#xff08;或单个接口&#xff09;做性能优化的时候。一般是该功能&#xff08;或接口&#xff09;性能无法满足我们的业务要求&#xff0c;所以被迫优化。在开始优化之前&#xff0c;我们需要明白一些理论知识。 1、常见的性能优化指标…

【Java学习笔记】Map 接口实现类-HashMap

一、HashMap 小结 二、HashMap 底层机制及源码剖析 package com.hspedu.map_; import java.util.HashMap; /** * author 韩顺平 * version 1.0 */ SuppressWarnings({"all"}) public class HashMapSource1 { public static void main(String[] args) { HashMap map …

SpringBoot:快速构建微服务应用

一、SpringBoot简介 什么是SpringBoot 是由Pivotal团队提供的快速开发框架。它基于Spring框架&#xff0c;可以用于快速构建微服务应用程序。SpringBoot提供了一种快速、便捷的方式来启动和配置一个基于Spring的应用程序&#xff0c;它封装了很多常用的配置&#xff0c;简化了开…

小程序-基于java+SSM+Vue的校园水电费管理小程序设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

前端面试准备问题2

1.防抖和节流分别是什么&#xff0c;应用场景 防抖&#xff1a;在事件被触发后&#xff0c;只有在指定的延迟时间内没有再次触发&#xff0c;才执行事件处理函数。 在我的理解中&#xff0c;简单的说就是在一个指定的时间内&#xff0c;仅触发一次&#xff0c;如果有多次重复触…

【Linux】shell脚本二

2、接收用户的参数 shell脚本已经内设了用于接收用户输入参数的变量&#xff0c;变量之间可以使用空格隔开。 如&#xff1a;./test.sh one two three four $0&#xff1a;对应的是当前shell脚本程序的名称&#xff0c;即test.sh$#&#xff1a;对应的是总共有几个参数&#…

【机器学习】机器学习的基本分类-无监督学习-t-SNE(t-分布随机邻域嵌入)

t-SNE&#xff08;t-分布随机邻域嵌入&#xff09; t-SNE&#xff08;t-distributed Stochastic Neighbor Embedding&#xff09;是一种用于降维的非线性技术&#xff0c;常用于高维数据的可视化。它特别适合展示高维数据在二维或三维空间中的分布结构&#xff0c;同时能够很好…

二维数组,以及ARRAY的习题及答案

//二维数组 //2.1创建方式1 val arr5 Array.ofDim[Int](2,3)//2行2列 //2.2访问数组的元素 arr5(0)(0)1 arr5(0)(1)2 arr5(1)(0)3 arr5(1)(1)4 //2.3把一维数组转化为二维数组 var arr6 Array(1,2,3,4,5,6) var arr7 arr6.grouped(3)//3个元素一组 // println(arr7)…