本文github库:https://github.com/xiaoemoxiw/docker.git
国内码云库:https://gitee.com/jlgg/docker.git
docker搭建PHP(laravel)环境,是docker的其中一块应用。对于laravel开发者来说,使用docker来搭建整个完整的环境是一个及其方便方案。
本方案使用的是php-7.12,nginx的最新版本,mysql-5.7的环境。在php镜像里面,安装composer,npm(cnpm)的包。可以基本满足larave开发的所有需要。
一、安装docker
注意:成功安装完docker以后,需要使用docker加速器,不然拉镜像会十分慢。
1、Centos安装
推荐方式:利用阿里云的yum镜像。
(1)具体更新yum源方法参考:https://opsx.alibaba.com/mirror
(2) 安装必要的一些系统工具
# yum install -y yum-utils device-mapper-persistent-data lvm2
(3) 添加软件源信息
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4)更新并安装。
# yum makecache
# yum update
# yum -y install docker-ce
(5)docker-compose安装
yum install -y docker-compose
(6)docker加速器修改方案:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://9d4cd35f.m.daocloud.io
该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。
成功后重启docker
centos6:service docker restart
centos7:systemctl restart docker
官方安装方法:
(1)打开官方教程地址:https://docs.docker.com/engine/installation/linux/docker-ce/centos/#set-up-the-repository
(2)按照官方描述步骤,一步步执行即可。
(3)安装完docker以后,需要安装docker-compose,具体安装方法请参照:https://docs.docker.com/compose/gettingstarted/#prerequisites
4、mac系统安装
若是mac系统,则推荐官方安装包,请在官方下载mac安装包,直接安装即可。
加速器添加方法:
右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中加入下面的镜像地址:
http://9d4cd35f.m.daocloud.io
3、windows安装
个人不推荐安装Windows版的docker版本,通过各种测试,Windows在数据卷处理的时候,会出现比较多问题,解决起来比较麻烦,如果你有神一般的解决bug的能力,可以尝试。
个人推荐在本地安装一个centos的环境,然后在安装centos的安装步骤去安装docker,安装完docker以后,可以通过samba来共享文件,或者使用虚拟机的共享功能来共享文件。
二、初始化yml文件
在git上把文件拉到本地,然后进入项目目录。在项目根目录里面,有一个docker-compose-demo.yml 文件,执行一下命令初始化一个新的yml文件。
# mv docker-compose-demo.yml docker-compose.yml
三、配置nginx
(1)进入nginx目录,并创建nginx的conf.d配置目录
# cd ./nginx
# mkdir conf.d
(2)创建nginx配置文件
# cp nginx/demo_php_conf.d.conf nginx/conf.d
执行以上命令得到其中一个nginx的示例配置文件,这里可以配置无限多个站点,可以自定义nginx文件格式
(3)配置yml文件
增加一个端口,请在docker-compose.yml的nginx里面的ports中增加相应的端口
如增加一个8080端口,则增加一项[- "8080:8080"]
四、配置php-fpm
php-fpm容器,也就是php容器,这里面集成了定时任务(cron)和进程管理(supervisor)这两个工具。一般在laravel里面需要使用队列,控制队列多线程并发,是需要这两个应用的。
1、定时任务(cron)
定时任务放在cron文件夹中,增加新的定时任务文件,需要在supervisor中的program.conf指定读取的文件。
现在是有一个文件为laravel,里面定义了基础的调度任务。
在 php-fpm/supervisor/program.conf中
[program:crontab]
command=crontab /var/spool/cron/crontabs/laravel
建议所有的调度任务都放在php-fpm/cron/laravel,不然还需要在docker-compose.yml指明文件共享。
2、进程管理(supervisor)
在初始化时,需要修改
php artisan路径 queue:work redis --queue=队列名称 --sleep=3 --tries=3
具体参考laravel手册
现在进程管理配置文件中包括了队列任务,定时任务和php-fpm进程。
其中[program:php-fpm]和[program:cron-restart]项不能修改。
增加一项进程,添加一项
[program:进程名称]
具体的进程内容
五、执行docker
在docker-compose.yml所在目录,也就是docker代码的根目录,执行一下命令。
启动项目:docker-compose up -d
关闭项目:docker-compose down
六、进入容器
本项目的根目录下有一个叫exec.sh的脚本,在本目录下执行[./exec.sh 容器名称]即可进入目录。
注意:
在执行[./exec.sh 容器名称]之前,先执行[chmod +x ./exec.sh]命令,给脚本赋予执行权限。
exec.sh更方便的使用方式
执行:
cp ./exec.sh /usr/local/bin/exec.sh && chmod +x /usr/local/bin/exec.sh
在任何目录下,都可以执行 [exec.sh 容器名称] 来进入容器
进入php容器:exec.sh php
进入mysql容器:exec.sh mysql
进入redis容器:exec.sh redis
进入nginx容器:exec.sh nginx
七、执行npm(cnpm)或者composer
完成进入容器这个步骤以后,通过exec php 进入php容器
然后直接执行cnpm或者composer即可
以上为整个docker配置larave环境的具体步骤和注意事项,项目的更新会最先体现在github,可以关注此项目。若觉得这个项目不错,可以给项目star。
若要封装更多的应用,可以留言给我,我会专门弄分支来处理不同的需求。