本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或重新修改使用,但需要註明來源。 署名 4.0 國際 (CC BY 4.0)
本文作者: 蘇洋
建立時間: 2019年04月27日 統計字數: 2001字 閱讀時間: 4分鐘閱讀 本文連結: soulteary.com/2019/04/27/…
簡單優化容器服務
去年的時候,曾經寫過一篇使用 Docker 、Traefik 以及 Nginx 建立自動索引站點的文章,本篇內容將聊聊如何進行優化。
包含內容:剝離容器配置中的變數、如何對容器進行健康檢查、如何限制容器日誌尺寸等。
更新的專案程式碼儲存在: GitHub 上,可以自取。
剝離環境變數
前文的 docker-compose.yml
中,許多內容是直接寫死在檔案中的,隨著配置檔案越來越“複雜”、同類的服務啟動越來越多,我們需要將一些基礎的配置剝離出來,以方便後續的維護。
nginx:
image: nginx:1.15.7-alpine
labels:
- "traefik.frontend.rule=Host:demo.soulteary.com"
extra_hosts:
- "demo.soulteary.com:127.0.0.1"
複製程式碼
比如“域名”、“映象名稱”等資訊,我們可以從上面配置檔案中進行剝離,剝離後的配置如下:
nginx:
image: ${NGX_IMAGE}
labels:
- "traefik.frontend.rule=Host:${NGX_DOMAIN}"
extra_hosts:
- "${NGX_DOMAIN}:127.0.0.1"
複製程式碼
為了讓 docker-compose.yml
能夠像之前一樣正常工作,我們需要建立一個 。env
檔案,存放剛剛剝離的資訊。
NGX_IMAGE=nginx:1.15.8-alpine
NGX_DOMAIN=demo.soulteary.com
複製程式碼
後續這類資訊多起來之後,可以通過配置系統介面獲取,或者讓CD系統自動生成。
支援 HTML 檔案預覽或直接下載
Nginx 預設配置中,HTML
型別檔案將會被渲染成我們熟悉的網頁,這顯然不符合 auto index
的需求,如果能夠像 TEXT
純文字一樣直接在瀏覽器中進行預覽或許會更好。
修改 Nginx 使用的 mime.types
檔案,將 HTML
型別檔案進行修改,原始檔案如:
text/html html htm shtml;
複製程式碼
需要修改為:
text/plain html htm shtml;
複製程式碼
如果你需要使用者在訪問頁面時,能夠直接下載檔案,那麼可以將 text/plain
修改為 application/octet-stream
。
容器服務監控檢查
為了容器中的應用執行結果更加可靠,我們需要讓容器進行健康檢查。
因為本例中的內容是動態生成的,雖然程式效率很高,但是還是建議讓檢查工具請求的內容儘可能更簡單一些,為此我們定義一個新的路徑 /health-check
,並將它新增到 nginx.conf
配置中:
location = /health-check {
access_log off;
default_type text/html;
return 200 'alive';
}
複製程式碼
當健康檢查器或者使用者訪問這個地址時,將會得到“alive”的結果。
接著,在 docker-compose.yml
中定義檢查器:
healthcheck:
test: ["CMD-SHELL", "wget -q --spider --proxy off localhost/health-check || exit 1"]
複製程式碼
當你執行 docker ps
時,終端輸出的文字將會有一些不同。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9903d19aae7 nginx:1.15.8-alpine "nginx -g 'daemon of…" 5 seconds ago Up 4 seconds (health: starting) 80/tcp
複製程式碼
當程式完全執行之後,Up 4 seconds (health: starting)
將會變更為 Up 10 seconds (healthy)
。
未來在除錯/檢視容器服務狀況時,辨別服務執行狀態就又有了一個新的依據啦。
約束日誌檔案尺寸
搭建的應用,除了會被使用者訪問之外,還可能遭到掃描器問候、惡意的海量請求。
這時,如果不約束日誌檔案尺寸,很容易將磁碟佔滿,造成其他麻煩。
除了使用 logrotate 處理日誌外,更簡單的方案是在 docker-compose.yml
中對日誌尺寸進行限制,將下面的內容新增到配置檔案中。
logging:
driver: "json-file"
options:
max-size: "10m"
複製程式碼
我現在有一個小小的折騰群,裡面聚集了一些喜歡折騰的小夥伴。
在不發廣告的情況下,我們在裡面會一起聊聊軟體、HomeLab、程式設計上的一些問題,也會在群裡不定期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼新增好友。(請註明來源和目的,否則不會通過稽核)