文章目錄
前言
- Docker自2013年爆紅以來,一直獨領風騷,以下是我整理的一些Docker基礎理論,個人感覺這些是以後玩Docker,K8S等的敲門磚,很基礎,很重要!
一:DOCKER理論
1.1:什麼是docker?有什麼作用?
- Docker是一個用於開發,交付和運行應用程序的開放平臺。Docker使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。
- 是一個開源的應用容器引擎,讓開發者可以打包大門的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的Linux或者Windows機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口
- 沙箱(Sandbox):在計算機安全領域,
沙箱是一種程序的隔離運行機制
- Docker在2013年一炮而紅,直到現在,已經成爲容器技術的代名詞。
- Docker從一開始就以提供標準化的運行時環境爲目標,真正做到“build once, run anywhere”,可以將同一個構建版本用於開發、測試、預發佈、生產等任何環境,並且做到了與底層操作系統的解耦。在此基礎上還進一步發展出了CaaS(容器即服務)技術。
1.2:Docker的使用場景
- 打包應用程序簡單部署
- 可脫離底層硬件任意遷移(實現了應用的隔離,將應用拆分並進行解耦),例如:服務器從騰訊雲遷移到阿里雲
- 持續集成和持續交付(CI/CD):開發到測試發佈
- 部署微服務
- 提供PAAS產品(平臺即服務){OpenStack的雲主機類似於阿里雲的ECS,屬於IAAS、Docker(K8S) 屬於PAAS}
1.3:Docker引擎(Docker Engine)
- Docker Engine是具有以下主要組件的客戶端-服務器應用程序:
- 服務器是一種長期運行的程序,稱爲守護程序進程(
dockerd
命令)。 - REST API,它指定程序可以用來與守護程序進行通信並指示其操作的接口。
- 命令行界面(CLI)客戶端(
docker
命令)。
1.4:Docker的架構(Docker architecture)
-
Docker使用客戶端-服務器架構。Docker 客戶端與Docker 守護進程進行對話,該守護進程完成了構建,運行和分發Docker容器的繁重工作。
-
Docker區別於傳統的虛擬化,不需要虛擬硬件資源,直接使用容器引擎,所以速度快
-
Docker Client:客戶端
- Docker客戶端(
docker
)是許多Docker用戶與Docker交互的主要方式。當您使用諸如之類的命令時docker run
,客戶端會將這些命令發送到dockerd
,以執行這些命令。該docker
命令使用Docker API。Docker客戶端可以與多個守護程序通信。
- Docker客戶端(
-
Docker daemon:守護進程
- Docker守護程序(
dockerd
)偵聽Docker API請求並管理Docker對象,例如圖像,容器,網絡和卷。守護程序還可以與其他守護程序通信以管理Docker服務。
- Docker守護程序(
-
Docker images:鏡像
- 容器可以被打包成鏡像
-
Docker container:容器
-
Docker registry:鏡像倉庫
- 存儲鏡像的地方,默認在公共的Docker Hub上查找,可以搞個人倉庫。
1.5:容器與虛擬機的區別
-
不同點 container VM 啓動速度 秒級 分鐘級 運行性能 接近原生(直接在內核中運行) 5%左右損失 磁盤佔用 MB GB 數量 成百上千 一般幾十臺 隔離性 進程級別 系統級別(更徹底) 操作系統 主要支持Linux 幾乎所有 封裝程度 只打包項目代碼和依賴關係,共享宿主機內核 完整的操作系統,與宿主機隔離
1.7:名稱空間(Namespaces)
- Docker使用一種稱爲
namespaces
提供容器的隔離工作區的技術。運行容器時,Docker會爲該容器創建一組 名稱空間。 - 這些名稱空間提供了一層隔離。容器的每個方面都在單獨的名稱空間中運行,並且其訪問僅限於該名稱空間。
- Docker Engine在Linux上使用以下名稱空間:
- **該pid命名空間:**進程隔離(PID:進程ID)。
- **該net命名空間:**管理網絡接口(NET:網絡)。
- **該ipc命名空間:**管理訪問IPC資源(IPC:進程間通信)。
- **該mnt命名空間:**管理文件系統掛載點(MNT:mount)。
- **該uts命名空間:**隔離內核和版本標識符。(UTS:Unix時間共享系統)。
1.8:控制組(Control groups)
- Linux上的Docker引擎還依賴於另一種稱爲控制組 (
cgroups
)的技術。cgroup將應用程序限制爲一組特定的資源。控制組允許Docker Engine將可用的硬件資源共享給容器,並有選擇地實施限制和約束。例如,您可以限制特定容器可用的內存。