Cyber Coding Course

師其意,不泥其跡

如何更新或重建D-Laravel的FPM Image

使用情境

Docker的世界,我們透過Dockerfile建立image ,並且透過docker commit產生新的image,
再把image push到Docker registry。(例如:Docker Hub)。
我們會在docker-compose的yaml檔去定義service及要使用的image,
因此當我們執行docker-compose up時,
docker會檢查docker-compose.yml內設定的image是否已存在我們的系統中,
如果沒有,就進行下載,然後用該image為樣版(image是一唯讀的樣版),建立出container(容器)。
 

D-Laravel

dlaravel的骨子裡,就是docker,只不過多了簡易的bash讓我們快速用docker的指令產生contaner
大家或許會好奇為何要用bash,因為我要讓大家可以去檢視及了解D-Laravel是如何執行(如果您想了解)。

話說回來,也就是說當我們下了./console up的指令時, 他就是執行docker的官方指令docker-compose up -d
因此如果我們已下載過了某一個image,像是deviny/fpm:7.2.17,下次啟動docker-compose就不會再下載該image來建立container了。
那我們如何透過指令的方式來更新這個調整過的image到自己的電腦呢?
我們可以用指令 docker pull deviny/fpm:7.2.17來進行更新。

關於D-Laravel的Image,應該盡量使用最新版的PHP版號為主,
主要會有PHP本身安全性及Bug的修正,包含了D-Laravel運作環境的一些更新及調整。

雖然D-Laravel的image中提供很多不同的PHP版號的tag...
https://hub.docker.com/r/deviny/fpm/tags/

例如:
php 7.1.7及php 7.1.28 建議選擇7.1.28

php 5.6.30及php 5.6.31 建議選擇5.6.31

我們應該採用較新的版本在自己的docker-compose-custom.yml設定中。
如果您的D-Laravel資料夾,沒有docker-compose-custom.yml,可以透過./console custom 來產生及使用。

如果您發現D-Laravel中有些image內的php擴充是不能用的,例如,在其他的平台上PHP可以執行,
但是D-Laravel上無法執行,歡迎開PR給我,或是在D-Laravel的專屬聊天室中留言哦,我會視情況新增這個擴充。

那如何更新我們已使用中的image呢 (相同tag名稱的image)?
例如,依deviny/fpm:7.1.8的image為例,可以嚐試看看,git pull deviny/fpm:7.1.8
$docker pull deviny/fpm:7.1.8
7.1.8: Pulling from deviny/fpm
Digest: sha256:3b3f9c98bd143c1487c70fa9b072dd95915aaec84b1ab8b1de61940dd015bf55
Status: Image is up to date for deviny/fpm:7.1.8
基本上D-Laravel的image同版號變更的頻率很低,
除非您真的使用上碰到一些問題,例如某些擴充無法使用,否則您無需進行此動作

如果有較新的tag時,可以直接使用較新的tag,例如: deviny/fpm:7.1.9

在新版本的D-Laravel中,我們可透過./console ext查看目前安裝已編譯的php外掛有那些。

重建自己專有的image

當然,您絕對可以重建自己的D-Laravel使用的php-fpm image, 來符合您自己的環境需求
步驟如下:
#在D-Laravel的目錄執行
cd dockerfiles/fpm/7.3
#查看目錄下是否有個Docekrfile
ls
#用編輯器修改,Dockerfile加入更多的php擴充
#再用下方的指令build自己的image。
docker build -t myphp .
完成後,記得修改您docker-compose.yml中php服務的image為您的image名稱,此處為例叫myphp。
最後,重啟容器,看看是否work囉。
 ./console restart

如果您對於D-Laravel有任何的疑問或是重建image的問題,歡迎到以下聊天室留言討論哦。
D-Laravel聊天室

作者: Devin Yang