您的位置:首页 > 运维架构 > Docker

docker 完美搭建 laravel 运行环境(含 队列 和 定时任务 )

2018-08-29 07:41 477 查看

转载自:https://www.jianshu.com/p/6c779d7f6f29 

本文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源方法参考:http://mirrors.aliyun.com/help/centos

(2)更新好yum源后,执行 

   # yum update

(3) 安装docker

 # yum install -y docker

(4)使用yum安装方式,已经把docker-compose安装好了,推荐使用。

(5)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即可

 



作者:精灵GG
链接:https://www.jianshu.com/p/6c779d7f6f29
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: