共計 4100 個字符,預計需要花費 11 分鐘才能閱讀完成。
本篇內容介紹了“Docker 容器有什么技術”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
容器技術是操作系統層面的一種虛擬化技術。在 Linux 系統下,容器能夠利用 Namespaces、AppArmor、SELinux 配置、Chroot 以及 CGroups 等內核功能,交付一套類似于虛擬機的隔離性環境。經過不斷的發展,容器技術所帶來的輕量級、隔離性、標準化以及可大規模部署的特性促生了微服務和云原生應用的普及和發展。
Docker 容器
毫無疑問,Docker 是目前最具人氣且應用最為廣泛的容器技術。為什么呢?作者總結了以下主要的兩個原因。
1、和早期容器技術不同,Docker 不只是針對了應用對主機資源的共享和隔離,它更加關注應用的微服務化,大規模部署和管理自動化。微服務和云原生應用的發展極大的提高了 Docker 技術的大眾接受程度。
Docker 所采用的分層鏡像模型讓 Docker 對應用環境的封裝更加輕量級和標準化,讓鏡像更加容易的共享和分發,極大的簡化了大規模部署和運維的難度。
Docker 鏡像模型的 Copyon Write 機制和 Volume 機制合理的滿足和促進了應用的無狀態化和微服務化。
Docker 提倡一個應用(進程)一個容器,符合微服務的理念。
2、Docker 不只是一個工具包,圍繞它的是一整套生態系統。包括鏡像庫、容器管理調度、網絡、存儲、安全。這一整套生態系統讓應用采用容器技術進行大規模的封裝,部署,運維,管理成為可能。
容器的特性如何在生產環境中發揮所長,還需要其生態圈中一系列的工具、產品和方案作以支撐。以下我們會對 Docker 以及它代表的容器技術生態系統做進一步的介紹。
容器生態圈
下圖中的內容就是容器生態圈中的各個組件,我們將會從下至上逐一分層解析。
1、容器 OS
容器 OS 并不是運行容器的必要條件,容器也可以運行在通用 Linux 中。大部分的容器 OS 即為 Linux OS 的精簡版。相比大而全的 Linux OS,容器 OS 如 RancherOS、CoreOS、Redhat Atomic、Ubuntu Core、VMware Photon 具有更加輕量,占有資源更少的特征,適合于更加標準化的數據中心和 IOT 的一些領域。同時,Microsoft 也于 2015 年推出 Windows Nano Server,并將其作為 Windows2016 的安裝選項,其大小相比完整的 Windows2016 部署縮小了 90% 以上。
2、容器引擎
容器引擎負責容器應用的隔離和資源共享。它驅動和管理主機上所有的容器, 并且包括了容器卷管理、容器網絡管理、容器配置、鏡像管理以及容器日志。容器生態圈中容器引擎主要有兩個標準 OCI 和 AppC,兩個引擎 Docker 和 RKT。以下是一張對比表:
3、容器存儲
容器中一般運行是無狀態應用。對于有狀態應用,應用的數據持久化就需要容器存儲的支持。Docker 為了支持第三方存儲方案,在 1.8 版本引入 Volume Plugin 機制。Flocker 作為 Volume Plugin,需要和第三方外部存儲結合使用為容器提供持久化存儲,同時也屏蔽掉第三方存儲系統的差異,類似 Cinder 在 OpenStack 中的位置。而 Torus(項目已于 2017 年 2 月停止開發,“Developmenton Torus at CoreOS stopped as of Feb 2017”引用自 Github Torus 項目說明)和 Comet(有容云)作為獨立的分布式存儲系統,可直接為容器提供完整的數據存儲服務。
Comet 存儲系統作為國內少有的自主研發分布式系統,除了針對容器特性進行性能優化外,也提供了多級數據保護,應用感知等企業級存儲特性。
4、容器網絡
容器網絡解決容器在大規模部署后的互聯互通的問題。主要有 Docker 原生的 CNM 容器網絡模型和 CoreOS 支持的 CNI 容器網絡模型。除了 Docker 原生的 Libnetwork 網絡方案,在容器網絡生態圈中,有以下幾種商業容器網絡方案。
Flannel 是 CoreOS 為 Kubernetes 設計的基于 CNI 模型的網絡方案。它讓各個容器采用 UDP Overlay 或者 Vxlan 的方式互聯,并且讓集群中的不同節點主機創建的容器都具有全集群唯一的虛擬 IP 地址。
Weaver 和 Flannel 在很多方面比較類似。但是 Weaver 采用 Name Service 的方式來進行 IP 分配管理,不需要一個全局的 Kv Store。
Calico 是一個純三層網絡,采用 BGP 的技術來進行路由交換。由于不像其他幾個網絡模型一樣需要封包,它的性能相對最優。
5、鏡像倉庫
鏡像倉庫提供了鏡像的存儲、及 pull/push 的服務。倉庫分為公有倉庫(如 Docker Hub、Quay)和私有倉庫(如 AppHouse、Harbor)兩種形式。最大的公有倉庫是 Docker Hub,即 Docker 官方的鏡像倉庫。由于網絡訪問限制的原因,或企業用戶對數據安全性考慮的原因,也可以在企業私有數據中心建立私有鏡像倉庫,可通過部署 AppHouse(有容云) 或者 Harbor 來實現。
部署鏡像倉庫需要考慮的是鏡像存儲的安全性和系統的容錯性??煞謩e通過搭建企業級存儲系統或分布式存儲系統來保障鏡像數據的完整性,并選擇具有高可用特性的鏡像倉庫進行實施和部署。
6、容器安全
容器缺少一個像虛擬機所擁有的安全邊界。容器的快速遷移,升級和部署的特性也帶來了新的安全隱患。容器安全可分為鏡像安全和容器運行時安全。
Clair 是 CoreOS 開源的容器鏡像安全分析器,具有鏡像安全掃描和提供修復建議的功能,目前也已有多個廠家將其集成在自身的容器平臺中。
TwistLock 在鏡像掃描和容器運行時都有防護方案。Aqua 的 CSP 在 2017 年 2 月也發布了 2.0 版本,官方表示將和 Kubernetes 會有更好的結合。
AppSafe 是國內容器廠家有容云推出的容器安全產品,針對容器進行智能安全策略配置,并可根據配置策略進行實時防護。
7、容器編排
容器平臺是容器應用大規模部署,升級和運維的管理平臺。容器的編排和資源調度是容器平臺的核心功能。容器平臺也提供服務發現、運行監控、擴容縮容、負載均衡、灰度升級、故障冗余等功能。
8、運維
容器平臺運行和管理著成千上萬的容器及應用。如何能從資源(主機、容器)緯度和應用的緯度來及時監控和日志收集,也成為容器進入生產環境繞不開的話題。目前容器的監控和日志方案分為開源方案和 SaaS 服務兩種:
ELK 日志分析系統由三個開源工具 Elasticsearch+Logstash+Kibana 組成,分別對應搜索、數據采集和展示的功能,是一套較成熟的日志方案,有公司基于此方案提供日志 SaaS 服務?;谌萜鞯娜罩颈O控通常為 EFK(Elasticsearch+Fluentd+Kibana),通過占用內存較少的 Fluentd 替代 Logstash,來滿足容器平臺更大規模更密集的日志收集需求。
Heapster 是一個開源的容器集群監控和性能分析工具,原生支持 Kubernetes 和 CoreOS。一般通過 Heapster+InfluxDB+Grafana 來實現基于 Kubernetes 的監控方案,來完成數據收集、存儲及展示的功能。
Zabbix 是一個較成熟的開源分布式監控系統。在非容器場景中已被大量使用,Zabbix 由服務器端的 Server 和被監控端的 Agent 組成,通過豐富的模板可自定義需要收集的數據和展示形式。基于容器的 Zabbix 監控方案需要考慮到 Agent 的部署方式及容器的視圖展示方式。
Prometheus 是一款開源的監控工具,也是在容器平臺中使用較多的一種監控方案,相對于 Heapster,Prometheus 提供的查詢 API 功能更加強大,可以基于 Label 來實現復雜查詢,適合有一定技術能力的團隊使用。
Data Dog 提供基于容器監控的 SaaS 服務,在被監控主機上運行 Agent 即可接受 Data Dog 的監控,視圖簡單、使用方便,其 Monitors 提供可自定義閾值的告警服務,但成本較高。
CAdvisor 是針對單主機的免費且開源的容器監控工具,可用于監控容器當前的資源使用率及性能情況。CAdvisor 簡單易用,但容器平臺中需要和其他開源工具或產品結合使用,且自身無報警功能。CAdvisor 已集成在 Kubernetes 中。
Mesos 是 Apache 下的開源分布式資源管理框架?;?Mesos 之上可以運行不同的分布式計算平臺,如 Spark、Storm、Hadoop、Marathon。Mesos+Marathon 可以用來管理大規模的容器集群。
Kubernetes 是一個以 Google Borg 為原型的開源項目??蓪崿F大規模、分布式、高可用的容器集群。目前國內大部分容器廠家產品都是基于 Kubernetes 進行二次開發和方案封裝,這里暫不贅述。
Swarm 是 Docker 的原生集群工具,Swarm 使用標準的 Docker API 來管理容器集群。
容器運行時風險:容器運行時風險來自于多方面,對外提供服務的容器會收到 DDOS 攻擊,從而導致主機上的所有容器出現資源不足;容器使用不當會導致主機 Root 權限泄漏;使用者權限過高會通過容器對主機文件修改導致系統崩潰;數據卷共享導致主機上容器對數據篡改等。目前已有用戶開始關注容器安全的問題,同時也有不少廠商也推出了針對容器運行時安全的商業化方案。
鏡像安全:使用互聯網來歷不明的鏡像、或是從互聯網下載不明鏡像作為基礎鏡像、或是制作鏡像時對端口和服務開啟沒有嚴格的限制和把控、DockerFile 中惡意程序等,都將會導致生成高危漏洞的鏡像。對于鏡像的安全建議在兩階段進行控制,一是鏡像提交到鏡像倉庫時;一是進行周期的鏡像掃描;同時,對于已發布或發現的漏洞風險,進行及時更新。
“Docker 容器有什么技術”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!