Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境
Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境简介 Laradock 是为 Docker 提供的完整 PHP 本地开发环境,和 Homestead 一样提供了一系列打包好(包括配置)的 Docker Image。Lara
Laradock 是为 Docker 提供的完整 PHP 本地开发环境,和 Homestead 一样提供了一系列打包好(包括配置)的 Docker Image。Laradock 早期专注为 Laravel 打造 Docker 开发环境,因而最早在 Laravel 社区中出名,后来随着影响力的扩大,逐渐被 PHP 社区接纳和采用,目前支持的 PHP 项目除了 Laravel 之外,还有 Symfony、CodeIgniter、WordPress、Drupal 等等。
在学习和使用 Laradock 之前,我们有必要先学习和了解 Docker,而在使用 Docker 之前,又有必要搞清楚下面两个问题:
Docker 是什么
Docker 基于 Go 语言开发,是一个基于 LXC 技术之上构建的 Container 容器引擎。容器是一种以固定格式打包软件的方式,以便让软件可以在共享的操作系统中运行,不同于虚拟机,容器并不需要捆绑这个操作系统,只需要软件正常工作所必须的库和设置即可,这使得容器更加高效、轻量级、可以自成系统并且不管部署在什么地方都可以保证运行结果一致。
Docker提供了一种在安全、可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕。开发者使用 Docker 可以解决当需要和同事共享代码时"只能在我的机器工作"的问题;操作者使用 Docker 可以在关联容器中边运行边管理以便获取更好的计算密度;企业使用 Docker 可以用来构建敏捷的软件分发管道以便可以更快处理新特性。
为什么要使用 Docker
Docker 的出现就是为了解决以下问题:
Docker 通常用于如下场景:
本教程不将那么多高大上的东西了,我们专注于通过 Docker 构建一个可移植的本地开发环境。
首先我们需要在系统安装 Docker 的免费社区版,官方提供 Windows、Mac 及 Linux 等版本下载:下载地址。下载操作系统对应版本后,按照引导流程安装,最后打开 Docker 应用,即可在命令行检查是否安装成功:
Mac
Windows
注:Windows 系统下使用 Docker 需启用 Hyper-V 组件(推荐在原生系统中使用,Windows 10 专业版默认已启用,另外,Windows 10 家庭版不支持 Docker for Windows 桌面版),如果是在 VMware 或 Parallels 虚拟机中使用 Windows,需要在设置里面启用嵌套的虚拟化支持(设置->处理器和内存->高级选项->启用虚拟化管理程序),如果虚拟机不支持此配置或 Hyper-V,可以尝试额外安装 Docker ToolBox 来支持使用 Docker(详情参考官方文档)。我这里的环境就是 Mac + VMware Fusion + Windows 10(虚拟机)。
在本地操作系统安装好 Docker 后,需要为 Docker Hub 镜像仓库配置镜像加速器以加速国内 Docker 镜像下载速度,比如阿里云提供的镜像加速器,Mac 系统点击任务栏 Docker 图标选择 Preferences->Docker Engine,Windows 系统通过 Settings->Docker Engine 即可进入镜像加速器配置界面(下图是 Windows 示例,Mac 与之类似,只是入口为 Preferences 而已,阿里云 Docker 镜像加速器获取参考这篇教程:https://yq.aliyun.com/articles/29941):
然后点击「Sign In」菜单通过 Docker ID/密码登录到 Docker Hub(注意是 Docker ID,非注册邮箱),以免镜像拉取过程中有认证问题。
深入了解 Laradock 之前让我们先见识下如何在 Laradock 中快速安装 Nginx、PHP、Composer、MySQL、Redis 吧,有了这些开发 Laravel 必备的工具组件也就差不离了。
1、首先将 Laradock 项目代码克隆到本地:
1git clone https://github.com/Laradock/laradock.git
2、进入 laradock
目录将 env-example
重命名为 .env
:
cp env-example .env
然后在 .env
中修改镜像构建过程中 Linux 软件源为国内镜像以免镜像构建过程中出现网络超时问题:
# If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true
2
CHANGE_SOURCE=true
3
# Set CHANGE_SOURCE and UBUNTU_SOURCE option if you want to change the Ubuntu system sources.list file.
4
UBUNTU_SOURCE=aliyun
3、构建镜像 & 启动容器:
1docker-compose up -d nginx mysql redis
nginx
镜像构建在 php-fpm
之上,php-fpm
构建在 workspace
之上,所以启动 nginx 会先启动 workspace
和 php-fpm
。
如果指定端口已经被占用,运行上述命令会报错,关闭相应的服务再重新运行上述命令即可。
如果在 Windows 系统中上述指令构建镜像过程中报错:
1/tmp/sources.sh: not found
可参考这个 issue 解决:https://github.com/laradock/laradock/issues/2450。
4、打开 Laravel 项目的 .env
文件并添加如下配置:
DB_HOST=mysql
2
REDIS_HOST=redis
3
QUEUE_HOST=beanstalkd
5、要测试配置访问域名指向 Docker 环境目录,我们先在 laradock
父级目录下创建一个与 laradock
同级的 wwwroot
目录,然后在 wwwroot
目录下运行 composer create-project laravel/laravel blog --prefer-dist
命令创建一个新的 Laravel 应用,相应的层级目录关系如下所示:
然后我们需要到 laradock
下编辑 .env
中的 APP_CODE_PATH_HOST
配置项:
APP_CODE_PATH_HOST=../wwwroot/
这样就相当于为 wwwroot
与 Docker 的 /var/www
目录建立了软链接,然后我们在 laradock/nginx/sites
目录下新增一个 blog.conf
配置,设置虚拟域名为 blog.test
:
server {
2
3
listen 80;
4
listen [::]:80;
5
6
server_name blog.test;
7
root /var/www/blog/public;
8
index index.php index.html index.htm;
9
10
location / {
11
try_files $uri $uri/ /index.php$is_args$args;
12
}
13
14
location ~ .php$ {
15
try_files $uri /index.php =404;
16
fastcgi_pass php-upstream;
17
fastcgi_index index.php;
18
fastcgi_buffers 16 16k;
19
fastcgi_buffer_size 32k;
20
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
21
#fixes timeouts
22
fastcgi_read_timeout 600;
23
include fastcgi_params;
24
}
25
26
location ~ /.ht {
27
deny all;
28
}
29
30
location /.well-known/acme-challenge/ {
31
root /var/www/letsencrypt/;
32
log_not_found off;
33
}
34
}
接下来需要在 /etc/hosts
(Windows 下对应文件路径是 C:WindowsSystem32driversetchosts
)文件中新增如下这行配置:
127.0.0.1 blog.test
最后,需要重启 Docker 的 Nginx:
1docker-compose down
2
docker-compose up -d nginx
这样,我们就可以在浏览器中通过 http://blog.test
访问这个应用了:
以上就是 Laradock 的简单上手指南。这里我们设置的场景是新建一个应用,如果是多个应用的话要怎么办呢?也很简单,就是在上述 wwwroot
目录下创建多个应用目录,然后在 laradock/nginx/sites
下对应创建多个配置文件,最后不要忘记在系统 /etc/hosts
中配置相关域名绑定 IP 即可。
注:更多使用细节请参考官方文档:http://laradock.io/documentation/
最后,我们来捋一下 Laradock 的功能特性:
Dockerfile
文件即可Dockerfile
docker-compose
文件除此之外,目前为止,Laradock 支持的软件包括但不限于:
最后,我们绕不开的话题是作为开发环境,选择 Docker(Laradock) 还是 Vagrant(Homestead),Mac 系统上官方还提供了 Valet,尝鲜的话、做Demo或者快速学习为目的当然 Valet 还是不二之选,因为它最小巧、最轻量级,上手最快,天下武功,唯快不破。
至于 Laradock 还是 Homestead,就是见仁见智了,Laradock 相对 Homestead 而言更加轻量级,因为正如前面所言,Homestead 是 VM 级别的虚拟化解决方案,依赖一个完整的操作系统,虽然功能很全,但是很重,而 Laradock 是容器,只依赖那些它必需的软件,更加灵活,更加高效。
还有一点需要提及的是 Docker 可以用于本地也可以用于线上,所谓 same environment everywhere,而 Vagrant 部署的开发环境只能用于本地,这一点也可以作为重要考量因素。
版权所有:深圳市网商在线科技有限公司