Ads 468x60px

##EasyReadMore##

13 2月, 2018

docker 簡介及應用

image

Docker vs 虛擬機

image

由上圖可以看到,docker 與一般虛擬機的不同,docker 把 OS 層包進去 Docker Engine ,以包持一致性,不同的只有 user 層。

Docker 應用:

使用Docker搭建樹莓派交叉編譯環境
由於樹莓派系統資源有限,在編譯大項目源碼時非常慢或出現內存不足(例如OpenCV),但是要搭建交叉編譯環境又太麻 煩。最簡單的一個方法是使用Docker-使用其它人構建好的Docker容器。
使用Docker搭建樹莓派交叉編譯環境– WTF Daily Blog - https://goo.gl/3W2qz6
 
  多租戶環境
另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關於這個場景的例 子是為IoT(譯者註:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼非常複雜,很難處理, 重新規劃這樣一個應用不但消耗時間,也浪費金錢。
 
  整合服務器
正如通過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本。由於沒有多個操 作系統的內存佔用,以及能在多個實例之間共享沒有使用的內存,Docker可以比虛擬機提供更好的服務器整合解決方案。
 
  - 開發測試環境管理
- 應用升級回滾
- 故障自動恢復
- 多雲多數據中心管理
 
  八個Docker的真實應用場景- DockOne.io - https://goo.gl/Qq63gr
 
  今天如果我們需要安裝一個Service的服務在Ubuntu VM上面,通常的做法是去下載Ubuntu的ISO,並透過VM來安裝一 個Ubuntu。除了安裝過程中,會透過網路去更新部分套件外,也會安裝一些在部署或開發中不需要的軟體及套件佔用了硬 碟的空間。
若需要架設兩個以上的Ubuntu  VM,則會花了更多空間裝重複不必要的軟體及套件,並且開啟兩個VM佔用系統的資源非常多。
 
  透過Docker,若我們有兩個系統需要架設在相同版本的Ubuntu上面,兩個系統會使用Ubuntu 映像檔(Images)作為 基底的映像檔來建立自己新的容器(Container)。在每個容器裡面,都是以同一個映像檔建立出的Ubuntu作業系統, 工作目錄與檔案系統都是各自獨立不衝突!使用的資源比架設兩台VM來的較少。
Enjoy Your Coding - 使用 Docker 建立跨平台上開發環境 - https://goo.gl/2CTxHF
 
  解進新人到職免重新部署環境的問題:
  用 Docker 快速配置前端开发环境 · 梁杰的个人博客 - https://goo.gl/Hzu4RN

常見名詞:

Images(映像檔)
一個映像檔裡面包含了之後建立的Container要用的作業系統及相關設定。因為一個映像檔可能會被一個以上的Contain er做使用,所以僅可以讀取,不可寫入。
 
  Base Image(基底映像檔)
基底映像檔中,包含了該作業系統的Kernel(ex: 檔案系統)等架構,基本上就是一個最小化的作業系統做成的映像檔 。也可以使用自己建立的Container或Image匯出成映像檔當做基底映像檔。
 
  Container(容器)
是從Image中建立出來的獨立環境,Container跟VM一樣都是為了建立出獨立不衝突的環境而設計出來的。VM的虛擬化 是使用Virtual Box或Hyper-V以作業系統建立出來的,而Docker的Container則是以應用程式為基底做出的Contai ner,共用了架設Docker的作業系統(Host OS)上的資源。可進行讀寫。

Dockerfile
  Dockerfile是一個文字檔,裡面可以撰寫我們自定義映像檔的腳本。

作者:kongxx
  链接:https://www.jianshu.com/p/576e01666e5a
  來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Docker Container 裡應該避免的事:

Container 除此之外的另一個絕大優勢:它是一次性的(disposable)。
這個特性「本身」促使使用者改變他們對於處理與管理 Container 的習慣。接下來我會解釋您不應在 Container  裡做什麼,以確保它能發揮最大效益。
 
  不要建立大型的 Image
  一個大型的 Image 只會讓它難以被散佈。確認您是否只放置應用程式/ 程序所需的檔案和函式庫,不要在建置時安裝多餘的套件或是進行套件更新(像是 yum update 或 apt-get  upgrade)6,這樣會下載過多的檔案加進新的 Image 層。
 
  不要只使用 latest 標籤
latest 標籤就像是 Maven 使用者的 SNAPSHOT。多使用標籤,以善用分層式檔案系統的特性。您不會希望在您建置  Image 的幾個月後,驚訝的發現您的應用程式竟然不能執行,探究原因後才發現是因為父層級(Dockerfile  中的 FROM)被一個無法向下相容的新版本給取代了,或是因為從建置快取中取得錯誤的 latest 導致。latest  標籤也應該避免使用在正式環境下部署 Container,因為您不能追蹤您的 Container 到底是跑哪一個 Image  版本。
 
  不要在一個 Container 跑超過一個程序
程序可以完美的去執行一個程序(像是 http daemon、application  server、database),但如果您執行超過一個程序,您可能會在管理、讀取紀錄或獨立更新上都感到棘手
 
  使用非 root 的使用者去執行程序
「Docker container 預設會使用 root 去執行程序。….隨著 docker  越來越成熟,會有更多安全的預設設定可以使用。現在,需要用 root  對其他人是有危險的,且可能無法在所有環境中使用。您的 Image 應該使用 USER 指令去指定非 root  的使用者讓 container 執行。
 
  
  在 Docker Container 裡應該避免的 10 件事 - 深藏若虛 - https://goo.gl/3kfKTv
 
  《Docker —— 從入門到實踐­》正體中文版 · GitBook - https://goo.gl/OiPRKs

0 意見:

張貼留言

 
Blogger Templates