Laravel 4.1项目Docker化技术问询:适配PHP5.6与MySQL5.7.20
Laravel 4.1 项目Docker化适配指南
1. 适配Laravel 4.1的PHP 5.6 Dockerfile编写
选择Docker Hub官方php:5.6-fpm镜像作为基础(官方镜像维护更稳定),需安装Laravel 4.1必需的PHP扩展、适配版本的Composer,并调整环境配置:
Dockerfile内容
# 基础镜像:PHP 5.6 FPM(配合Web服务器的标准运行模式) FROM php:5.6-fpm # 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone # 安装系统依赖(用于编译PHP扩展) RUN apt-get update && apt-get install -y \ libmcrypt-dev \ libpng-dev \ libjpeg-dev \ libfreetype6-dev \ && rm -rf /var/lib/apt/lists/* # 安装Laravel 4.1核心依赖扩展 RUN docker-php-ext-install -j$(nproc) \ mbstring \ mysqlnd \ pdo_mysql \ gd \ mcrypt # 配置GD扩展路径 RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ # 安装适配PHP 5.6的Composer 1.x版本(2.x最低要求PHP 7.2.5) RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=1.10.26 # 调整PHP运行参数 RUN echo "upload_max_filesize = 64M" >> /usr/local/etc/php/conf.d/custom.ini \ && echo "post_max_size = 64M" >> /usr/local/etc/php/conf.d/custom.ini \ && echo "max_execution_time = 300" >> /usr/local/etc/php/conf.d/custom.ini # 设置项目工作目录 WORKDIR /var/www/html
关键说明
- 必须选
php:5.6-fpm:Laravel项目需配合Web服务器(如Nginx),FPM是生产/开发环境的标准运行模式 - 必装扩展:
mcrypt是Laravel 4.1的核心依赖,pdo_mysql/mysqlnd用于数据库连接,mbstring处理多字节字符,gd支持图片处理 - Composer版本锁定:1.x版本是唯一兼容PHP 5.6的分支,指定
1.10.26为稳定兼容版
2. MySQL 5.7.20容器配置(无需自定义Dockerfile)
Docker Hub官方mysql:5.7.20镜像已满足需求,无需重新编写Dockerfile,只需通过配置文件或环境变量调整适配Laravel的参数:
核心配置要点
- 字符集适配:设置默认字符集为
utf8mb4(兼容emoji),排序规则utf8mb4_unicode_ci,匹配Laravel的编码要求 - 权限隔离:创建Laravel专用数据库和用户,避免直接使用root账号
- 性能调优:根据开发需求调整
max_allowed_packet、innodb_buffer_pool_size等参数
自定义配置文件示例(创建mysql/my.cnf)
[mysqld] default-character-set = utf8mb4 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci max_allowed_packet = 64M innodb_buffer_pool_size = 256M [client] default-character-set = utf8mb4
3. Docker Compose编排与Laravel 4.1最佳实践
通过docker-compose.yml编排PHP、MySQL、Nginx(可选)容器,实现一键启动一致的开发环境:
docker-compose.yml内容
version: '3' services: # PHP-FPM服务 php-fpm: build: ./php volumes: # 挂载本地项目目录,实现代码实时同步 - ./laravel-project:/var/www/html # 挂载自定义PHP配置(可选) - ./php/custom.ini:/usr/local/etc/php/conf.d/custom.ini environment: - APP_ENV=local - DB_HOST=mysql - DB_PORT=3306 - DB_DATABASE=laravel41 - DB_USERNAME=laravel_user - DB_PASSWORD=laravel_pass networks: - laravel-network depends_on: - mysql # MySQL服务 mysql: image: mysql:5.7.20 volumes: # 数据卷持久化MySQL数据,避免容器销毁丢失数据 - mysql-data:/var/lib/mysql # 挂载自定义配置文件 - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf environment: - MYSQL_ROOT_PASSWORD=root_pass - MYSQL_DATABASE=laravel41 - MYSQL_USER=laravel_user - MYSQL_PASSWORD=laravel_pass ports: - "3306:3306" networks: - laravel-network # Nginx服务(处理HTTP请求,可选) nginx: image: nginx:1.18-alpine volumes: - ./laravel-project:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" networks: - laravel-network depends_on: - php-fpm # 自定义桥接网络,实现容器间安全通信 networks: laravel-network: driver: bridge # 持久化MySQL数据的卷 volumes: mysql-data:
Laravel 4.1专属最佳实践
- 容器通信:PHP容器通过服务名
mysql访问数据库(Docker Compose自动解析服务名为主机名),无需硬编码IP - 实时开发:本地项目目录挂载到PHP容器,代码修改实时同步到容器,无需重新构建镜像
- 环境隔离:用
environment字段定义数据库参数,避免硬编码到Laravel配置文件 - 启动顺序:通过
depends_on确保MySQL启动后再启动PHP-FPM,避免数据库连接失败
4. Laravel 4.1配置调整
1. 环境变量配置(.env文件)
复制.env.example为.env,修改数据库连接参数:
APP_ENV=local APP_DEBUG=true DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel41 DB_USERNAME=laravel_user DB_PASSWORD=laravel_pass
2. 数据库配置文件(config/database.php)
调整MySQL连接的字符集与排序规则:
'mysql' => array( 'driver' => 'mysql', 'host' => getenv('DB_HOST'), 'database' => getenv('DB_DATABASE'), 'username' => getenv('DB_USERNAME'), 'password' => getenv('DB_PASSWORD'), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', ),
3. 目录权限调整
Laravel需要storage和bootstrap/cache目录的写权限,进入PHP容器执行:
docker-compose exec php-fpm bash chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache
4. Composer依赖安装
本地PHP 8.1无法兼容PHP 5.6的依赖,必须在PHP容器内执行:
docker-compose exec php-fpm composer install
5. 高效Docker开发流程与实践
1. 常用命令
- 启动所有服务:
docker-compose up -d - 进入PHP容器:
docker-compose exec php-fpm bash - 实时查看日志:
docker-compose logs -f php-fpm mysql - 停止并销毁容器:
docker-compose down - 执行Laravel命令:
docker-compose exec php-fpm php artisan migrate
2. 优化实践
- .dockerignore文件:在项目根目录创建,排除无需挂载到容器的文件,减少镜像体积:
vendor/ node_modules/ .git/ .env storage/logs/ - Xdebug调试:在PHP Dockerfile中安装Xdebug 2.5.5(适配PHP 5.6的最高版本),配置远程调试参数,配合IDE实现断点调试
- 缓存优化:在Dockerfile中把依赖安装步骤(如
apt-get install、composer install)放在代码复制之前,利用Docker缓存减少构建时间 - 环境变量管理:用
.env文件统一管理开发环境参数,避免修改docker-compose.yml
内容的提问来源于stack exchange,提问作者KKR77
相关产品推荐
相关产品推荐

