基于 Alpine 镜像搭建 PHP+MySQL+Redis+Nginx 环境的 Docker 部署方案:
一、文件结构准备
mkdir -p ~/docker-app/{nginx,php,mysql,redis}
cd ~/docker-app
二、编写 Docker Compose 文件 (docker-compose.yml)
version: '3'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/var/www/html
networks:
- app-network
depends_on:
- php
php:
build: ./php
volumes:
- ./html:/var/www/html
networks:
- app-network
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0-alpine
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: userpass
volumes:
- ./mysql/data:/var/lib/mysql
networks:
- app-network
redis:
image: redis:alpine
ports:
- "6379:6379"
networks:
- app-network
networks:
app-network:
driver: bridge
三、PHP 镜像定制 (php/Dockerfile)
FROM php:8.1-fpm-alpine
# 安装系统依赖
RUN apk add --no-cache \
git \
libpng-dev \
libzip-dev \
$PHPIZE_DEPS
# 安装 PHP 扩展
RUN docker-php-ext-install pdo_mysql mysqli gd zip
# 安装 Redis 扩展
RUN pecl install redis && docker-php-ext-enable redis
# 安装 Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
四、Nginx 配置 (nginx/conf.d/app.conf)
server {
listen 80;
server_name localhost;
root /var/www/html;
location / {
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
五、部署与验证
启动服务
docker-compose up -d
测试 PHP
在 html 目录创建 index.php:
<?php
phpinfo();
验证 Redis 连接
docker exec -it app-redis redis-cli ping
验证 MySQL 连接
docker exec -it app-mysql mysql -uapp_user -puserpass -e "SHOW DATABASES;"