摘要:核心對名字空間的支持完全隔離了工作環境中應用程序的視野,包括進程樹網絡用戶與掛載文件系統,而核心的提供資源隔離,包括存儲器與網絡。因此更為輕量快速和易于管理。
docker 如日中天,這不是單純的炒概念,docker 確確實實解決了開發與運維的痛點,因此在企業開發中得到了非常廣泛的使用,本文對于 docker 的這些基本知識點再做一些簡單回顧。
什么是 docker根據 wikipedia 中的介紹:
Docker 是一個開放源代碼軟件項目,讓應用程序布署在軟件容器下的工作可以自動化進行,借此在 Linux 操作系統上,提供一個額外的軟件抽象層,以及操作系統層虛擬化的自動管理機制。
Docker 利用 Linux 核心中的資源分脫機制,例如 cgroups ,以及 Linux 核心名字空間(name space),來創建獨立的軟件容器(containers)。這可以在單一 Linux 實體下運作,避免啟動一個虛擬機造成的額外負擔。Linux 核心對名字空間的支持完全隔離了工作環境中應用程序的視野,包括進程樹、網絡、用戶 ID 與掛載文件系統,而核心的 cgroup 提供資源隔離,包括 CPU 、存儲器、block I/O 與網絡。從 0.9 版本起,Dockers 在使用抽象虛擬是經由 libvirt 的 LXC 與 systemd - nspawn 提供界面的基礎上,開始包括 libcontainer 庫做為以自己的方式開始直接使用由 Linux 核心提供的虛擬化的設施。
依據行業分析公司“451研究”:“Dockers 是有能力打包應用程序及其虛擬容器,可以在任何 Linux 服務器上運行的依賴性工具,這有助于實現靈活性和便攜性,應用程序在任何地方都可以運行,無論是公有云、私有云、單機等。” 。
這里的介紹有點繞口,讓我來介紹下 docker 解決了哪些痛點:
簡化環境管理
傳統的軟件開發與發布環境復雜,配置繁瑣,經常有讀者在微信上問:我的代碼開發環境可以運行,一旦部署到服務器上就運行不了了。這個問題很常見,也確實很煩人,但是問題總要解決,開發環境、測試環境、生產環境,每個環節都有可能出現這樣那樣的問題,如果能夠在各個環境中實現一鍵部署,就會方便很多,例如一鍵安裝 linux 、一鍵安裝 mysql、一鍵安裝 nginx 等,docker 徹底解決了這個問題。
虛擬化更加輕量級
說到容器,說到虛擬化,很多人總會想到虛擬機,想到 VMware、VirtualBox 等工具,不同于這些虛擬技術,docker 虛擬化更加輕量級,傳統的虛擬機都是先虛擬出一個操作系統,然后在操作系統上完成各種各樣的配置,這樣并不能充分的利用物理機的性能,docker 則是一種操作系統級別的虛擬技術,它運行在操作系統之上的用戶空間,所有的容器都共用一個系統內核甚至公共庫,容器引擎提供了進程級別的隔離,讓每個容器都像運行在多帶帶的系統之上,但是又能夠共享很多底層資源。因此 docker 更為輕量、快速和易于管理。
程序可移植
有了前面介紹的兩個特點,程序可移植就是順理成章的事情了。
docker 和虛擬機前面介紹了 docker 與傳統虛擬機的差異,通過下表再來詳細了解下這種差異:
||docker|虛擬機|
|:--|:---|:--|
|相同點|1. 都可在不同的主機之間遷移
2. 都具備 root 權限
3. 都可以遠程控制
4. 都有備份、回滾操作
|
|操作系統|在性能上有優勢,可以輕易的運行多個操作系統|可以安裝任何系統,但是性能不及容器|
|原理|和宿主機共享內核,所有容器運行在容器引擎之上,容器并非一個完整的操作系統,所有容器共享操作系統,在進程級進行隔離|每一個虛擬機都建立在虛擬的硬件之上,提供指令級的虛擬,具備一個完整的操作系統|
|優點|高效、集中。一個硬件節點可以運行數以百計的的容器,非常節省資源,QoS 會盡量滿足,但不保證一定滿足。內核由提供者升級,服務由服務提供者管理|對操作系統具有絕對權限,對系統版本和系統升級具有完全的管理權限。具有一整套的的資源:CPU、RAM 和磁盤。QoS 是有保證的,每一個虛擬機就像一個真實的物理機一樣,可以實現不同的操作系統運行在同一物理節點上。|
|資源管理|彈性資源分配:資源可以在沒有關閉容器的情況下添加,數據卷也無需重新分配大小|虛擬機需要重啟,虛擬機里邊的操作系統需要處理新加入的資源,如磁盤等,都需要重新分區。|
|遠程管理|根據操作系統的不同,可以通過 shell 或者遠程桌面進行|遠程控制由虛擬化平臺提供,可以在虛擬機啟動之前連接|
|缺點|對內核沒有控制權限,只有容器的提供者具備升級權限。只有一個內核運行在物理節點上,幾乎不能實現不同的操作系統混合。容器提供者一般僅提供少數的幾個操作系統|每一臺虛擬機都具有更大的負載,耗費更多的資源,用戶需要全權維護和管理。一臺物理機上能夠運行的虛擬機非常有限|
|配置|快速,基本上是一鍵配置|配置時間長|
|啟動時間|秒級|分鐘級|
|硬盤使用|MB|GB|
|性能|接近原生態|弱于原生態|
|系統支持數量|單機支持上千個|一般不多于幾十個|
不同與傳統容器,docker 早起基于 LXC,后來基于自研的 libContainer,docker 對于傳統容器做了許多優化,如下:
跨平臺的可移植性
面向應用
版本控制
組件復用
共享性
工具生態系統
docker 應用場景加速本地開發
自動打包和部署應用
創建輕量、私有的PaaS環境
自動化測試和持續集成/部署
部署并擴展Web應用、數據庫和后端服務器
創建安全沙盒
輕量級的桌面虛擬化
docker 核心組件docker 中有三大核心組件:
鏡像
鏡像是一個只讀的靜態模版,它保存了容器需要的環境和應用的執行代碼,可以將鏡像看成是容器的代碼,當代碼運行起來之后,就成了容器,鏡像和容器的關系也類似于程序和進程的關系。
容器
容器是一個運行時環境,是鏡像的一個運行狀態,它是鏡像執行的動態表現。
庫
庫是一個特定的用戶存儲鏡像的目錄,一個用戶可以建立多個庫來保存自己的鏡像。
docker相關技術隔離性
可度量性
移植性
安全性
docker 安裝相對而言,Linux 上安裝 Docker 是最容易的,其次是 Mac ,最后是 Windows ,Windows 因此要裝的東西比較多,官方也提供了兩個不同的安裝包,支持不同的 Windows 的不同版本,一個是針對 Win10 的安裝引導程序,還有一個是兼容性較好的 Toolbox ,但是在 Windows 上運行 Docker ,后期在虛擬目錄等方面還會遇到各種問題,所以這里松哥是非常不建議大家在 Windows 中安裝 Docker ,有 Mac 的上 Mac (Mac 上安裝 Docker 就像安裝普通軟件一樣),沒有 Mac 的裝 Linux 虛擬機,再裝 Docker 即可,這里我就先以 CentOS 上安裝 Docker 為例,來說說 Docker 安裝。
分別執行如下安裝命令:
# 首先安裝 Docker yum -y install docker # 然后啟動 Docker 服務 service docker start # 測試安裝是否成功 docker -v
安裝完成后,看到如下頁面,表示安裝成功:
總結本文主要向大家介紹了 Docker 的基本概念以及 Docker 的安裝 ,下篇文章我們向大家介紹 Docker 中基本的容器操作。有問題歡迎留言討論。
參考資料:
[1] 曾金龍,肖新華,劉清.Docker開發實踐[M].北京:人民郵電出版社,2015.
關注公眾號【江南一點雨】,專注于 Spring Boot+微服務以及前后端分離等全棧技術,定期視頻教程分享,關注后回復 Java ,領取松哥為你精心準備的 Java 干貨!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27874.html
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現在也是一直保持著更新狀態。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
摘要:作者麥冬白鯨魚是什么入門教程容器是與系統其他部分隔離開的一系列進程,運行這些進程所需的所有文件都由另一個鏡像提供,從開發到測試再到生產的整個過程中,容器都具有可移植性和一致性。快速容器的啟動和創建無需啟動,可以實現秒級甚至毫秒級的啟動。 作者: 麥冬 白鯨魚 docker 是什么 Docker 入門教程 Docker容器是與系統其他部分隔離開的一系列進程,運行這些進程所需的所有文件都由...
摘要:容器類似虛擬機,可以支持的操作包括啟動,停止,刪除等。交互式可以分配一個虛擬終端并關聯到任何容器的標準輸入上,例如運行一個一次性交互。 Docker Docker 核心概念及入門 什么是docker Docker是一個開放源代碼軟件項目,讓應用程序布署在軟件貨柜下的工作可以自動化進行,借此在Linux操作系統上,提供一個額外的軟件抽象層,以及操作系統層虛擬化的自動管理機制。Docker...
閱讀 2655·2023-04-26 02:44
閱讀 8248·2021-11-22 14:44
閱讀 2118·2021-09-27 13:36
閱讀 2463·2021-09-08 10:43
閱讀 675·2019-08-30 15:56
閱讀 1392·2019-08-30 15:55
閱讀 2887·2019-08-28 18:12
閱讀 2826·2019-08-26 13:50