在本地,我们可以使用 Docker for Windows 或者 Docker for Mac 作为应用的开发环境。不过如果你打算使用 Docker 的数据卷存储应用的代码,特别是应用的文件比较多,比如 Drupal ,在运行它的时候你会觉得特别慢。这是因为 Docker for Windows 与 Docker for Mac 都使用了本地化的虚拟技术,这是为了给我们提供一个更顺流的体验,但是数据卷的性能是个暂时没能解决的问题。我找到了一个解决方法,就是使用 Unison 同步文件,暂时只在 macOS 上测试过。
安装 Unison 与必备
在 macOS 上安装了 Homebrew 以后,可以很容易用它安装 Unison 。另外你还需要让 Unison 可以监视文件的变化,当有变化时就去执行同步的动作,这些再安装一下 unison-fsmonitor 。
# 安装 unison
brew install unison
# 安装 unox 的依赖
pip install MacFSEvents
# unox 是在 macOS 上用的 unison-fsmonitor 脚本
curl -o /usr/local/bin/unison-fsmonitor -L https://raw.githubusercontent.com/hnsl/unox/master/unox.py
chmod +x /usr/local/bin/unison-fsmonitor
运行 Drupal
我在 github 上有个叫 nest 的仓库,它是 Docker Compose 的一个可以运行一般的 PHP 应用的环境,它的 use-unison-sync-app-files 分支上测试了使用 Unison 同步应用文件的方法。
1 - 克隆仓库
git clone -b use-unison-sync-app-files [email protected]:ninghao/nest.git
2 - 构建与启动服务
cd nest
# 构建 Compose 里用的镜像
docker-compose build
# 启动 Compose 里描述的服务
docker-compose up -d
3 - 下载 Drupal
# 进入带 drush 工具的容器
docker-compose exec console bash
# 下载 Drupal
drush dl drupal
mv drupal* drupal
# 修改一下权限,不然 Drupal 不能写文件
chown -R www-data drupal/sites
4 - 配置一下 nginx
# 文件:services/nginx/config/default.conf
# 修改一下配置文件里的 root 指令的值,改成下面这个样子:
root /mnt/app/drupal;
5 - 重启 web 服务
# 直接在本地上执行
docker-compose restart web
6 - 使用 unison 同步文件
# 直接在本地上执行
# 先同步一下 Drupal 的文件
unison ./app/drupal socket://127.0.0.1:5000/drupal -auto -batch
# 监视文件的变化
unison ./app/drupal socket://127.0.0.1:5000/drupal -repeat watch -auto -batch
7 - 安装 Drupal
# 在浏览器打开
http://localhost:8080
8 - 感受极快的运行速度 :)
凡尔赛法环免广告版 最新版v1.69.1
下载天煞异种 安卓版v1.0.21
下载十三月 (Undecember)最新官方中文版v3.26.0200
下载我不是废柴无限99999钻999999金币游戏 不减反增版v1.2.16
下载我的女友是声优免广告 安卓版v1
我的女友是声优免广告是一款非常好玩的模拟经营类手游,玩家在游
石器帝国去广告版 v8
石器帝国免广告版是游戏的破解版本,在该版本中为玩家去除了广告
校园恋爱模拟器真人版去广告版 v0.0.7
校园恋爱模拟器真人版免广告版是游戏的破解版本,在该版本中为玩
教练我要开球馆内置菜单修改器 安卓版v1.5.4
教练我要开球馆内购版是一款模拟经营类游戏,玩家们将在游戏中创
我的游轮无限砖石 安卓版v1.7.0
我的游轮无限金币钻石版是一款模拟经营类游戏,你将成为一艘游轮