Docker學習—Docker簡介
什麽是Docker
Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業余項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。
Docker 自開源後受到廣泛的關註和討論,以至於 dotCloud 公司後來都改名為 Docker Inc。
Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。
Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
Docker容器和虛擬機的區別:
為什麽用Docker
Docker 在如下幾個方面具有較大的優勢:
- 更快速的交付和部署
Docker在整個開發周期都可以完美的輔助你實現快速交付。Docker允許開發者在裝有應用和服務本地容器做開發。可以直接集成到可持續開發流程中。
例如:開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速叠代應用程序,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。
- 高效的部署和擴容
Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。
Docker的兼容性和輕量特性可以很輕松的實現負載的動態管理。你可以快速擴容或方便的下線的你的應用和服務,這種速度趨近實時。
- 更高的資源利用率
Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。
- 更簡單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。
Docker引擎
- Server是一個常駐進程
- REST API 實現了client和server間的交互協議
- CLI 實現容器和鏡像的管理,為用戶提供統一的操作界面
Docker構架
Docker使用C/S架構,Client 通過接口與Server進程通信實現容器的構建,運行和發布。client和server可以運行在同一臺集群,也可以通過跨主機實現遠程通信。
核心概念
- 鏡像(image)
Docker 鏡像(Image)就是一個只讀的模板。例如:一個鏡像可以包含一個完整的操作系統環境,裏面僅安裝了 Apache 或用戶需要的其它應用程序。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用。
鏡像(Image)就是一堆只讀層(read-only layer)的統一視角,也許這個定義有些難以理解,看看下面這張圖:
右邊我們看到了多個只讀層,它們重疊在一起。除了最下面一層,其它層都會有一個指針指向下一層。這些層是Docker內部的實現細節,並且能夠在docker宿主機的文件系統上訪問到。統一文件系統(Union File System)技術能夠將不同的層整合成一個文件系統,為這些層提供了一個統一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統。
- 倉庫(repository)
倉庫(Repository)是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務器(Registry)混為一談,並不嚴格區分。實際上,倉庫註冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括 時速雲 、網易雲 等,可以提供大陸用戶更穩定快速的訪問。當然,用戶也可以在本地網絡內創建一個私有倉庫。
當用戶創建了自己的鏡像之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
Docker 倉庫的概念跟 Git 類似,註冊服務器可以理解為 GitHub 這樣的托管服務。
- 容器(container)
Docker 利用容器(Container)來運行應用。容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。
一個運行態容器被定義為一個可讀寫的統一文件系統加上隔離的進程空間和包含其中的進程。下面這張圖片展示了一個運行中的容器。
正是文件系統隔離技術使得Docker成為了一個非常有潛力的虛擬化技術。一個容器中的進程可能會對文件進行修改、刪除、創建,這些改變都將作用於可讀寫層。
更多參考:
https://www.cnblogs.com/SzeCheng/p/6822905.html
Docker學習—Docker簡介