基于Docker的laravel本地开发环境
我对一个完美的本地开发环境的要求:
- 一键启动所有的组件,不需要mock任何service,没有任何dummy client。新人入职后一小时内即可上手开发新功能。
- 系统资源占用少,即cpu和内存占用少,在MacBook Pro上开发不卡
- 隔离本机环境,在本机上安装尽可能少的依赖的软件,例如不在本机上安装mysql
- 和集成开发、集成测试以及生产环境近似,容易排查环境引起的问题。团队使用统一的开发与测试环境配置,能提高协作效率。
- 方便调试,能和IDE集成就更好了
- REPL功能(当然受限于语言)
- 便于执行unit test
- 便于尝试各种service, server的使用方法,比如快速启动elastic search server后,可基于一本书、一部视频去学习如何使用es
最早用Laravel开发web应用的时候,使用的是Homestead作为本地开发环境。Homestead基于Vagrant和VirtualBox,无论是自己把开发环境配置好,还是帮助别人配置都需要一定的时间,每次有新人入职都要折腾一番。后来laravel官方文档中推荐的Valet我并没有去尝试,看文档是基于Homebrew来安装到本机上,我个人不喜欢污染本机环境,所以还是转向了docker的解决方案。
当发现了laradock 后,眼前一亮,心想这正是我想要的。遂试之,大喜。docker的优势我就不在这里重复了,使用docker来build开发、测试及生产环境是大势所趋。目前在我的项目里仅把docker用于开发环境,用于生产环境需要额外的运维能力,有兴趣的高手可以尝试。
laradock里集成了很多组件,在定制化的过程中,我只把自己需要的组件剥离出来,同时基于alpine的镜像减少docker image的大小。同时安装了xdebug方便调试和学习laravel框架。
- laravel开发新手,快速学习laravel
- 打算以此来作为本地开发环境的开发者
- debug laravel框架,并深入学习的开发者
install docker 确保docker-compose也安装正确
$docker-compose -v
docker-compose version 1.11.2, build dfed245
composer global require "laravel/installer"
laravel new blog && cd $_
修改.env中的DB部分
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
git clone https://github.com/yangliuyu/laradock-lite.git && cd laradock-lite
cp env-example .env
修改.env文件中的DOCKER_HOST_IP=172.16.30.1 改为你本机的ip,这里主要是用于xdebug功能,开箱即用的xdebug功能的文档稍后释出。
docker-compose up
or docker-compose up -d
最后在浏览器中打开 http://localhost
执行php artisan xxx命令:
docker-compose exec workspace /bin/ash
php artisan migrate:refresh
通过查看docker-compose.yml中的各个镜像,可看到所有组件,其中每个组件运行在各自的容器中,即一个组件一个容器
- nginx 1.12
- php-fpm 基于php7.1
- mysql 5.7
- redis 3.2
- elastic search 5.3.2 (XPack 默认用户名密码 elastic/changeme)
对于前端项目,比如React.js + webpack,暂时推荐使用npm或者yarn在本地安装开发依赖,可参考create-react-app 快速上手。
适合自己的才是最好的,祝大家玩的愉快。