Mac/Windows 系統(tǒng)中使用 Laradock 搭建基于 Docker 的 Laravel 開發(fā)環(huán)境
Mac/Windows 系統(tǒng)中使用 Laradock 搭建基于 Docker 的 Laravel 開發(fā)環(huán)境簡(jiǎn)介 Laradock 是為 Docker 提供的完整 PHP 本地開發(fā)環(huán)境,和 Homestead 一樣提供了一系列打包好(包括配置)的 Docker Image。Lara
Mac/Windows 系統(tǒng)中使用 Laradock 搭建基于 Docker 的 Laravel 開發(fā)環(huán)境簡(jiǎn)介 Laradock 是為 Docker 提供的完整 PHP 本地開發(fā)環(huán)境,和 Homestead 一樣提供了一系列打包好(包括配置)的 Docker Image。Lara
Laradock 是為 Docker 提供的完整 PHP 本地開發(fā)環(huán)境,和 Homestead 一樣提供了一系列打包好(包括配置)的 Docker Image。Laradock 早期專注為 Laravel 打造 Docker 開發(fā)環(huán)境,因而最早在 Laravel 社區(qū)中出名,后來隨著影響力的擴(kuò)大,逐漸被 PHP 社區(qū)接納和采用,目前支持的 PHP 項(xiàng)目除了 Laravel 之外,還有 Symfony、CodeIgniter、WordPress、Drupal 等等。
在學(xué)習(xí)和使用 Laradock 之前,我們有必要先學(xué)習(xí)和了解 Docker,而在使用 Docker 之前,又有必要搞清楚下面兩個(gè)問題:
Docker 是什么
Docker 基于 Go 語言開發(fā),是一個(gè)基于 LXC 技術(shù)之上構(gòu)建的 Container 容器引擎。容器是一種以固定格式打包軟件的方式,以便讓軟件可以在共享的操作系統(tǒng)中運(yùn)行,不同于虛擬機(jī),容器并不需要捆綁這個(gè)操作系統(tǒng),只需要軟件正常工作所必須的庫和設(shè)置即可,這使得容器更加高效、輕量級(jí)、可以自成系統(tǒng)并且不管部署在什么地方都可以保證運(yùn)行結(jié)果一致。
Docker提供了一種在安全、可重復(fù)的環(huán)境中自動(dòng)部署軟件的方式,它的出現(xiàn)拉開了基于云計(jì)算平臺(tái)發(fā)布產(chǎn)品方式的變革序幕。開發(fā)者使用 Docker 可以解決當(dāng)需要和同事共享代碼時(shí)"只能在我的機(jī)器工作"的問題;操作者使用 Docker 可以在關(guān)聯(lián)容器中邊運(yùn)行邊管理以便獲取更好的計(jì)算密度;企業(yè)使用 Docker 可以用來構(gòu)建敏捷的軟件分發(fā)管道以便可以更快處理新特性。
為什么要使用 Docker
Docker 的出現(xiàn)就是為了解決以下問題:
Docker 通常用于如下場(chǎng)景:
本教程不將那么多高大上的東西了,我們專注于通過 Docker 構(gòu)建一個(gè)可移植的本地開發(fā)環(huán)境。
首先我們需要在系統(tǒng)安裝 Docker 的免費(fèi)社區(qū)版,官方提供 Windows、Mac 及 Linux 等版本下載:下載地址。下載操作系統(tǒng)對(duì)應(yīng)版本后,按照引導(dǎo)流程安裝,最后打開 Docker 應(yīng)用,即可在命令行檢查是否安裝成功:
Mac
Windows
注:Windows 系統(tǒng)下使用 Docker 需啟用 Hyper-V 組件(推薦在原生系統(tǒng)中使用,Windows 10 專業(yè)版默認(rèn)已啟用,另外,Windows 10 家庭版不支持 Docker for Windows 桌面版),如果是在 VMware 或 Parallels 虛擬機(jī)中使用 Windows,需要在設(shè)置里面啟用嵌套的虛擬化支持(設(shè)置->處理器和內(nèi)存->高級(jí)選項(xiàng)->啟用虛擬化管理程序),如果虛擬機(jī)不支持此配置或 Hyper-V,可以嘗試額外安裝 Docker ToolBox 來支持使用 Docker(詳情參考官方文檔)。我這里的環(huán)境就是 Mac + VMware Fusion + Windows 10(虛擬機(jī))。
在本地操作系統(tǒng)安裝好 Docker 后,需要為 Docker Hub 鏡像倉庫配置鏡像加速器以加速國(guó)內(nèi) Docker 鏡像下載速度,比如阿里云提供的鏡像加速器,Mac 系統(tǒng)點(diǎn)擊任務(wù)欄 Docker 圖標(biāo)選擇 Preferences->Docker Engine,Windows 系統(tǒng)通過 Settings->Docker Engine 即可進(jìn)入鏡像加速器配置界面(下圖是 Windows 示例,Mac 與之類似,只是入口為 Preferences 而已,阿里云 Docker 鏡像加速器獲取參考這篇教程:https://yq.aliyun.com/articles/29941):
然后點(diǎn)擊「Sign In」菜單通過 Docker ID/密碼登錄到 Docker Hub(注意是 Docker ID,非注冊(cè)郵箱),以免鏡像拉取過程中有認(rèn)證問題。
深入了解 Laradock 之前讓我們先見識(shí)下如何在 Laradock 中快速安裝 Nginx、PHP、Composer、MySQL、Redis 吧,有了這些開發(fā) Laravel 必備的工具組件也就差不離了。
1、首先將 Laradock 項(xiàng)目代碼克隆到本地:
1git clone https://github.com/Laradock/laradock.git
2、進(jìn)入?laradock
?目錄將?env-example
?重命名為?.env
:
cp env-example .env
然后在?.env
?中修改鏡像構(gòu)建過程中 Linux 軟件源為國(guó)內(nèi)鏡像以免鏡像構(gòu)建過程中出現(xiàn)網(wǎng)絡(luò)超時(shí)問題:
# 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、構(gòu)建鏡像 & 啟動(dòng)容器:
1docker-compose up -d nginx mysql redis
nginx
?鏡像構(gòu)建在?php-fpm
?之上,php-fpm
?構(gòu)建在?workspace
?之上,所以啟動(dòng) nginx 會(huì)先啟動(dòng)?workspace
?和?php-fpm
。
如果指定端口已經(jīng)被占用,運(yùn)行上述命令會(huì)報(bào)錯(cuò),關(guān)閉相應(yīng)的服務(wù)再重新運(yùn)行上述命令即可。
如果在 Windows 系統(tǒng)中上述指令構(gòu)建鏡像過程中報(bào)錯(cuò):
1/tmp/sources.sh: not found
可參考這個(gè) issue 解決:https://github.com/laradock/laradock/issues/2450。
4、打開 Laravel 項(xiàng)目的?.env
?文件并添加如下配置:
DB_HOST=mysql
2
REDIS_HOST=redis
3
QUEUE_HOST=beanstalkd
5、要測(cè)試配置訪問域名指向 Docker 環(huán)境目錄,我們先在?laradock
?父級(jí)目錄下創(chuàng)建一個(gè)與?laradock
?同級(jí)的?wwwroot
?目錄,然后在?wwwroot
?目錄下運(yùn)行?composer create-project laravel/laravel blog --prefer-dist
?命令創(chuàng)建一個(gè)新的 Laravel 應(yīng)用,相應(yīng)的層級(jí)目錄關(guān)系如下所示:
然后我們需要到?laradock
?下編輯?.env
?中的?APP_CODE_PATH_HOST
?配置項(xiàng):
APP_CODE_PATH_HOST=../wwwroot/
這樣就相當(dāng)于為?wwwroot
?與 Docker 的?/var/www
?目錄建立了軟鏈接,然后我們?cè)?laradock/nginx/sites
?目錄下新增一個(gè)?blog.conf
?配置,設(shè)置虛擬域名為?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 下對(duì)應(yīng)文件路徑是?C:WindowsSystem32driversetchosts
)文件中新增如下這行配置:
127.0.0.1 blog.test
最后,需要重啟 Docker 的 Nginx:
1docker-compose down
2
docker-compose up -d nginx
這樣,我們就可以在瀏覽器中通過?http://blog.test
?訪問這個(gè)應(yīng)用了:
以上就是 Laradock 的簡(jiǎn)單上手指南。這里我們?cè)O(shè)置的場(chǎng)景是新建一個(gè)應(yīng)用,如果是多個(gè)應(yīng)用的話要怎么辦呢?也很簡(jiǎn)單,就是在上述?wwwroot
?目錄下創(chuàng)建多個(gè)應(yīng)用目錄,然后在?laradock/nginx/sites
?下對(duì)應(yīng)創(chuàng)建多個(gè)配置文件,最后不要忘記在系統(tǒng)?/etc/hosts
?中配置相關(guān)域名綁定 IP 即可。
注:更多使用細(xì)節(jié)請(qǐng)參考官方文檔:http://laradock.io/documentation/
最后,我們來捋一下 Laradock 的功能特性:
Dockerfile
?文件即可Dockerfile
docker-compose
?文件除此之外,目前為止,Laradock 支持的軟件包括但不限于:
最后,我們繞不開的話題是作為開發(fā)環(huán)境,選擇 Docker(Laradock) 還是 Vagrant(Homestead),Mac 系統(tǒng)上官方還提供了 Valet,嘗鮮的話、做Demo或者快速學(xué)習(xí)為目的當(dāng)然 Valet 還是不二之選,因?yàn)樗钚∏?、最輕量級(jí),上手最快,天下武功,唯快不破。
至于 Laradock 還是 Homestead,就是見仁見智了,Laradock 相對(duì) Homestead 而言更加輕量級(jí),因?yàn)檎缜懊嫠?,Homestead 是 VM 級(jí)別的虛擬化解決方案,依賴一個(gè)完整的操作系統(tǒng),雖然功能很全,但是很重,而 Laradock 是容器,只依賴那些它必需的軟件,更加靈活,更加高效。
還有一點(diǎn)需要提及的是 Docker 可以用于本地也可以用于線上,所謂 same environment everywhere,而 Vagrant 部署的開發(fā)環(huán)境只能用于本地,這一點(diǎn)也可以作為重要考量因素。
版權(quán)所有:深圳市網(wǎng)商在線科技有限公司