出于某些不可描述却又无可奈何的原因, 需要部署一个十年前的 PHP
老项目. 这个项目用到了 MySQL 5.5.54
, PHP 5.3.10
和 Apache 2.2.22
, 最坑的是不知道是 PHP
牛逼还是这项目牛逼, 在 PHP
版本号上有一点差别网站就起不来了…
所以考虑祭出 Docker
这个配环境神器.
拉取基础镜像
Docker
中大多数镜像都是基于 Ubuntu
基础镜像进行了修改构建,但是如果我们也从 Ubuntu
开始构建,那么工作量可想而知. 因此选取一个合适的基础镜像可以加快配置速度,也能减少我们配置的工作量. Docker Hub
这时候就是个好东西了, 几乎你想要的都能找到. 根据需要,选取了两个镜像作为本次开发环境配置的基础镜像.
1 | docker pull corvax19/php5.3.10-apache2.2.22-ubuntu14 |
拉取成功后可以通过 docker images
命令查看当前系统中的镜像:
如果由于某些不可描述却又无可奈何的原因导致拉取速度过慢的话, 建议更换镜像站为七牛云, 阿里云和亚马逊(中国)的 Docker 镜像
启动 MySql 容器
MySQL
作为公共的基础服务, 这里配置的 MySQL
不仅可以供其他容器调用, 也可以使用本地连接后使用, 很方便调试程序.
1 | docker run --name pbcls_mysql -e MYSQL_ROOT_PASSWORD=456123 -p 3306:3306 -d mysql:5.5.54 |
-d
表示以守护进程的模式启动一个名为 pbcls_mysql
的容器并且配置环境变量 MYSQL_ROOT_PASSWORD=456123
, 就是设置 root
密码为 456123
, 同时把容器的 3306
端口映射到本地的 3306
端口上(如果本地装有 MySQL
或者 MariaDB
等其他占用了 3306
端口的进程则可以映射到本地其他空闲端口上)
启动成功后就可以直接访问本地 3306
端口访问容器内的数据库了.
启动 PHP 和 Apache 容器
这个容器最主要的就是指定 /var/www/html
的位置方便启动网站, 同时为了能使用数据库, 还需要连接刚才已经启动的 MySQL
容器.
1 | sudo docker run -d --name pbcls_webserver --link pbcls_mysql:db -p 81:80 -v /home/zhou/Documents/PHPProjects/sourcecode:/var/www -v /home/zhou/Documents/PHPProjects/sourcecode:/var/www/html corvax19/php5.3.10-apache2.2.22-ubuntu14 |
--link
用于把 Mysql
容器作为 db
组件链接到当前容器中, 这里在 /var/www
和 /var/www/html
分别挂载了本地代码的位置 /home/zhou/Documents/PHPProjects/sourcecode
.这样就方便修改代码, 每次在本地修改完代码, 直接刷新浏览器页面就可以看到生效的更改. 然后把 80
端口映射到 外部的 81
端口上.
如果一切正常, 现在访问 127.0.0.1:81
就可以看到这个十年祖传代码已经 run
起来了:
错误解决
WARNING: Error loading config file:
1 | WARNING: Error loading config file: /home/zhou/.docker/config.json: stat /home/zhou/.docker/config.json: permission denied |
其实可以忽略, 如果有强迫症的话, 可以考虑把这个文件加入用户组, 或者所有命令带上 sudo
数据库连接错误
首先检查这份祖传代码的
system/application/config/database.php
内的配置项;打开容器的
shell
, 查看MySQL
数据库地址:1
2docker exec -it pbcls_webserver bash
env把配置项的端口和地址修改为和容器环境变量一致, 然后刷新浏览器就
OKK
了: