如何 10 步 Docker 化乙個應用

2021-09-11 11:47:34 字數 2101 閱讀 6423

本文將講解如何將應用 docker 化的一些很實用的技巧和準則,推薦一讀。

一、選擇基礎映象

每種對應技術幾乎都有自己的基礎映象,例如:

如果不能直接使用這些映象,我們就需要從基礎作業系統映象開始安裝所有的依賴。

網上大多數教程使用的都是以 ubuntu(例如:ubuntu:16.04 )作為基礎映象,這並不是乙個問題,但是我建議優先考慮 alpine 映象:

alpine 是乙個非常小的基礎映象(它的容量大約只有 5mb)。

注:在基於 alpine 的映象中你無法使用 apt-get 命令。不過你不必擔心,因為 alpine 系統有自己的軟體包倉庫和包管理工具 apk。關於 apk 的具體使用你可以詳細參考:「alpine linux配置使用技巧」一文。

二、安裝必要軟體包

這個步驟通常比較瑣碎,有一些容易忽略的細節:

注:我見過有人在他們的映象中安裝了 vim 和其他開發工具。如果這是必要的,應該針對構建、除錯和開發環境建立不同的 dockerfile。這不僅僅關係到映象大小,還涉及到安全性、可維護性等等。

三、新增自定義檔案

四、定義容器執行時的使用者許可權

注:現在不少熱門應用程式映象都需要用特定的使用者 id 來執行(例如:elastic search 需要 uid:gid = 1000:1000),請盡量不要在寫出這樣的映象。更多關於容器內執行應用程式的許可權說明可參考此文。

五、定義暴露的埠

不要為了暴露特權埠(例如:80)而將容器以 root 許可權執行。如果有這樣的需求,可以讓容器暴露乙個非特權埠(例如:8080),然後在啟動時進行埠對映。

注:低於 1024 的 tcp / ip 埠號就是特權埠,因為不允許普通使用者在這些埠上執行服務。

六、定義入口點(entrypoint)

七、定義一種配置方式

每個應用程式都需要引數化,你基本上可以遵循以下兩個原則:

注:使用環境變數方式並不意味著您需要丟棄配置檔案並重構應用程式的配置機制,你只需要通過 envsubst命令來替換配置檔案模板中的值就可以了(這個流程一般需要在 docker-entrypoint.sh 檔案中完成,因為這需要在容器程序執行前完成)。例如:在 nginx 配置中使用環境變數,具體方法可參考此文。

這種方式可以將應用程式的配置檔案封裝在容器內部。

八、外部化資料

關於資料儲存有一條**法則:絕對不要將任何持久化資料儲存到容器內。

容器的檔案系統本身是被設計成臨時和短暫的。因此任何由應用程式生成的內容、資料檔案和處理結果都應該儲存到掛載的卷或者作業系統繫結掛載點上(既:將宿主機作業系統的目錄掛載到容器中)。

如果將資料儲存到繫結掛載點,對於要繫結到容器的宿主機上的目錄,你需要注意以下幾點:

九、確保處理好日誌

如果這是乙個新的應用程式,並且希望它能夠堅持 docker 約定,就不應該將日誌寫入任何檔案。應用程式應該使用標準輸出和標準錯誤輸出日誌,這和之前推薦使用環境變數傳遞引數一樣,這也是 12-factors 之一,具體可以參見這裡。

docker 會自動捕捉應用程式的標準輸出,並可以通過docker logs命令檢視。有關於docker logs的具體使用你可以參考這裡。

但是在一些實際場景下你可能會遇到問題,例如:執行乙個簡單的 nginx 容器,至少會有兩種不同的日誌檔案:

對於這種按照特定結構輸出日誌的應用,就不太適合將它們的日誌輸出到標準輸出。這種情況下,你需要按持久化的方式處理這些日誌,並確保這些日誌檔案的能正常的輪轉。

十、輪轉日誌

如果應用程式將日誌寫到檔案,或者會無限追加內容到檔案,就需要關注這些檔案的輪轉(rotation),這對於防止伺服器空間耗盡非常有用的。

如果使用繫結掛載,我們可以依靠宿主機的一些工具來實現檔案輪轉功能。例如:logrotate,關於 logrotate 的使用你可以參考示例

一、示例二。

詳解Docker如何啟動乙個Centos映象

接著上文,我們 完成乙個centos映象之後,開始啟動 執行命令 docker run d i t bin bash 這樣就能啟動乙個一直停留在後台執行的centos了。如果少了 bin bash的話,docker會生成乙個container但是馬上就停止了,不會一致執行即使有了 d引數。然後我們可...

10 步帶你做乙個棒棒的 Hybrid 應用

本文講的是10 步帶你做乙個棒棒的 hybrid 應用,james miller 介紹了 10 條建議以助你得到最佳成果。原始且最受歡迎的開源 hybrid 框架。js apis 可呼叫手機原生功能。它有助力開發跨平台應用的 cli。phonegap 是在 cordova 基礎上構建的 adobe ...

如何製作乙個自己的docker映象

功能類似於 npm 的 package.json 簡單來說就是製作這個 docker 的配置檔案 構建乙個docker映象 建立乙個dockerfile 表示依賴其它的映象,必須保證本地有這個映象 from nginx 將所有者 作者 資訊寫入到映象中 maintainer test name te...