簡單優化容器服務

本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html

本文做者: 蘇洋nginx

建立時間: 2019年04月27日 統計字數: 2001字 閱讀時間: 4分鐘閱讀 本文連接: soulteary.com/2019/04/27/…git


簡單優化容器服務

去年的時候,曾經寫過一篇使用 Docker 、Traefik 以及 Nginx 建立自動索引站點的文章,本篇內容將聊聊如何進行優化。github

包含內容:剝離容器配置中的變量、如何對容器進行健康檢查、如何限制容器日誌尺寸等。docker

更新的項目代碼保存在: GitHub 上,能夠自取。編程

剝離環境變量

前文的 docker-compose.yml 中,許多內容是直接寫死在文件中的,隨着配置文件愈來愈「複雜」、同類的服務啓動愈來愈多,咱們須要將一些基礎的配置剝離出來,以方便後續的維護。json

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 文件,存放剛剛剝離的信息。bash

NGX_IMAGE=nginx:1.15.8-alpine
NGX_DOMAIN=demo.soulteary.com
複製代碼

後續這類信息多起來以後,能夠經過配置系統接口獲取,或者讓CD系統自動生成。app

支持 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、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。

喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)

關於折騰羣入羣的那些事

相關文章
相關標籤/搜索