by Devin Yang

建立於: 8年前 ( 更新: 8年前 )

使用情境

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聊天室

Tags: docker

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


docker

[必學]在docker swarm環境必學iptabels的使用

首先Docker在Linux的環境下,Docker使用iptables規則來提供網路隔離。然而在Docker swarm mode的環境下,我們是沒辨法把連接埠開在host的127.0.0.1下的,這時便可透過iptables中的DOCKER-USER chain來自訂規則囉 。

docker

關於Docker的Logging Driver

Docker內建相當多的日誌機制,幫我們取得在container內執行的服務資訊。 這些機制(mechanisms)我們通常稱為logging drivers.

docker,laravel

[D-Laravel]./console node

進行Laravel開發時,有時我們會需要透過npm安裝nodejs的套件,但是偏偏我們系統中的Node又不夠新。 或許因某些因素沒法升級,例如要跑舊版的nodejs程式等。 其實我們可以透過簡單的指令,用docker,讓我們就能使用最新版本的node image來掛載host端的/sites資料夾囉。 這麼一來我們就可以隨時執行新版本的npm指令啦。