Laradock — Laravel + Docker 輕量級環境打造

Yifan Wu
5 min readFeb 21, 2018

--

前言

過年在家沒事做,想起之前朋友推薦的 laradock,Laravel + Docker 的應用,於是就花個時間來研究了。

環境

Laravel version : 5.4
Docker version : 17.09
OS : macOS
Laradock last installed : 2017 / 02 / 18

Official Docs : http://laradock.io/introduction/
Reference:https://www.youtube.com/watch?v=OcZEbwxdg4Q

Laradock 的維護在 git 上為眾多 contributors 的功勞,然而官方提供的「完整文件」並未提到 laradock 本身的 bug 問題或是使用者發現的其他問題,必要時需要在源碼 issue 中自行尋找解答。

1. 基本安裝與測試

http://laradock.io/getting-started/#A

官方有針對新專案與舊專案兩種方式:

New Project 的情況:

  1. 將源碼 clone 至新增的專案下。
  2. 切換至 laradock 資料夾,複製 env 檔案。
cd laradockcp env-example .env

前陣子更新時 docker-compose.yml 內改成吃 .env 的參數了,若沒有此步驟就啟用的話會噴錯。

3. 啟動 container。

docker-compose up -d nginx mysql

4. 測試首頁的連線
開啟瀏覽器,網址列鍵入 localhost,,確認伺服器運作。

5. 更換域名
若想要換 localhost,在 /etc/hosts 下新增網域名以方便日後多重專案的開發。

6. 更改 DB_HOST
切回專案資料夾,開啟 .env 檔案,將環境參數的 DB_HOST 從 127.0.0.1 改成 mysql
DB_HOST=mysql

已有 Project 的情況:

改成 git add submodule,並處理好版本控制。

< 小囉唆 >
1. Laradock 的 .env 與專案本身的 .env 檔案不要搞混
2. 若有使用版本的問題,可以先設定好參數再啟用 container
目前已知「初」建立好環境時,~/.laradock/data 下的資料有可能因為使用者電腦而無法被覆蓋,導致環境版本停留在最初啟用的狀態,必要時有可能需要刪除 ~/.laradock/data 下的資料。
例如:mysql 降版本的情況,要刪除 ~/.laradock/data/mysql 再 re-build。

本人第一次使用時有遇到這個問題,然而第二次時降版本就滿順利的,因此列出來提供參考。

2. 版本更改

http://laradock.io/documentation/#change-the-mysql-version

  • MySQL

laradock/.env 檔案內的參數。

MYSQL_VERSION=5.7 (Example)

然後 re-build:

docker-compose build mysql。

Rebuild 完後要重啟 contianer !

注意 MySQL 的 downgrade 或 upgrade 可能會在 build 時遇到問題,爬 issue 串的解法是 rm -rf ~/.laradock/data/mysql,代價是資料會消失

  • PHP
    預設 7.0,若要更改直接至 laradock/.env 改參數就好,若是要降至 5.5,官方有提供另外一個作法,需額外操作。
docker-compose build php-fpm

Php-fpm vs php-cli:需要更改的是 php-fpm 的版本。

3. 新增資料庫

http://laradock.io/documentation/#create-multiple-databases-mysql

laradock/mysql/docker-entrypoint-initdb.d 下的 createdb.sql.example 複製一份命名為 createdb.sql,這個就是操作 DB 的 sql,可以照裡面的 comment 做資料庫的新增、使用者權限調整,用一般的終端下指令就可以。

4. Laravel 指令操作

http://laradock.io/getting-started/#usage

原本安裝在 terminal 環境中的 artisan 指令現在無法直接對專案目錄下,必須透過 container 下指令。

docker-compose exec workspace bash 
root@ae342346:/var/www# php artisan migrate

接著去資料庫查看,就可以看到變化了。

心得

把各個 container 參數化滿方便的,已經熟悉 Docker 的話在看 Dockerfile 時會很快得了解到 laradock 的架構。
目前我僅試了單一 Project 單一環境的情況,另外 laradock 還可以不同 Project 同一個環境、不同 Project 不同環境,之後有需要時可以再試試看。

整體來說,快速部署這件事真的很帥,而且環境一目了然,不用去擔心自己電腦因為開發項目變多而變得太冗太雜。

--

--