天天看點

DevOps利器之Docker入門篇

Docker是基于Go語言實作的開源容器項目,誕生于2013年年初,由dotCloud公司發起,此公司後改名為Docker Inc.Docker項目已加入Linux基金會,并遵循Apache2.0協定,代碼托管在Github:Docker源碼位址

各大作業系統現都支援Docker,并且最新的Linux發行版RedHat、CentOS、Ubuntu中均已預設帶有Docker軟體包.

Docker的構想是要實作“Build,Ship and Run Any App, Anywhere”,即通過對應用的封 裝( Packaging)、分發( Distribution)、部署( Deployment)、運作( Runtime)生命周期進行管 理,達到應用元件級别的“ 一次封裝 ,到處運作” 。 這裡的應用元件, 既可以 是一個 Web 應 用、一個編譯環境,也可以是一套資料庫平台服務,甚至是一個作業系統或叢集。

基于 Linux 平 台上的多項開源技術, Docker 提供了高效、靈活和輕量級的容器方案,并 支援部署到本地環境和多種主流雲平台 。 可以說 , Docker首次為應用 的開發 、運作和部署提 供了“一站式”的實用解決方案。

早期Docker代碼實作是基于LXC(Linux Containers,即Linux容器),自0.9版本開始,Docker開發了libcontainer項目作為更廣泛的容器驅動實作.

簡單地講,讀者可以将 Docker 容器了解為一種輕量級的沙盒( sandbox)。 每個容器内 運作着一個應用,不同的容器互相隔離,容器之間也可以通過網絡互相通信。 容器的建立和 停止十分快速,幾乎跟建立和終止原生應用 -緻;另外,容器自身對系統資源的額外需求也十分有限,遠遠低于傳統虛拟機 。 很多時候,甚至直接把容器當作應用本身也沒有任何 問題。

新型的建立分布式應用程式的方式,快速分發和部署

通過容器來打包應用、解藕應用和運作平台

更快速的傳遞和部署,啟動快速,啟動和停止可以在妙計實作,節約開發、測試、部署的大量時間

更高效的資源利用,一台主機上可以運作上千個Docker容器,運作Docker不需要額外的虛拟化管理程式(virtual machine manager,以及Hypervisor)的支援,Docker是核心級的虛拟化,可以實作更進階的性能

更輕松的遷移和擴充,Docker容器幾乎可以在任意的平台上運作,包括實體機、虛

拟機、公有雲、私有雲 、 個人電腦 、 伺服器等

更簡單的更新管理,使用Dockerfile,隻需要小小的配置修改就可以實作以前繁瑣的更新,提高工作效率,并标準 化流程

Docker通過類似 Git設計理念的操作來友善使用者擷取、分發和更新應用鏡像,存儲複 用,增量更新

Docker與傳統虛拟機的比較如下圖

DevOps利器之Docker入門篇

Docker 運作基本指令和模式:

DevOps利器之Docker入門篇

Docker Engine:

DevOps利器之Docker入門篇

Docker architecture:

DevOps利器之Docker入門篇

虛拟化 (virtualization)技術是一個通用的概念,在不同領域有不同的了解。 在計算領 域,一般指的是計算虛拟化 (computingvirtualization),或通常說的伺服器虛拟化。 維基百科 上的定義如下:

“在計 算機技 術中,虛拟化 是 一種資 源管理技術,是将 計 算機 的各種實 體資 源,如伺服器 、 網絡、 記憶體及存儲等,予以抽 象、轉換後呈現出來,打破實體 結 構間的不可切割的障礙,使使用者可以用比原本的紐态更好的方式來應用這些資源 。”

可見,虛拟化的核心是對資源的抽象,目标往往是為了在同一個主機上同時運作多個系

統或應用,進而提高系統資源的使用率,并且帶來降低成本、友善管理和容錯容災等好處 。

Docker 和常見的虛拟機方式的不同之處:

DevOps利器之Docker入門篇

使用者可以通路 Docker 官網的 Get Docker Docker 官網頁面,檢視擷取 Docker 的方式,以及 Docker 支援的平台類型目前 Docker 支援 Docker 引 擎、 Docker Hub、 Docker Cloud 等多種服務 。

Docker 引擎:包括支援在桌面系統或雲平台安裝 Docker,以及為企業提供簡單安全

彈性的容器叢集編排和管理;

DockerHub:官方提供的雲托管服務,可以提供公有或私有的鏡像倉庫;

DockerCloud :官方提供的容器雲服務,可以完成容器的部署與管理,可以完整地支

持容器化項目,還有CI、 CD功能。

Linux安裝

Mac安裝

或者:

手動下載下傳安裝 :Docker Mac傳送門

運作:

安裝完成後啟動Docker服務,然後嘗試運作如下命名:

鏡像 (Image)

容器( Container)

倉庫( Repository)

鏡像是Docker三大核心概念中最重要的,是建立 Docker容器的基礎。本質上是一個檔案,通過版本管理和增量的檔案系統, Docker 提供了一套十分簡單的機制來建立和更新現有的鏡像,使用者甚至可以從網上下載下傳一個已經做好的應用鏡像,并直接使用.

Docker 運作容器前需要本地存在對應的鏡像, 如果鏡像不存在, Docker 會嘗試先從默 認鏡像倉庫下載下傳(預設使用 Docker Hub 公共注冊伺服器中的倉庫), 使用者也可以通過配置, 使用自定義的鏡像倉庫。

注意:

一般來說,鏡像的latest 标簽意味着該鏡像的内容會跟蹤最新版本的變更而變化,内容是不穩定的。是以,從穩定性上考慮,不要在生産環境中忽略鏡像的标簽資訊或使 用預設的latest 标記的鏡像。

檢視本地主機上的鏡像清單:

顯示如圖:

DevOps利器之Docker入門篇

REPOSITORY:來自于哪個倉庫

TAG: 鏡像的标簽資訊

IMAGE ID:鏡像的ID,這裡同樣的ID可以是不同TAG,完整的ID是由64個十六進制字元,這裡預設展示前12位

CREATED: 鏡像的建立時間

SIZE: 鏡像大小,優秀的鏡像往往都比較小,鏡像大小資訊隻是表示了該鏡像的邏輯體積大小, 實際上由于相同的鏡像層本地隻會存儲一份, 實體上占用的存儲空間會小于各鏡像邏輯體積之和

添加鏡像标簽

為了友善在後續工作中使用特定鏡像,還可以使用<code>docker tag</code>指令來為本地鏡像任 意添加新的标簽。 例如,添加一個新的myubuntu: latest鏡像标簽:

檢視鏡像詳細資訊

使用 <code>docker inspect</code> 指令可以擷取該鏡像的詳細資訊,包括制作者、适應架構、各層的數字摘要等:

使用<code>history</code>指令檢視鏡像曆史

既然鏡像檔案由多個層組成,那麼怎麼知道各個層的内容具體是什麼呢?這時候可以使用 <code>history</code>子指令,該指令将列出各層的建立資訊。

DevOps利器之Docker入門篇

使用 <code>docker rmi</code> 或 <code>docker image rm</code> 指令可以删除鏡像, 指令格式為 <code>docker&lt;br/&gt;rmi IMAGE [IMAGE ... ]</code>, 其中 IMAGE 可以為标簽或 ID。

使用Docker一段時間後, 系統中可能會遺留一些臨時的鏡像檔案, 以及一些沒有被使 用的鏡像, 可以通過<code>docker image prune</code>指令來進行清理。

建立鏡像的方法主要有三種:

基于已有鏡像的容器建立

基千本地模闆導入

基于Dockerfile建立(比較常用)

Dockerfile是一個文本格式的配置檔案,使用者可以使用Dockerfile來快速建立自定義的鏡像。由一行行指令語句組成,并且支援以#開頭的注釋行。一般而言,Dockerfile主體内容分為四部分:

基礎鏡像資訊

維護者資訊

鏡像操作指令

容器啟動時執行指令

<code>未完待續......</code>