傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下:

PHP

# 设置基础镜像
FROM php:8.2-fpm


# install dependencies
RUN apt-get update && apt-get install -y \
        vim \
        libzip-dev \
        libpng-dev \
        libjpeg-dev \
        iputils-ping \
        libmcrypt-dev \
        libmcrypt4 \
        libmhash-dev \
        libmhash2 \
        libxml2 \
        libxml2-dev \
        libbz2-1.0 \
        libbz2-dev \
        libfreetype6-dev \
	&& pecl install redis && docker-php-ext-enable redis \
        && rm -rf /var/lib/apt/lists/*

# install more php extensions
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install zip pdo_mysql gd


# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# 安装 OPcache
RUN docker-php-ext-install opcache

日常用的扩展都有了应该,

RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install zip pdo_mysql gd

这两个你也可以移到上面的RUN一同安装

Nginx

# 设置基础镜像
FROM nginx

# 安装一些必要的工具和额外软件包
RUN apt-get update && apt-get install -y \
    vim \
    curl \
    && rm -rf /var/lib/apt/lists/*

Mysql

直接从官方镜像资源中拉去

docker pull mysql

这样你将产生三个镜像

下面开始利用这三个镜像去构建你的项目容器

1.找到你的项目地址,比如我的:

/home/wanghaiyang/project/customeFrame/fr

2.准备一个文件夹,用来放你的compse.yml文件(默认情况下,这一组服务的名字就是你这个文件夹名字),

3.准备一个compose.yml文件:内容如下   

version: '3'

services:
  # PHP 服务
  php_server:
    image: php8.2
    # 使用的 PHP 镜像
    volumes:
      - /home/wanghaiyang/project/customeFrame/fr:/usr/share/nginx/html
    ports:
      - "9000:9000"
    # 其他 PHP 相关配置...
    container_name: "compose-php"
    networks:
       - custome-network
       
  # Nginx 服务
  api_server:
    image: nginx
    # 使用的 Nginx 镜像

    volumes:
      - /home/wanghaiyang/project/customeFrame/fr:/usr/share/nginx/html
      - ./custome_frame.conf:/etc/nginx/conf.d/default.conf
      # 映射本地文件系统中的目录到容器中,确保 Nginx 使用自定义配置

    ports:
      - "8080:80"
      # 将主机的 8080 端口映射到容器的 8080 端口

    depends_on:
      - php_server
      - db_server
      # 定义依赖关系,确保 Nginx 在 PHP 和 MySQL 之后启动
    container_name: "compose-api"
    networks:
       - custome-network
  # MySQL 服务
  db_server:
    image: mysql
    # 使用的 MySQL 镜像

    # 其他 MySQL 相关配置...
    environment:
      MYSQL_ROOT_PASSWORD: wqzbxh@2018$$
      # 设置 MySQL root 用户密码
    ports:
      - 3700:3306
    # 将主机的 3700 端口映射到容器的 3306 端口
    volumes:
      - ./db_data:/var/lib/mysql
    container_name: "compose-db"
    networks:
       - custome-network

  # Adminer 服务(用于管理 MySQL 数据库)
  adminer:
    image: adminer
    # 使用的 Adminer 镜像

    restart: always
    ports:
      - 3701:8080
      # 将主机的 3701 端口映射到容器的 8080 端口
    container_name: "compose-adminer"
networks:
   custome-network:

    

再给一个custome_frame.conf文件,

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    # 配置根目录和默认文件
    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    # 如果文件不存在,重写URL到index.php
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php last;
        break;
    }

    # 将 PHP 脚本通过 FastCGI 传递到监听在 127.0.0.1:9000 上的服务器
    location ~ \.php$ {
       fastcgi_pass   php_server:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
       include        fastcgi_params;
    }

    # 禁止访问 .htaccess 文件,如果 Apache 的文档根与 nginx 的文档根相符
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

这个时候已经全部结束了

adminer 这个东西是 管理数据库的,前身是phpAdmin的影子,它长这个样子

然后在你的当前目录直接就

docker compose up -d

然后就成功了,我们这个时候访问一下测试一下

OK没问题,说明Nginx 已经和 PHP 正常通讯了,我们再来看一下数据库请求;

证明也是没问题的

上面的基本上及参数一换就能用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于稀疏表示的小波变换多光谱图像融合算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 小波变换融合 PCA融合 基于稀疏表示的小波变换多光谱图像融合算法 性能指标对比 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........…

java八股 spring + mybatis

Spring常用注解(绝对经典)_spring注解-CSDN博客 框架篇-02-Spring-单例bean是线程安全的吗_哔哩哔哩_bilibili 1.spring.bean 单例 线程不安全 2.AOP 项目里可以说记录用户登录日志,利用request去获取姓名、ip、、请求方式、url&#xff0…

ros2中gazebo安装的注意事项

Install From source(推荐安装Fortress版本,好像很方便) ROS Be sure youve installed ROS Humble (at least ROS-Base). More ROS dependencies will be installed below. Gazebo Install either Edifice, Fortress, or Garden.(没有har…

MFC 运行时类信息机制

目录 运行时类信息机制概述 测试 宏代换分析 结构体 CRuntimeclass 函数 GetRuntimeClass() 总结 执行过程分析 运行时类信息机制概述 在程序运行过程中可以获知对象的类的相关信息(例如∶对象是否属于某个类) 如何使用? 类必须派生自CObject类…

MFC 动态创建机制

目录 动态创建机制概述 代码测试分析 执行过程 总结 动态创建机制概述 MFC 动态创建机制是 MFC 中的一项重要功能,它允许开发者在运行时动态创建和管理窗口控件。通过动态创建机制,开发者可以根据需要在程序运行过程中创建、显示和销毁窗口&#xf…

【K8S in Action】服务:让客户端发现pod 并与之通信(2)

一 通过Ingress暴露服务 Ingress (名词) 一一进入或进入的行为;进入的权利;进入的手段或地点;入口。一个重要的原因是每个 LoadBalancer 服务都需要自己的负载均衡器, 以及 独有的公有 IP 地址, 而 Ingres…

基于STM32的DS1302实时时钟模块应用及原理介绍

在嵌入式系统中,实时时钟模块是一个常见的功能模块,用于记录和管理系统的时间信息。DS1302是一款低功耗、具有多种功能的实时时钟芯片,被广泛应用于各种电子产品中。本文将介绍基于STM32微控制器的DS1302实时时钟模块的应用及原理&#xff0c…

案例163:基于微信小程序的校园二手交易平台系统设计与开发

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

快速入门学习定时任务框架-xxljob

定时任务框架-xxljob 简介 主要用于分布式任务调度,可以将任务调度和执行分布在多个节点上。它提供了一个集中式的管理平台,支持动态添加、修改、删除任务,以及任务的分片执行,确保任务在分布式环境中的高可用性的一个框架 spr…

OSI 七层参考模型及TCP/IP 四层模型

OSI 七层参考模型 七层模型,亦称 OSI ( Open System Interconnection )参考模型,即开放式系统互联。参考模型是国际标准化组织(ISO )制定的一个用于计算机或通信系统间互联的标准体系,一般称为…

在使用 npm install的时候提示node-sass command faile 解决方案

在使用npm install的时候错误提示node-sass 相关的。错误信息如下图: 解决方法(PS:凯哥的不适用) 出现这种问题基本是由于node版本与sass版本不匹配导致的 方案1:卸载node,安装对应版本 方案2&#xff1…

基于Arduino和HC-SR04的超声波测距系统设计

本文介绍了如何使用Arduino和HC-SR04超声波传感器设计并构建一个简单的超声波测距系统。我们将详细讨论硬件连线和编程步骤,并提供完整的Arduino代码。此系统可以应用于各种需要测量距离的项目,例如智能车辆、机器人和安防系统。 引言: 超声…

工具系列:PyCaret介绍_编写和训练自定义机器学习模型

文章目录 PyCaret安装PyCaret👉 让我们开始吧👉 数据集👉 数据准备PyCaret中的设置函数👉 可用模型👉 模型训练与选择👉 编写和训练自定义模型👉 GPLearn模型👉 NGBoost 模型&#x…

解决log4j多个日志都写到一个文件

之前客户端程序由于Websockt包依赖的log4j,就用log4j写日志了,Web用的log4j2没毛病。用log4j的多个logger的日志都写到一个文件里了,查了很多资料都没解决。今天闲了解决一下。 最后好使的配置 # 设置日志根 log4j.rootLogger INFO,Except…

嵌入式开发中利用strstr()对部分模块回传数据进行解析的问题(坑)

受到以下博文的启发: https://www.cnblogs.com/yup1983/p/11337837.html 验证: 最近通过ESP8266远程控制小车,在wifi回传的数据解析过程中遇到标题所述的烦恼 如上截图所示,数据回传过程中会接受到‘\0’字节对应的ASCII码为0x0…

基于IPP-FFT的线性调频Z(Chirp-Z,CZT)的C++类库封装并导出为dll(固定接口支持更新)

上一篇分析了三种不同导出C++类方法的优缺点,同时也讲了如何基于IPP库将FFT函数封装为C++类库,并导出为支持更新的dll库供他人调用。 在此基础上,结合前面的CZT的原理及代码实现,可以很容易将CZT变换也封装为C++类库并导出为dll,关于CZT的原理和实现,如有问题请参考: …

大数据应用开发1——配置基础环境

一、基础环境配置 1.配置虚拟网络 1.1、点击1、编辑2和3, 1.2、点开4,编辑网关 2、配置虚拟机环境 1.1、安装一台虚拟机,使用root用户登录,打开终端 1.2修改主机名 终端输入: vim /etc/hostname使用vim编辑/etc/ho…

MQ(消息队列)相关知识

1. 什么是mq 消息队列是一种“先进先出”的数据结构 2. 应用场景 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何…

SpringMVC核心处理流程梳理

1、处理流程图展示 当我拿出这张图,阁下又该如何应对呢?执行流程是不是一目了然了。 2、DispatcherServlet:中央处理器或者中央调度器 下图官方的解释应该最完善了。 3、SpringMVC三大核心组件 HandlerMapping 处理器映射器,…

iApp最新版无服务器多功能软件库源码

无需服务器的多功能软件库源码分享,仅需添加一个后台应用和一个文档即可 使用教程如下: 在浏览器中打开理想后台地址:http://apps.xiaofei.run/user/ 如果没有账号,请注册一个免费账号。 登录账号后,添加一个后台应…