docker 部署lnmp环境
1 生成docker-compose.yml,用这个脚本生成
#!/bin/bash echo "=======================================" echo " LNMP 多 PHP + 多项目 + Redis" echo "=======================================" # MySQL 镜像修复:Oracle 官方镜像 MYSQL_IMAGE="mysql/mysql-server:8.0" echo "[1] 创建目录结构..." mkdir -p /www/lnmp/{nginx,php80,php82,project80,project82,mysql,redis} # -------------------------------------------------------- # 写入 Nginx 配置 # -------------------------------------------------------- echo "[2] 写入 Nginx 多站点配置..." cat > /www/lnmp/nginx/default.conf <<EOF server { listen 80; server_name project80.local; root /var/www/project80; index index.php; location / { try_files \$uri \$uri/ /index.php?\$query_string; } location ~ \.php\$ { fastcgi_pass php80:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; } } server { listen 80; server_name project82.local; root /var/www/project82; index index.php; location / { try_files \$uri \$uri/ /index.php?\$query_string; } location ~ \.php\$ { fastcgi_pass php82:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; } } EOF # -------------------------------------------------------- # PHP 8.0 Dockerfile # -------------------------------------------------------- echo "[3] 写入 PHP 8.0 Dockerfile..." cat > /www/lnmp/php80/Dockerfile <<EOF FROM php:8.0-fpm RUN apt-get update && apt-get install -y zip unzip curl \\ && docker-php-ext-install pdo_mysql mysqli EOF # -------------------------------------------------------- # PHP 8.2 Dockerfile # -------------------------------------------------------- echo "[4] 写入 PHP 8.2 Dockerfile..." cat > /www/lnmp/php82/Dockerfile <<EOF FROM php:8.2-fpm RUN apt-get update && apt-get install -y zip unzip curl \\ && docker-php-ext-install pdo_mysql mysqli EOF # -------------------------------------------------------- # Docker Compose 配置 # -------------------------------------------------------- echo "[5] 生成 docker-compose.yml..." cat > /www/lnmp/docker-compose.yml <<EOF services: nginx: image: registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/nginx:latest ports: - "80:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./project80:/var/www/project80 - ./project82:/var/www/project82 depends_on: - php80 - php82 php80: build: ./php80 volumes: - ./project80:/var/www/project80 php82: build: ./php82 volumes: - ./project82:/var/www/project82 mysql: image: ${MYSQL_IMAGE} environment: MYSQL_ROOT_PASSWORD: root123456 volumes: - ./mysql:/var/lib/mysql ports: - "3306:3306" redis: image: registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis:7 command: redis-server --requirepass redis123 ports: - "6379:6379" volumes: - ./redis:/data EOF # -------------------------------------------------------- # 创建测试项目 # -------------------------------------------------------- echo "[6] 创建测试 index.php..." echo "<?php phpinfo();" > /www/lnmp/project80/index.php echo "<?php phpinfo();" > /www/lnmp/project82/index.php # -------------------------------------------------------- # 启动服务 # -------------------------------------------------------- echo "[7] 启动 LNMP..." cd /www/lnmp docker compose up -d --build echo "=======================================" echo " LNMP 运行成功!" echo "=======================================" echo "项目 1(PHP 8.0): http://project80.local" echo "项目 2(PHP 8.2): http://project82.local" echo "请在本机 hosts 文件中加入:" echo " 127.0.0.1 project80.local" echo " 127.0.0.1 project82.local" echo echo "Redis 密码:redis123" echo "MySQL 密码:root123456" echo "使用 MySQL 镜像:$MYSQL_IMAGE"
2 docker compose up -d 启动
生成后的yml是
services:
nginx:
image: nginx:1.28.0
container_name: lnmp-nginx
ports:
- "8090:8090"
- "8080:8080"
- "8081:8081"
- "80:80"
volumes:
- ./www:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
depends_on:
- php74
- php80
- php82
networks:
- lnmp
php74:
build:
context: ./php/base
args:
PHP_VERSION: "7.4"
image: php-base:7.4
container_name: lnmp-php74
volumes:
- ./www:/var/www
# - ./php/php74.ini:/usr/local/etc/php/php.ini
- ./php/conf/php74:/usr/local/etc
- ./logs/php74:/var/log
networks:
- lnmp
php80:
build:
context: ./php/base
args:
PHP_VERSION: "8.0"
image: php-base:8.0
container_name: lnmp-php80
volumes:
- ./www:/var/www
# - ./php/php80.ini:/usr/local/etc/php/php.ini
- ./php/conf/php80:/usr/local/etc
- ./logs/php80:/var/log
networks:
- lnmp
php82:
build:
context: ./php/base
args:
PHP_VERSION: "8.2"
image: php-base:8.2
container_name: lnmp-php82
volumes:
- ./www:/var/www
# - ./php/php82.ini:/usr/local/etc/php/php.ini
- ./php/conf/php82:/usr/local/etc
- ./logs/php82:/var/log
networks:
- lnmp
redis:
image: redis:7.2
container_name: lnmp-redis
ports:
- "6379:6379"
command: redis-server --requirepass redis123
volumes:
- ./redis/data:/data
networks:
- lnmp
mysql:
image: mysql:8.0
container_name: lnmp-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: simis_tool
MYSQL_USER: simis
MYSQL_PASSWORD: Simis@2025!
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./mysql/data:/var/lib/mysql
networks:
- lnmp
networks:
lnmp:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: "1450"
3 在php/base 下新建Dockerfile 用于扩展
ARG PHP_VERSION FROM php:${PHP_VERSION}-fpm RUN apt-get update && apt-get install -y \ git curl zip unzip \ libzip-dev \ libpng-dev libjpeg-dev libfreetype6-dev \ libonig-dev \ libxml2-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install \ pdo_mysql \ mysqli \ mbstring \ bcmath \ zip \ exif \ pcntl \ xml \ gd \ opcache \ && pecl install redis \ && docker-php-ext-enable redis \ && rm -rf /var/lib/apt/lists/*
4 我目前是/www/lnmp/www 然后新建 project74 project80 project82 目录,项目在这个文件下。
5 在nginx 的conf.d/中新增
default.conf
server { listen 80 default_server; server_name _; return 444; }
default.conf project74.conf project80.conf project82.conf
server { listen 80; server_name docker80.laravel.com; root /var/www/project80/util-google-helpers/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_pass php80:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
注意 root 的地址是容器项目的地址,不是宿主机的地址
就完成的服务器用docker 不是项目的环境。
4 重启命令
启动 docker compose up -d 停止 docker compose down 重启 docker compose restart 重启php80 php82 docker compose restart php80 docker compose restart php82 重启nginx docker compose restart nginx

浙公网安备 33010602011771号