一文掌握 Docker 技術(shù)體系

開始之前,先來盤一下日常的開發(fā)中什么情況會接觸到 Docker 技術(shù)。

?(1)固化配置,提高效率
(2)自動化CI/CD流程
(3)DevOps節(jié)點運行能力
(4)自動化測試
(5)應(yīng)用隔離
Node服務(wù),用來啟動Web服務(wù);
Java服務(wù),用來提供前后端分離的API接口。

(6)動態(tài)擴容/縮容
在流量低谷時進行自動縮容,可以大幅度減少服務(wù)器成本。
在峰值來臨時,通過服務(wù)器性能嗅探,可以預(yù)測到瓶頸即將來臨,自動觸發(fā)服務(wù)器擴容操作,從而保證服務(wù)器穩(wěn)定運行。
(7)節(jié)省成本,一體化管理

Docker Client:開發(fā)者可以在命令行中使用Docker相關(guān)執(zhí)行與Docker守護進程進行交互,從而管理諸如Image(鏡像)、Container(容器)、Network(網(wǎng)絡(luò))和Data Volumes(數(shù)據(jù)卷)等實體。?
Docker Server:
? Daemon:通過 Libcontainer、LXC 等容器管理工具來接收 Client 端的指令完成容器管理操作;
? Containerd:Docker 引擎中的 Containerd 組件確保了 Docker 鏡像能夠以正確的 OCI Bundle 的格式傳遞給 Runc;
? Runc:實質(zhì)上是一個輕量級的、針對 Libcontainer 進行了包裝的命令行交互工具,可以理解為一個獨立的容器運行時工具。作用只有一個——創(chuàng)建容器。
Docker Driver:
?Execdrive:存儲了容器定義的配置信息了,Libcontainer 拿到這些配置信息后,將會調(diào)用底層的 Namespace 和 Cgroup 等技術(shù)來完成容器的創(chuàng)建和管理;
? Networkdirver:主要作用是完成 Docker 容器的網(wǎng)絡(luò)環(huán)境配置,包括容器的 IP 地址、端口、防火墻策略,以及與主機的端口映射等;
? Graphdriver:主要負責(zé)對容器鏡像的管理。
Linux Kernel:
? Chroot:即 change root directory (主要用來更改 root 目錄)。在 Linux 系統(tǒng)中,系統(tǒng)默認的目錄結(jié)構(gòu)都是以 /,即以根 (root) 開始的。而在使用 Chroot 之后,系統(tǒng)的目錄結(jié)構(gòu)將以指定的位置作為 / 位置;
? Namespace:是 Linux 內(nèi)核用來隔離內(nèi)核資源的方式,目的就是實現(xiàn)輕量級虛擬化(容器)服務(wù),為 Docker 等容器技術(shù)提供了基礎(chǔ)條件;
? Cgroup:是 Linux 內(nèi)核提供的一種可以限制單個進程或者多個進程所使用資源的機制,可以對 CPU、內(nèi)存等資源實現(xiàn)精細化的控制,Docker 就使用了 Cgroup提供的資源限制能力來完成 CPU,內(nèi)存等部分的資源控制;
? Network:為 Docker 容器提供多種網(wǎng)絡(luò)解決方案;
? Capability:Linux 引入了 Capabilities 機制對 root 權(quán)限進行細粒度的控制,實現(xiàn)按需授權(quán),從而減小系統(tǒng)的安全攻擊面;?
? Seccomp:即安全計算模式,可以使用它來限制容器內(nèi)可用的操作。seccomp()系統(tǒng)調(diào)用在調(diào)用進程的seccomp狀態(tài)下運行。Docker 中使用此功能來限制應(yīng)用程序的訪問;
? Filesystem:UnionFS 通過 Linux Filesystem 為容器提供高效的管理能力。Docker 的鏡像就采用了 UnionFS 技術(shù),從而實現(xiàn)了分層的鏡像。
(2)Docker 周邊生態(tài)

服務(wù)發(fā)現(xiàn):Etcd、ZooKeeper、Consul、Eureka
負載均衡:Nginx、F5、LVS
網(wǎng)絡(luò)選型:Flannel、Calico、Weave、自研
存儲系統(tǒng):PV/PVC聲明文件、StorageClass動態(tài)供給
部署發(fā)布:Jenkins、GitLab、Registry
服務(wù)監(jiān)控:Zabbix、Nagios、cAdvisor、Prometheus
日志管理:兩種模式Daemonset集中式、Sidecar自定義,ELK
鏈路追蹤:Pinpoint、Jaeger 、SkyWalking、Zipkin
容器編排:Swarm、Kubernetes、Mesos
數(shù)據(jù)存儲:Redis、MySQL、MongoDB
彈性部署:手動擴容、自動擴容、定時擴容
集群可靠性:集群預(yù)留、資源預(yù)留、集群組件(API Server、Etcd集群方案、kube-scheduler與controller-manager)
(3)理論實踐相結(jié)合

通過 Docker 對代碼進行容器化處理;
通過 Gitlab 托管代碼;
Jenkins 監(jiān)聽 Gitlab 下的代碼,觸發(fā)自動構(gòu)建,并執(zhí)行 Kustomize 文件;
Kustomize 通過配置文件,設(shè)置了 Istio 的配置(染色識別、流量分發(fā)),并啟動 K8s 部署應(yīng)用;
最終我們通過 Rancher 來對多容器進行界面化管理;
打開瀏覽器進行訪問。?

首先,當然是環(huán)境隔離了,研發(fā)每人一個容器開發(fā),互不干擾;
其次,我們可以做很多小流量、灰度發(fā)布等事情;
最后,低成本隔離,自動化部署,一站式的流程體驗;
(1)Docker 學(xué)習(xí)體系


第一步,從具象的故事開始,開門見山、降低認知門檻。
第二步,通過“第一個Docker 項目”,幫助讀者快速上手。在讀者建立起體系概念后;
第三步,直切核心原理,圍繞Docker 架構(gòu)展開,由淺入深的講解了Docker 底層隔離機制、容器生命周期、網(wǎng)絡(luò)與通訊、存儲原理以及源碼。深入剖析,知其然而知其所以然。
第四步,趁熱打鐵,圍繞前后端項目,從全棧角度進行項目實戰(zhàn)。
第五步,從Docker容器運維角度出發(fā),進一步補充讀者知識圖譜,這也是初學(xué)者最容易忽視的內(nèi)容。
第六步,步入高級教程,該部分重點圍繞Docker 技術(shù)最佳實踐展開,提供了容器與進程、文件存儲與備份、網(wǎng)絡(luò)配置、鏡像優(yōu)化以及安全策略等內(nèi)容,示例豐富,操作性十足。
第七步,全書內(nèi)容升華。通過云原生持續(xù)交付模型、企業(yè)容器標準化及兩個實際的企業(yè)級方案,將本書所有內(nèi)容進行串聯(lián)。??
通過“蓋房子”的比方來理解Docker 是什么;
通過“別墅與膠囊旅館”的例子來闡述容器與虛擬機的概念;
通過“工廠和車間”來說明進程和線程等。



截止時間:2022年5月21日,晚 21:00
領(lǐng)書須知:提供點贊在看和轉(zhuǎn)發(fā)朋友圈截圖
注意事項:最終獲贈者請在24小時以內(nèi)添加我的微信,備注:贈書??

