一步步教你如何使用 laradock 搭建项目环境

前言:#

看群里和 laravel 社区有些人对 docker 不太会使用,在这里我推荐使用 laradock 来部署我们的项目环境,用 laradock 部署简单快捷,方便管理,可以为你省出很多时间陪陪家人。现在用 laradock 一步步搭建环境。

setup 1:#

从 github 上拉去 laradock 项目
git clone https://github.com/laradock/laradock.git

setup 2:#

进入 laradock 文件夹,重命名或者复制 env-example 到 .env 文件

setup 3:#

编辑.env 文件(这个.env 文件是对环境信息的一些配置)。在这里对.env 文件里一些配置信息做个简单说明:
1.APPLICATION=../ 设置 docker-compose 基础目前映射 比如:容器里的 /var/www 目录映射到上级目录
2.PHP_VERSION=71 使用环境的 php 版本号。这里 71 表示 7.1 版本。之后在安装的过程中,php-fpm 和 php-cli 安装版本都会引用这个变量。
3.PHP_INTERPRETER=php-fpm 使用 php 的解释引擎,这儿有两个参数可以选择(hhvm php-fpm)
4.DATA_SAVE_PATH=~/.laradock/data 数据保存目录。这儿的意思是:容器里的数据目录映射到宿主机哪个目录。
5.DOCKER_HOST_IP=10.0.75.1 设定 docker 内部网络 ip
备注:简单的介绍几个配置说明,建议同学们有时间可以把该配置文件读一遍,能理解每一个参数的含义,这样有助于搭建 docker-compose 环境。还有同学们只需要知道这个.env 文件是对 docker-compose 构建容器时候,提供的一些参数即可。很像 laravel 的 .env 文件
对了,.env 文件还有这下面的一些参数呢,它的意思就是具体对某一个容器的设置了。
例如:
PHP_FPM_INSTALL_XDEBUG=false
PHP_FPM_INSTALL_MONGO=false
PHP_FPM_INSTALL_MSSQL=fals
比如这些就是设定在 php-fpm 容器中中是否安装 xdebug,mongo 扩展这些。 (建议同学们下来自己看看,由于文章篇幅原因我只复制了一点点内容。因为是教程的原因,我这里也不作更改,使用默认的配置即可。)
在这里再介绍下: docker-compose.yml 文件, 这个文件是对具体容器的配置,还需要熟悉一些 yml 文件的一些语法。不过没关系,我会在文章后面附上 docker 和 docker-compose 的学习地址。

setup 4:#

接下来我们就开始构建容器吧!
运行: docker-compose up -d mysql nginx
参数 up 表示启动容器 -d 表示后台运行
第一次构建会有点慢,因为它要拉取数据。

setup 5:#

访问服务器 ip,如果出现 404,说明就能够正常访问了。现在我们去 laradock/nginx/sites/ 目录下,修改或者添加后缀为 conf 文件。
修改 default.conf 文件,把网站 www 目录修改到项目目录即可。这儿需要注意一点的是:最开始提到的.env 文件 APPLICATION 参数所配置的映射目录,就是宿主机与容器的目录映射关系。

总结:#

在 QQ 群里有时会看见有些网友会问关于如何使用 laradock 搭建环境的问题,随根据自己最近在工作中有使用 laradock 搭建环境得出的一些经验和踩过的一些坑,写成文章分享给大家。 由于我不太会写文章,可能会存在语句不通顺的情况,还请大家见谅,我会努力提高写作水平,让大家阅读起来能舒服一点。嘿嘿,受 Summer 的影响,我会坚持以后每周写一篇文章。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Aaron
本帖由系统于 7年前 自动加精
Aaron
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 35

先收藏,后续实践:smile:

7年前 评论
Aaron

@fmaple 嗯嗯,好的噢!

7年前 评论
nickfan

按国内网络环境 fork 修改的版本现已更新到最新 v4 版本

https://github.com/nickfan/laradock

可重新 star 哈 :joy:

7年前 评论

其实我想问用 docker 和用 Nginx/Apache 有什么不同和好处吗?

7年前 评论
Aaron

@sethhu docker 是容器,nginx 和 apache 是 web 软件。 你可以这样理解:docker 是一个运行操作系统的环境,而我们平常所说的 nginx 容器,意思就是这个容器只运行了 nginx 这个服务。

7年前 评论
Aaron

@nickfan 这是你自己根据 laradock 修改的吗?

7年前 评论
nickfan

@Aaron
是的,根据目前最新的 v4 的版本重新改的版本
composer 换国内镜像
node,yarn 换国内镜像(淘宝)
ubuntu 换国内镜像
修复官方的一个 change_source 的 Dockfile 中的语法问题。

7年前 评论
nickfan

@Aaron 你也可以和官方的 repo 比较一下我改了哪些内容,定制修改的比较符合我自己的习惯,就没发 PR 了。
好像默认的 change_source 的环境变量没有效果,所以改默认值为 true 了,不适合发 PR,毕竟老外使用国内镜像的还不多。

7年前 评论

laradock 里面的 redis, 默认是没有配置文件 redis.conf 的,我看了下他的 dockerfile 需要我提供 redis.conf 文件,然后 COPY 进去,我也提供了一个和他版本对应的 redis.conf 文件,然后放开 copy 注释,以及 cmd 运行的时候是指定配置文件的,然后这个 redis 容器总是启动不起来,能否提供一个 redis.conf, 因为如果做集群就需要这个配置文件

7年前 评论
Aaron

@nickfan 嗯嗯,其实我也克隆了 laradock,自己也做了些更改后,部署在生产环境上。比如有些 Dockerfile 文件 add 命令复制文件的,我改成使用映射方法。因为这样我直接修改文件后,再重启容器就可以生效了。如果使用 add 命令添加的文件,又要重写打包镜像,感觉很麻烦呢。

7年前 评论
Aaron

@jdxia 明天我到公司看看。 如果容器启动不成功,你使用 docker-compose log 容器名 ,就可以看错误记录,根据错误记录就好差错了。

7年前 评论

先收藏,再实践。

7年前 评论

@Aaron redis 的日志打印出来是这个

1:C 03 Jan 05:50:00.991 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 03 Jan 05:50:00.992 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 03 Jan 05:50:00.992 # Configuration loaded
1:C 03 Jan 06:53:19.631 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 03 Jan 06:53:19.632 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 03 Jan 06:53:19.633 # Configuration loaded

docker-compose ps 看到 redis 容器的退出码是 Exit 0, 但是这个容器根本启动不了

7年前 评论
Aaron

@jdxia

file
这是我的 redis/Dockerfile 文件

file
这是 docker-compose.yml 文件

7年前 评论
Aaron

@jdxia 你用 docker-compose up -d redis ,然后用 docker ps -a ,看看容器状态

7年前 评论
mouyong

@nickfan 官方的 change_source 存在什么语法问题?

7年前 评论
nickfan
RUN if xxx
 RUN sed -i
;fi

关键是 Dockfile 里 RUN 是单条 Dockfile 环境的指令语法,RUN 指令中的内容不可能嵌套 RUN 指令,只能是单条的 bash 语句。

7年前 评论

@Aaron 经排查,发现,容器中,如果是指定配置文件启动方式,redis.conf 文件中这一行

daemonize no

不要改为 yes, 改为 yes, 他会启动起来,但是一启动就会退出了,而且退出还是正常退出,因为我看容器退出的状态是 Exit (0), 返回值是 0, 但是不太明白为什么配置文件设置后台启动就会给我自动退出?
问题解决了

7年前 评论
Aaron

@jdxia 我忘给你说了,所有在 docker 运行的软件,都不能后台运行。必须设置为前台模式。具体什么原因,我也不太清楚哈!

7年前 评论
mouyong

@nickfan 我运行后没问题呀?虽然看着是语法错了。o (∩∩) o... 哈哈,已改,不过,为啥你不将 env 的默认值 change_source 改为 true, 工程量好浩大的感觉。

7年前 评论
nickfan

change_source 的默认值我 fork 的版本已改为 true 的,所以没有 PR
另外官方 v4 版目前而言,
修改源的只有 alphine 的系统的源,而实际上还有:ubuntu 的源,composer 的源,nodejs,yarn 的源都没有添加对应的处理,我只是借这个参量完善一下对应的处理,但其实理想的方式应该是 repo_source='cn' 这样的方式,然后不同区域标识可以用不同的源集合。
也许以后的 laradock 的版本会完善这部分的工作,目前而言,对国内环境,我改的版本够用,如果有不同区域的需求,自行修改对应上面提到的 alphine,ubuntu,composer,nodejs,yarn 对应区域的源即可。

7年前 评论
mouyong

@nickfan 恩。

7年前 评论
mouyong

@nickfan 之所以修改 nginx 的源是因为以前 nginx 的基础 alpine 镜像在下载某些文件会出错,因为官方源里没有那个文件。后来修复了这个问题。但是国外下载慢了点。然后其他镜像构建的速度能忍受,就没管了。o (∩∩) o... 哈哈、o (∩∩) o... 哈哈

7年前 评论

@nickfan
嗨,朋友,我刚才在你的 laradock 的 fork 版本中提交了一份 PR, 你可以看下

7年前 评论
nickfan

@jdxia 已合并,非常感谢,一点小建议,一般而言,用 test 做样例域名会让大多数人比较好理解。

7年前 评论

@nickfan 可是在 postman 中这是要 https 的,,因为 HSTS 对于新手来说,他会懵逼的

7年前 评论
nickfan

@jdxia 额,我记得是 dev 的域名吧。

7年前 评论

@nickfan Service 'mysql' failed to build: unexpected EOF 雄哥,报这个错啊

7年前 评论
nickfan
7年前 评论

请问怎么使用 navacite 链接 docker 里面的 mysql ip 地址要写哪个

7年前 评论

win7 下,使用 docker toolbox 安装的 laradock 使用 localhost 访问不了页面,使用 docker-compose ps 命令查看服务都 up 的。

6年前 评论

请问,laradock 能否进行 vue-cli 开发?

6年前 评论

@nickfan
用 postman 调接口都返回 laradock 自带的 404 页面,改了 nginx 配置也不行

6年前 评论
白小二

网上都是这种教程,那问题来了,怎么把这搭建,并且修改过的环境迁移到线上呢

5年前 评论
UKNOW

如果多个项目 有的项目是使用 php5 有的是使用 php7 怎么配置?

4年前 评论