首先你可以准备这个三个服务,也可以在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 正常通讯了,我们再来看一下数据库请求;
证明也是没问题的
上面的基本上及参数一换就能用