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

前言:

看群里和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的影响,我会坚持以后每周写一篇文章。

Aaron

本帖由系统于 10个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 31

先收藏,后续实践:smile:

11个月前
Aaron

@fmaple 嗯嗯,好的噢!

11个月前
nickfan

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

https://github.com/nickfan/laradock

可重新star哈 :joy:

11个月前

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

11个月前
Aaron

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

11个月前
Aaron

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

11个月前
nickfan

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

11个月前
nickfan

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

11个月前

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

11个月前
Aaron

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

11个月前
Aaron

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

11个月前

先收藏,再实践。

11个月前

@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,但是这个容器根本启动不了

11个月前
Aaron

@jdxia

file
这是我的redis/Dockerfile文件

file
这是docker-compose.yml文件

11个月前
Aaron

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

11个月前

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

11个月前
nickfan
RUN if xxx
 RUN sed -i
;fi

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

11个月前

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

daemonize no

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

11个月前
Aaron

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

11个月前

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

11个月前
nickfan

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

11个月前

@nickfan 恩。

11个月前

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

11个月前

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

11个月前
nickfan

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

11个月前

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

11个月前
nickfan

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

11个月前
韩槑槑

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

11个月前
nickfan
11个月前

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

5个月前

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

2个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!