基于 Alpine 镜像搭建 PHP+MySQL+Redis+Nginx 环境的 Docker 部署方案

基于 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;"

六、关键配置说明

网络架构‌:
         使用自定义网络 app-network 实现容器间通信,PHP 容器通过服务名 mysql 和 redis 访问数据库。

数据持久化‌:
        MySQL 数据存储于 ./mysql/data 目录,Nginx 配置通过卷映射实现动态加载。

扩展管理‌:
        通过 Alpine 的 apk 包管理器安装系统依赖,使用 docker-php-ext-install 安装 PHP 扩展。

镜像优化‌:
        基于 Alpine 的镜像体积较小(PHP 镜像约 120MB,Nginx 镜像约 23MB)。

七、常见问题处理


PHP 扩展缺失‌:在 php/Dockerfile 中添加对应依赖后重建镜像。
容器启动顺序‌:通过 depends_on 控制依赖关系,但实际连接需在代码中实现重试机制。

### 部署包含Spring Boot、RedisNginx和Vue3项目的指南 #### 使用Docker部署综合项目结构 为了成功地使用Docker部署一个由Spring Boot后端、Redis缓存服务、Nginx作为反向代理以及Vue.js前端组成的复杂Web应用程序,通常需要创建多个容器来分别处理各个组件的服务。这可以通过定义`docker-compose.yml`文件实现多容器编排。 对于具体的配置细节,在`docker-compose.yml`中可以指定不同服务之间的依赖关系和服务本身的属性,比如暴露的端口号、挂载的数据卷等[^4]。 #### 构建前后端分离的应用架构 - **后端部分**:基于Spring Boot框架发API接口,并通过Maven或Gradle工具构建可执行JAR包。在对应的Dockerfile中应指明基础镜像(如采用官方OpenJDK镜像),复制打包好的jar文件至目标位置并设置入口点命令启动Java应用;同时利用环境变量传递必要的配置项给应用程序实例,例如数据库连接字符串或者密钥等敏感信息[^3]。 如果遇到类似`ADD failed: file not found in build context or excluded by .dockerignore`这样的错误,则可能是由于`.dockerignore`文件排除了所需的资源或者是当前工作目录下的相对路径不正确所引起的。确保项目根目录存在有效的输出制品并且未被忽略规则匹配上是解决问题的关键所在[^2]。 - **前端部分**:以Vue CLI脚手架为基础建立单页面应用(SPA),经过npm run build指令产出静态网页资产放置于特定文件夹内供后续集成调优阶段引用。针对Vue Router的历史模式(History Mode)特性做适配调整时,需配合Nginx服务器设定恰当的位置路由规则以便正确解析URL地址映射到实际存在的HTML文档片段之上[^1]。 ```yaml version: '3' services: backend: image: springboot-app ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydatabase?useSSL=false&serverTimezone=UTC SPRING_REDIS_HOST: redis depends_on: - db - redis frontend: image: nginx volumes: - ./frontend/dist:/usr/share/nginx/html ports: - "80:80" db: image: mysql/mysql-server:latest environment: MYSQL_ROOT_PASSWORD: jeecg123456 volumes: - db_data:/var/lib/mysql redis: image: redis:alpine volumes: db_data: ``` 上述YAML片断展示了如何组合各独立部件形成统一的整体解决方案。其中特别强调了关于MySQL密码默认值的信息[^5]。 #### 注意事项 确保所有涉及的安全凭证都妥善保管起来,不要硬编码进源代码或是公版本控制系统里面去。另外考虑到生产环境中可能涉及到更复杂的网络策略与安全组规则等因素的影响,建议提前做好充分测试验证再正式上线发布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值