日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

理解Docker技術(shù)

 wiborgite 2016-07-25
什么是Docker


Docker is an open platform for developing,shipping, and running applications.


Docker是PaaS提供商dotCloud開源的基于LXC的,源代碼托管在Github上的,基于go語言開發(fā)的,遵循Appache2.0協(xié)議的容器引擎。


Docker允許打包程序并附帶它所有的依賴成標準化的單元來進行部署軟件。


Docker具有輕量、開源、安全的特點。




Docker VS VM

Docker容器在資源隔離和可配額方面與VM相似,但是不同于 VM的架構(gòu),使Docker容易更便攜和高效。



VM 架構(gòu)

一個VM包含有應(yīng)用、必要的二進制文件與庫和一個完整的操作系統(tǒng),以上所有加起可能有幾十G的大小。




Containers架構(gòu)


Containers包含應(yīng)用和它所有的依賴,但是與其它containers共享內(nèi)核。像用戶空間獨立的進程一樣運行在主機操作系統(tǒng)上。Docker容器并不是只能運行在特定的架構(gòu)上,可以運行在任何計算機、任何架構(gòu)和任何云上。




理解Docker架構(gòu)

Docker可以用來干什么

1、快速交付應(yīng)用

2、部署和擴展更容易

3、實現(xiàn)更高密度和運行更多負載


Docker重要組件

Docker:開源的容器化平臺

DockerHub:共享和管理docker容器的SaaS平臺

Docker 架構(gòu)

Docker采用C/S架構(gòu),Docker客戶端與進行創(chuàng)建、運行和分發(fā)容器的Docker守護進程進行會話。Docker客戶端和Docker守護進程可以運行在同一系統(tǒng),或者通過Docker客戶端連接到遠端Docker守護進程。Docker客戶端和Docker守護進程通過sockets或RESTful API進行通信。


Docker daemon

如上圖所示,Docker daemon運行在一臺主機上。用戶并不是直接與docker deamon進行通信,而是通過Docker client。

Docker client

docker二進制形式的Docker client是連接Docker的基本用戶接口。它接收來自客戶端的命令和與Docker daemon之間的會話。

Docker 內(nèi)部

Docker鏡像(building)

Docker鏡像是一個只讀的模版,它可能是一個帶有apache的CentOS操作系統(tǒng)。Docker鏡像是用來創(chuàng)建Docker容器的,因此,Docker鏡像是Docker的build組件。


Docker倉庫(distributing)

Docker倉庫是存儲鏡像的。是上傳或下載鏡像公共的或私有的倉庫。公共的倉庫由Docker Hub提供。因此Docker registries是Docker的distribution組件。


Docker  containers(running)

Docker容器和目錄很相似。一個Docker容器包含一個應(yīng)用程序運行的所需的東西。每個Docker容器都是使用Docker image創(chuàng)建的,可以運行、啟動、停止、移動和刪除。每個Docker容器都是一個獨立和安全的應(yīng)用平臺。因此,Docker containers是Docker的run組件


Docker使用的技術(shù)

LXC

LXC如何實現(xiàn)虛擬化

前面說過,Docker是基于LXC的操作系統(tǒng)級別的虛擬化。因此可以從以下幾個方面理解Docker是如何實現(xiàn)虛擬化的。

1、隔離型

LXC是通過container,具體是通過kerner namespace實現(xiàn)的

2、可配額

LXC是通過cgroups來控制資源的

3、移動性

   Docker利用AUFS實現(xiàn)

4、安全性

   對于LXC,用戶的進程是lxc-start進程的子進程,只是在kernel的namespace中隔離的,因此需要一些kernel的patch來保證用戶的運行環(huán)境不受來自host主機的惡意入侵。dotCloud主要利用Kernel grsecpatch解決的


命名空間(namespace)

LXC能夠?qū)崿F(xiàn)隔離型,主要是靠kernel的namespace,期中的pid、net、ipc、mnt、uts等namespace將container的進程、網(wǎng)絡(luò)、消息、文件系統(tǒng)和host隔離開的。

Pid namespace

不同用戶的進程就是通過pid namespace隔離開的。不同的namespace可以有相同的pid namespace。具有以下特征:

1、每個 namespace 中的 pid 是有自己的 pid=1 的進程(類似 /sbin/init 進程)

2、每個 namespace 中的進程只能影響自己的同一個 namespace 或子 namespace 中的進程

3、因為 /proc 包含正在運行的進程,因此在 container 中的 pseudo-filesystem 的 /proc 目錄只能看到自己 namespace 中的進程

4、因為 namespace 允許嵌套,父 namespace 可以影響子 namespace 的進程,所以子 namespace 的進程可以在父 namespace 中看到,但是具有不同的 pid

uts namespace

UTS (“UNIX Time-sharing System”)namespace 允許每個 container 擁有獨立的 hostname 和 domain name, 使其在網(wǎng)絡(luò)上可以被視作一個獨立的節(jié)點而非 Host 上的一個進程。

net namespace

網(wǎng)絡(luò)隔離是通過 net namespace 實現(xiàn)的,每個 net namespace 有獨立的network devices, IP addresses, IP routingtables, /proc/net 目錄。這樣每個 container 的網(wǎng)絡(luò)就能隔離開來。 docker 默認采用 veth 的方式將 container 中的虛擬網(wǎng)卡同 host 上的一個 docker bridge 連接在一起。


mnt namespace

類似chroot,將一個進程放到一個特定的目錄執(zhí)行。mnt namespace允許不同

namespace的進程看到的文件結(jié)構(gòu)不同,這樣每個namespace 中的進程所看到的文件目錄就被隔離開了。同chroot不同,每個namespace中的container在/proc/mounts的信息只包含所在namespace的mount point。


ipc namespace

container 中進程交互還是采用 Linux 常見的進程間交互方法 (interprocess communication - IPC), 包括常見的信號量、消息隊列和共享內(nèi)存。然而同 VM 不同,container 的進程間交互實際上還是 host 上具有相同 pid namespace 中的進程間交互,因此需要在IPC資源申請時加入 namespace 信息 - 每個 IPC 資源有一個唯一的32bit ID。


user namespace

每個 container 可以有不同的 user 和 group id, 也就是說可以以 container 內(nèi)部的用戶在 container 內(nèi)部執(zhí)行程序而非 Host 上的用戶。


有了以上 6 種 namespace 從進程、網(wǎng)絡(luò)、IPC、文件系統(tǒng)、UTS 和用戶角度的隔離,一個 container 就可以對外展現(xiàn)出一個獨立計算機的能力,并且不同 container從 OS 層面實現(xiàn)了隔離。 然而不同 namespace 之間資源還是相互競爭的,仍然需要類似 ulimit 來管理每個 container 所能使用的資源 


資源配額-Control Groups

cgroups 實現(xiàn)了對資源的配額和度量。 cgroups 的使用非常簡單,提供類似文件的接口,在 /cgroup 目錄下新建一個文件夾即可新建一個 group,在此文件夾中新建 task 文件,并將 pid 寫入該文件,即可實現(xiàn)對該進程的資源控制。具體的資源配置選項可以在該文件夾中新建子 subsystem ,{子系統(tǒng)前綴}.{資源項} 是典型的配置方法, 如 memory.usage_in_bytes 就定義了該 group 在 subsystem memory 中的一個內(nèi)存限制選項。另外,cgroups 中的 subsystem 可以隨意組合,一個 subsystem 可以在不同的 group 中,也可以一個 group 包含多個 subsystem - 也就是說一個 subsystem。

1、memory (內(nèi)存相關(guān)的限制)

2、cpu

在 cgroup 中,并不能像硬件虛擬化方案一樣能夠定義 CPU 能力,但是能夠定義 CPU 輪轉(zhuǎn)的優(yōu)先級,因此具有較高 CPU 優(yōu)先級的進程會更可能得到 CPU 運算。 通過將參數(shù)寫入 cpu.shares ,即可定義改 cgroup 的 CPU 優(yōu)先級 - 這里是一個相對權(quán)重,而非絕對值

3、blkio

block IO 相關(guān)的統(tǒng)計和限制,byte/operation 統(tǒng)計和限制 (IOPS 等),讀寫速度限制等,但是這里主要統(tǒng)計的都是同步 IO

4、devices(設(shè)備權(quán)限限制)

5、net_cls、cpuacct、freezer等其它管理項。


參考文獻:

https://docs./engine/understanding-docker/

https://www./what-docker

linuxcontainers.org

http://tiewei./cloud/Docker-Getting-Start

作者:郝朝陽

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多