首先你可以准备这个三个服务,也可以在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/htmlports:- "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/mysqlcontainer_name: "compose-db"networks:- custome-network# Adminer 服务(用于管理 MySQL 数据库)adminer:image: adminer# 使用的 Adminer 镜像restart: alwaysports:- 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.phpif (!-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 正常通讯了,我们再来看一下数据库请求;
证明也是没问题的
上面的基本上及参数一换就能用