首先你可以准备这个三个服务,也可以在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;

root /usr/share/nginx/html;

# 配置根目录和默认文件

location / {

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 正常通讯了,我们再来看一下数据库请求;

证明也是没问题的

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

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: