容器学习 之 容器的概念(一)
容器本身
runtime 是容器真正運行的地方,相當于Java程序里面的JVM
lxc、runc 和 rkt 是目前主流的三種容器 runtime:
- lxc 是 Linux 上老牌的容器 runtime。
- runc 是 Docker 自己開發的容器 runtime,也是現在 Docker 的默認 runtime。
- rkt 是 CoreOS 開發的容器 runtime。
- lxd 是 lxc 對應的管理工具。
- runc 的管理工具是 docker engine。docker engine 包含后臺 deamon 和 cli 兩個部分。
- rkt 的管理工具是 rkt cli。
- docker image 是 docker 容器的模板,runtime 依據 docker image 創建容器。
- dockerfile 是包含若干命令的文本文件,可以通過這些命令創建出 docker image。
- Registry 相當于一個倉庫,存放image。
容器編排
基于容器的應用一般會采用微服務架構。在這種架構下,應用被劃分為不同的組件,并以服務的形式運行在各自的容器中,通過 API 對外提供服務。為了保證應用的高可用,每個組件都可能會運行多個相同的容器。這些容器會組成集群,集群中的容器會根據業務需要被動態地創建、遷移和銷毀。
大家可以看到,這樣一個基于微服務架構的應用系統實際上是一個動態的可伸縮的系統。這對我們的部署環境提出了新的要求,我們需要有一種高效的方法來管理容器集群。而這,就是容器編排引擎要干的工作。
所謂編排(orchestration),通常包括容器管理、調度、集群定義和服務發現等。通過容器編排引擎,容器被有機的組合成微服務應用,實現業務需求。
容器編排工具有docker swarm,kubernetes,mesos等:
- docker swarm 是 Docker 開發的容器編排引擎。
- kubernetes 是 Google 領導開發的開源容器編排引擎,同時支持 Docker 和 CoreOS 容器。
- mesos 是一個通用的集群資源調度平臺,mesos 與 marathon 一起提供容器編排引擎功能。
容器管理平臺
容器管理平臺是架構在容器編排引擎之上的一個更為通用的平臺。通常容器管理平臺能夠支持多種編排引擎,抽象了編排引擎的底層實現細節,為用戶提供更方便的功能。
Rancher 和 ContainerShip 是容器管理平臺的典型代表。
基于容器的 PaaS 為微服務應用開發人員和公司提供了開發、部署和管理應用的平臺,使用戶不必關心底層基礎設施而專注于應用的開發。
Deis、Flynn 和 Dokku 都是開源容器 PaaS 的代表。
容器涉及到的技術
容器的出現使網絡拓撲變得更加動態和復雜。用戶需要專門的解決方案來管理容器與容器,容器與其他實體之間的連通性和隔離性。
docker network 是 Docker 原生的網絡解決方案。
動態變化是微服務應用的一大特點。當負載增加時,集群會自動創建新的容器;負載減小,多余的容器會被銷毀。容器也會根據 host 的資源使用情況在不同 host 中遷移,容器的 IP 和端口也會隨之發生變化。
在這種動態的環境下,必須要有一種機制讓 client 能夠知道如何訪問容器提供的服務。這就是服務發現技術要完成的工作。
etcd、consul 和 zookeeper 是服務發現的典型解決方案。
docker ps/top/stats 是 Docker 原生的命令行監控工具。除了命令行,Docker 也提供了 stats API,用戶可以通過 HTTP 請求獲取容器的狀態信息。
sysdig、cAdvisor/Heapster 和 Weave Scope 是其他開源的容器監控方案。
容器經常會在不同的 host 之間遷移,如何保證持久化數據也能夠動態遷移,是 Flocker 這類數據管理工具提供的能力。
日志為問題排查和事件管理提供了重要依據。
docker logs 是 Docker 原生的日志工具。而 logspout 對日志提供了路由功能,它可以收集不同容器的日志并轉發給其他工具進行后處理。
OpenSCAP 能夠對容器鏡像進行掃描,發現潛在的漏洞。
總結
以上是生活随笔為你收集整理的容器学习 之 容器的概念(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker部署resin应用
- 下一篇: 容器学习 之 安装docker(二)