CloudMan每天5分鐘玩轉容器技術筆記。
0 序言
為什么要選擇容器?
傳統的應用部署方式:通過操作系統的包管理器來安裝應用。這樣做的劣勢在于:應用的運行、配置、庫、生存周期和機器的操作系統糾纏在一起。
新的方式:部署基于操作系統級別虛擬化的容器進行虛擬化而非通過硬件來虛擬化。容器之間相互隔離,有自己的文件系統,無法看到彼此間的進程。
容器:平臺級別的技術。比如,Docker,CoreOS的rkt。
容器使軟件具備了超強的可移植能力。“集裝箱”。容器無需修改便可運行在幾乎所有的平臺上--虛擬機、物理機、公有云、私有云。
1 容器生態系統
1.1 容器核心技術
能夠讓容器(container)在host上運行起來的那些技術。
1. 容器規范:保證容器生態的健康發展,保證不同容器之間能夠兼容。
Open Container Initiative(OCI)組織,目的是制定開放的容器規范,runtime spec和image format spec。
2. 容器runtime:容器只有在runtime中才能運行。runtime需要跟操作系統kernel緊密協作,為容器提供運行環境。lxc、runc和rkt是目前主流的三種容器runtime。
Docker現在默認的runtime是runc。
3. 容器管理工具:對內與runtime交互,對外為用戶提供interface。
Docker engine包含后臺daemon和cli兩個部分。
4. 容器定義工具:允許用戶定義容器的內容和屬性,這樣容器能夠被保存,共享和重建。
Docker:docker image,dockerfile。
Docker image(鏡像)是docker容器的模板,runtime 依據 docker image創建容器。
Dockerfile是包含若干命令的文本文件,可以通過這些命令創建出docker image。
5. Registry:容器通過image創建,需要有一個倉庫來統一存放image。Docker Hub和Quay.io。
6. 容器OS:專門運行容器的操作系統。
1.2 容器平臺技術
能夠容器作為集群在分布式環境中運行。
1. 容器編排引擎:?基于容器的應用一般采用微服務架構。在這種架構下,應用被劃為不同的組件,并以服務的形式運行在各自的容器中,通過API對外提供服務。為了保證應用的高可用,每個組件都可能會運行多個相同的容器。這些容器會組成集群,集群中的容器會根據業務需要被動態地創建、遷移和銷毀。
編排(orchestration):?通常包括容器管理、調度、集群定義和服務發現等。通過容器編排引擎,容器被有機的組合成微服務應用,實現業務需求。
docker swarm: Docker開發的容器編排引擎。
kubernetes: Google開發的開元容器編排引擎,同時支持Docker和CoreOS容器。
mesos: 一個通用的集群資源調度平臺,mesos和marathon一起提供容器編排引擎功能。
2. 容器管理平臺: 架構在容器編排引擎之上的一個更為通用的平臺。Rancher,ContainerShip。
3. 基于容器的PaaS: Deis,Flynn,Dokku。
1.3 容器支持技術
用于支持基于容器的基礎設施。
1. 容器網絡
2. 服務發現
3. 監控
4. 數據管理
5. 日志管理
6. 安全性
2 容器架構
3 鏡像
下載鏡像 docker pull xx
查看鏡像信息 docker images
運行鏡像 docker run
Dockerfile是鏡像的描述文件,定義了如何構建Docker鏡像。
base鏡像:
1. 不依賴其他鏡像從scratch構建;
2. 其他鏡像可以之為基礎進行擴展。
所以能稱作 base 鏡像的通常都是各種 Linux 發行版的 Docker 鏡像比如 Ubuntu, Debian, CentOS 等。
Docker鏡像采用分層結構,優勢:共享資源。
常用操作
$ sudo service docker start
$ docker images ? ? ?//列出鏡像
過濾器參數 --filter,簡寫 - f
當我們運行一個容器的時候(如果不使用卷的話),我們做的任何文件修改都會被記錄于容器存儲層里。而 Docker 提供了一個 docker commit 命令,可以將容器的存儲層保存下來成為鏡像。換句話說,就是在原有鏡像的基礎上,再疊加上容器的存儲層,并構成新的鏡像。以后我們運行這個新鏡像的時候,就會擁有原有容器最后的文件變化。
微服務架構:是否會成為開發應用系統的主流?容器是這種架構的基石。