用 Docker 跑起整套商城
Docker 的好处是环境完全隔离,删掉重来的成本极低,特别适合本地折腾。
compose 文件
在项目根目录新建 docker-compose.yml:
services:
web:
image: nginx:1.24-alpine
ports:
- "8080:80"
volumes:
- ./:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
build: ./docker/php
volumes:
- ./:/var/www/html
environment:
TZ: Asia/Shanghai
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: shop
TZ: Asia/Shanghai
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
PHP 镜像
docker/php/Dockerfile:
FROM php:8.0-fpm-alpine
RUN apk add --no-cache libzip-dev freetype-dev libjpeg-turbo-dev libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install pdo_mysql mysqli gd zip bcmath opcache
Nginx 配置
docker/nginx.conf:
server {
listen 80;
root /var/www/html/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?s=$uri;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
启动
docker compose up -d
docker compose logs -f php
浏览器打开 http://localhost:8080/install,数据库主机填 db(服务名),不是 127.0.0.1——这是最常见的一个坑。
:::warning 别用于生产 这份配置为了简洁没有做任何加固:root 密码是明文、数据库端口没关、没有资源限制。生产环境请另行配置。 :::
评论 0