1.字符串查找
strings是Go内置的标准包,主要用于字符串查找、替换、比较等。
1 | unix := time.Now().Unix() |
在 Docker 中部署 Laravel 应用,难免会用到 Laravel 本身的任务调度系统 (Schedule),而 Schedule 需要用到 cron,在 Docker 中使用 cron,有以下三种方案:
使用独立的 cron 容器。❎ 如果有多个不同的容器应用需要依赖 cron 时,那么这是一种很完美的解决方案,但是我们只用到 Laravel 的任务调度,因此独立的 cron 容器显得多余,所以不能采用此方案。
直接使用宿主机的 cron。❎ 如果直接使用宿主机的 cron,那么「定时任务」这个功能就不属于容器的一部分了。以后在应用迁移与快速部署时,cron 需要单独配置,这违背了我们使用 Docker 的初衷,我们的初衷是希望用 docker-compose up
这一个命令就能快速构建出一个线上应用。并且,在宿主机上使用 cron,使用 Laravel schedule 任务调度时不能和 MySQL 或 Redis 进行通信,所以这个方案需要被否决。
在 PHP 容器中设置 cron。✅ 这才是最佳解决方案。Laravel 只需要在 cron 中配置一个 Laravel Task Scheduler
,使用此容器中的 PHP 执行文件可以直接执行 Laravel 的任务调度。
一直一来,对于多个容器需要共享访问同一数据目录,或者需要持久化容器内数据(如数据库)时,我们都是采用挂载目录形式(bind mounts),将宿主机的某一目录挂载到容器内的指定目录,这种方式能解决问题,但这种方式也一直有一些缺点:
容器在不同的服务器部署需要根据实际磁盘挂载目录修改路径
不同操作系统的文件和目录权限会搞得你昏头转向,火冒三丈
雖然標題上是寫 Laravel 用的環境,不過這套環境也適用於 WordPress。
LNMP 是一般對 Linux + Nginx + MySQL(MariaDB)+ PHP 的簡稱,不過用 Docker 來做的話應該要稱做 NMP才對。本次的範例在任何的 Linux Distro 底下應該都會有一樣的效果,理論上在 MacOS 也差不多,不過 Mac 也許還是會有此許的不同,這點我就沒有再多做測試。