1. 程式人生 > >Docker入門知識總結-學習筆記1

Docker入門知識總結-學習筆記1

nic yum 數量 python pan over mirror 官方文檔 mes

Docker容器技術是基於Go語言實現的雲開源項目,誕生於2013年,是一種高效、敏捷、和輕量級的容器解決方案,發布於2013年。Docker基於Linux平臺上的多項開源技術,其中最重要的就是Linux容器(Linux Containers,LXC)技術。

技術分享圖片

Docker的優點:

更快速的交付和部署。使用Docker,開發人員可以使用鏡像來快速構建一套標準的開發環境;開發完成之後,測試和運維人員可以直接使用完全相同環境來部署代碼。只要開發測試過的代碼,就可以確保在生產環境無縫運行。Docker可以快速創建和刪除容器,實現快速叠代,大量節約開發、測試、部署的時間。並且,整個過程全程可見,使團隊更容易理解應用的創建和工作過程。

更高效的資源利用。Docker容器的運行不需要額外的虛擬化管理程序(VirtualMachine Manager,VMM,以及Hypervisor)支持,它是內核級的虛擬化,可以實現更高的性能,同時對資源的額外需求很低。跟傳統虛擬機方式相比,要提高一到兩個數量級。

更輕松的遷移和擴展。Docker容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、服務器等,同時支持主流的操作系統發行版本。這種兼容性讓用戶可以在不同平臺之間輕松地遷移應用。

更簡單的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。並且所有修改都以增量的方式被分發和更新,從而實現自動化並且高效的容器管理。

Docker與虛擬機的比較:

Docker容器很快,啟動和停止可以在秒級實現,而傳統的虛擬機方式需要數分鐘。

Docker容器對系統資源需求很少,一臺主機上可以同時運行數千個Docker容器(在IBM服務器上已經實現了同時運行10K量級的容器實例)。

Docker通過類似Git設計理念的操作來方便用戶獲取、分發和更新應用鏡像,存儲復用,增量更新。

Docker通過Dockerfile支持靈活的自動化創建和部署機制,提高工作效率,使流程標準化。

Docker容器除了運行其中應用外,基本不消耗額外的系統資源,保證應用性能的同時,盡量減小系統開銷。傳統虛擬機方式運行N個不同的應用就要起N個虛擬機(每個虛擬機需要單獨分配獨占的內存、磁盤等資源),而Docker只需要啟動N個隔離的“很薄的”容器,並將應用放進容器內即可。應用獲得的是接近原生的運行性能。

在隔離性方面,傳統的虛擬機方式提供的是相對封閉的隔離。但這並不意味著Docker就不安全,Docker利用Linux系統上的多種防護技術實現了嚴格的隔離可靠性,且可以整合眾多安全工具。從1.3.0版本開始,Docker重點改善了容器的安全控制和鏡像的安全機制,極大提高了使用Docker的安全性。在已知的大規模應用中,目前尚未出現值得擔憂的安全隱患。

Docker體系結構:

Docker使用C/S架構,docker daemon作為server端接受client端的請求,然後進行處理。server端和client端也可以運行在同一個機器上,使用socket或者RESTful API進行通信。server端也就是docker daemon運行在主機的後臺,client以系統命令的形式存在,用戶用docker命令來跟docker daemon 交互。用戶通過輸入docker命令可以管理docker的鏡像、容器、網絡和數據卷。

技術分享圖片

Docker三大核心概念:

1、鏡像(Docker images)

Docker鏡像是Docker容器運行時的只讀模板,鏡像可以用來創建Docker容器。每一個鏡像由一系列的層 (layers) 組成。Docker使用UnionFS(聯合文件系統)來將這些層聯合到單獨 的鏡像中。UnionFS允許獨立文件系統中的文件和文件夾(稱之為分支)被透明覆蓋,形成一個單獨連貫的文件系統。正因為有了這些層的存在,Docker是如此的輕量。當你改變了一個Docker鏡像,比如升級到某個程序到新的版本,一個新的層會被創建。因此,不用替換整個原先的鏡像或者重新建立(在使用虛擬機的時候你可能會這麽做),只是一個新的層被添加或升級了。現在你不用重新發布整個鏡像,只需要升級,層使得分發Docker 鏡像變得簡單和快速。

例如:在centos鏡像中安裝nginx,就成了“nginx鏡像”,其實就是在底層的一個centos操作系統鏡像上加一個nginx層,就完成了一個nginx鏡像的構建。此時我們一般centos操作系統鏡像稱為nginx鏡像層的父鏡像。

2、容器(Docker containers)

Docker利用容器來運行應用,一個Docker容器包含了所有的某個應用運行所需要的環境。每一個Docker容器都是從Docker鏡像創建的,是通過鏡像創建的運行實例。Docker容器可以運行、開始、停止、移動和刪除。每一個Docker容器都是獨立和安全的應用平臺,彼此 相互隔離、互不可見。

3、倉庫(Docker repository)

Docker倉庫其實就是存放Docker images的地方。而另外有一個概念叫做註冊服務器(Registry),一個註冊服務器上可以有多個倉庫。一個倉庫一般存放著一類鏡像,這些鏡像通過自身不同的Tag(標簽)進行區分。

技術分享圖片

Docker的兩個核心底層技術:

1、名稱空間(Namespace)

上面說到Docker的隔離性,其實名稱空間就是在Docker中用來隔離容器的主要技術。

1) pid namespace

用來隔離不同用戶的進程

2)net namespace

隔離容器的網路

3)IPC namespace

因為容器中進程交互還是采用linux常見的進程間交互方法 (interprocess communication - IPC),包括常見的信號量、消息隊列和共享內存

4)mnt namespace

類似chroot,將進程放在特定目錄執行。允許不同namespace的 進程看到的文件結構不同

5)uts namespace

允許每個container擁有獨立的hostname和 domain name, 使其在網絡上可以被視作一個獨立的節點而非Host上的一個進程。

6)user namespace

使得每個container可以有不同的user和group id

2、cgroups(Control groups)

cgoups其實是將所有進程放到一個組裏面統一管理的機制。主要提供了資源限制、優先級分配、資源統計、進程控制的作用。


Docker的安裝:

環境:centos7的維護版、centos-extras倉庫需要激活、使用overlay2 存儲驅動

1、yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
卸載舊版本的Docker
2、yum install -y yum-utils device-mapper-persistent-data lvm2
安裝使用yum-config-manager命令
3、yum-config-manager --add-repo 
使用官方源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
使用國內源(建議國內源,官網的可能會慢)
4、yum install docker-ce
安裝
5、systemctl start docker
docker run helloword
測試

Docker官方文檔:docs.docker.com


Docker入門知識總結-學習筆記1