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

分享

一篇把docker基礎(chǔ)說的很透徹的文章

 copy_left 2019-07-07

Docker介紹

Docker的目標(biāo)

1. 提供簡單輕量的建模方式

2. 職責(zé)的邏輯分離

3. 快速高效的開發(fā)生命周期

4. 鼓勵使用面向服務(wù)的架構(gòu)

Docker使用場景

1. 使用dockers容器開發(fā),測試,部署服務(wù)

2. 創(chuàng)建隔離的運(yùn)行環(huán)境

3. 搭建測試環(huán)境

4. 構(gòu)建多用戶的平臺即服務(wù)(PaaS)基礎(chǔ)設(shè)施

5. 提供軟件即服務(wù)(SaaS)應(yīng)用程序

6. 高性能、超大規(guī)模的宿主機(jī)部署

Docker基本組成

1. Docker Client客戶端

2. Docker Daemon守護(hù)進(jìn)程

3. Docker Image鏡像

4. Docker Container容器

5. Docker Registry倉庫

Docker容器實(shí)現(xiàn)介紹

Docker依賴的Linux內(nèi)核特性

namespace(命名空間)

編程語言中,引入命名空間的概念是為了重用變量名或者服務(wù)例程明 在不同的命名空間中使用同一個變量不會產(chǎn)生沖突。 linux系統(tǒng)引入命名空間也有類似的的作用 例如,在沒有操作級虛擬化的linux 系統(tǒng)中,用戶態(tài)進(jìn)程從1開始編號(PID) 引入操作心痛虛擬化之后,不同的容器有著不同的PID命名空間,每個容器中的進(jìn)程都可以1開始編號而不產(chǎn)生沖突

目前,linux中的命名空間有6鐘類型,分別對應(yīng)操作系統(tǒng)管理的6中資源

· 掛載點(diǎn)(mount point)CLONE_NEWNS

· 進(jìn)程(PID)CLONE_NEWPID

· 網(wǎng)絡(luò)(net)CLONE_NEWNET

· 進(jìn)程間通訊(ipc)CLONE_NEWIPC

· 主機(jī)名(uts)CLONE_NEWUTS

· 用戶(uid)CLONE_NEWUSER

控制組(Cgroup)

命名空間是從命名和編號的角度進(jìn)行隔離,而控制組則是將進(jìn)程進(jìn)行分組, 并真正的將各組進(jìn)程的計(jì)算機(jī)資源進(jìn)行限制,隔離, 控制組是一種內(nèi)核機(jī)制,他可以對進(jìn)程進(jìn)行分組,跟蹤,限制其使用的計(jì)算資源

對于每一類計(jì)算資源,控制組通過所謂的子系統(tǒng)(subsystem)來進(jìn)行控制

· cpusets: 用來分配一組cpu給指定的cgroup,該cgroup中的進(jìn)程只等被調(diào)度到該組CPU上去執(zhí)行

· blkio: 限制cgroup中的塊IO

· cpuacct: 用來統(tǒng)計(jì)cgroup中的cpu使用

· devices: 用來黑白名單的方式控制cgroup可以創(chuàng)建和使用的設(shè)備節(jié)點(diǎn)

· freezer:用來掛起指定的cgroup,或者喚醒掛起的cgroup

· hugetlb:用來限制cgroup中的hugetlb的使用

· memory:用來跟蹤限制內(nèi)存及交換分區(qū)的使用

· net_cls: 用來根據(jù)發(fā)送端的cgroup來標(biāo)記數(shù)據(jù)包,流量控制器(traffic controller)會根據(jù)這些標(biāo)記來分配優(yōu)先級

· net_prio:用來配置cgroup的網(wǎng)絡(luò)通信優(yōu)先級

· cpu:用來設(shè)置cgroup中的cpu調(diào)度參數(shù)

· perf_event:用來監(jiān)控cgroup的cpu性能

與命名空間不同,控制組并沒有增加系統(tǒng)調(diào)用,而是實(shí)現(xiàn)了一個文件系統(tǒng),通過文件及目錄操作來管理控制組

Docker與虛擬機(jī)的區(qū)別

理解虛擬機(jī)

虛擬機(jī)運(yùn)行多個相互隔離的應(yīng)用時,如下圖

一篇把docker基礎(chǔ)說的很透徹的文章

從下到上理解上圖:

· 基礎(chǔ)設(shè)施(Infrastructure)。它可以是你的個人電腦,數(shù)據(jù)中心的服務(wù)器,或者是云主機(jī)。

· 主操作系統(tǒng)(Host Operating System)。你的個人電腦之上,運(yùn)行的可能是MacOS,Windows或者某個Linux發(fā)行版。

· 虛擬機(jī)管理系統(tǒng)(Hypervisor)。利用Hypervisor,可以在主操作系統(tǒng)之上運(yùn)行多個不同的從操作系統(tǒng)。類型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。類型2的Hypervisor有VirtualBox和VMWare。

· I型:虛擬機(jī)直接運(yùn)行在系統(tǒng)硬件上,創(chuàng)建硬件全仿真實(shí)例,被稱為'裸機(jī)'型。

· II型:虛擬機(jī)運(yùn)行在傳統(tǒng)操作系統(tǒng)上,同樣創(chuàng)建的是硬件全仿真實(shí)例,被稱為'托管(宿主)'型。

· 從操作系統(tǒng)(Guest Operating System)。假設(shè)你需要運(yùn)行3個相互隔離的應(yīng)用,則需要使用Hypervisor啟動3個從操作系統(tǒng),也就是3個虛擬機(jī)。這些虛擬機(jī)都非常大,也許有700MB,這就意味著它們將占用2.1GB的磁盤空間。更糟糕的是,它們還會消耗很多CPU和內(nèi)存。

· 各種依賴。每一個從操作系統(tǒng)都需要安裝許多依賴。如果你的的應(yīng)用需要連接PostgreSQL的話,則需要安裝libpq-dev;如果你使用Ruby的話,應(yīng)該需要安裝gems;如果使用其他編程語言,比如Python或者Node.js,都會需要安裝對應(yīng)的依賴庫。

· 應(yīng)用。安裝依賴之后,就可以在各個從操作系統(tǒng)分別運(yùn)行應(yīng)用了,這樣各個應(yīng)用就是相互隔離的

理解Docker容器

Docker容器運(yùn)行多個相互隔離的應(yīng)用時,如下圖:

一篇把docker基礎(chǔ)說的很透徹的文章

從下到上理解上圖:

· 基礎(chǔ)設(shè)施(Infrastructure)

· 主操作系統(tǒng)(Host Operating System)。所有主流的Linux發(fā)行版都可以運(yùn)行Docker。對于MacOS和Windows,也有一些辦法'運(yùn)行'Docker。

· Docker守護(hù)進(jìn)程(Docker Daemon)。Docker守護(hù)進(jìn)程取代了Hypervisor,它是運(yùn)行在操作系統(tǒng)之上的后臺進(jìn)程,負(fù)責(zé)管理Docker容器。

· 各種依賴。對于Docker,應(yīng)用的所有依賴都打包在Docker鏡像中,Docker容器是基于Docker鏡像創(chuàng)建的。

· 應(yīng)用。應(yīng)用的源代碼與它的依賴都打包在Docker鏡像中,不同的應(yīng)用需要不同的Docker鏡像。不同的應(yīng)用運(yùn)行在不同的Docker容器中,它們是相互隔離的。

對比虛擬機(jī)與Docker

Docker守護(hù)進(jìn)程可以直接與主操作系統(tǒng)進(jìn)行通信,為各個Docker容器分配資源;它還可以將容器與主操作系統(tǒng)隔離,并將各個容器互相隔離。虛擬機(jī)啟動需要數(shù)分鐘,而Docker容器可以在數(shù)毫秒內(nèi)啟動。由于沒有臃腫的從操作系統(tǒng),Docker可以節(jié)省大量的磁盤空間以及其他系統(tǒng)資源。 說了這么多Docker的優(yōu)勢,大家也沒有必要完全否定虛擬機(jī)技術(shù),因?yàn)閮烧哂胁煌氖褂脠鼍?。虛擬機(jī)更擅長于徹底隔離整個運(yùn)行環(huán)境。例如,云服務(wù)提供商通常采用虛擬機(jī)技術(shù)隔離不同的用戶。而Docker通常用于隔離不同的應(yīng)用,例如前端,后端以及數(shù)據(jù)庫。

Docker Network介紹

Docker自身的4種網(wǎng)絡(luò)工作方式,和一些自定義網(wǎng)絡(luò)模式

· Bridge模式

· Host模式

· Container模式

· None模式

Host模式介紹

相當(dāng)于Vmware中的橋接模式,與宿主機(jī)在同一個網(wǎng)絡(luò),啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。

創(chuàng)建命令

1.docker run --name host --network host --rm -it busybox

container模式介紹

指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個Network Namespace,而不是和宿主機(jī)共享。新創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍等。同樣,兩個容器除了網(wǎng)絡(luò)方面,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的。兩個容器的進(jìn)程可以通過lo網(wǎng)卡設(shè)備通信。

創(chuàng)建命令

1.創(chuàng)建一個容器

2. docker run -it --name web1 httpd

3.創(chuàng)建一個container模式的容器

4.docker run --name web2 --network container:web1 --rm -it httpd

None模式介紹

該模式將容器放置在它自己的網(wǎng)絡(luò)棧中,但是并不進(jìn)行任何配置。實(shí)際上,該模式關(guān)閉了容器的網(wǎng)絡(luò)功能,

創(chuàng)建命令

1.docker run --name none -it --network none --rm httpd

Bridge模式介紹

相當(dāng)于Vmware中的Nat模式,容器使用獨(dú)立network Namespace,并連接到docker0虛擬網(wǎng)卡(默認(rèn)模式)。通過docker0網(wǎng)橋以及Iptables nat表配置與宿主機(jī)通信;bridge模式是Docker默認(rèn)的網(wǎng)絡(luò)設(shè)置,此模式會為每一個容器分配Network Namespace、設(shè)置IP等,并將一個主機(jī)上的Docker容器連接到一個虛擬網(wǎng)橋上。

創(chuàng)建命令

1.docker run --name web -it --rm httpd

Docker Images介紹

images介紹簡介

docker鏡像含有啟動容器所需要的文件系統(tǒng)及其內(nèi)容,因此其應(yīng)用于創(chuàng)建并啟動docker容器 采用分層構(gòu)建機(jī)制,最底層為bootfs,其之為rootfs

· bootfs:用于系統(tǒng)引導(dǎo)的文件系統(tǒng),包裹bootloader和kernel,容器啟動完成后會被卸載以節(jié)約內(nèi)存資源

· rootfs:位于boots之上,表現(xiàn)為docker容器的根文件系統(tǒng)

· 傳統(tǒng)模式中,系統(tǒng)啟動之時,內(nèi)核掛載rootfs會首先將其'只讀'模式,完整性自檢完成后將其重新掛在為讀寫模式

· docker中,rootfs由內(nèi)核掛載為'只讀'模式,而后通過'聯(lián)合'掛載技術(shù)額外掛載一個'可寫'層

一篇把docker基礎(chǔ)說的很透徹的文章

images layer

位于下層的鏡像稱為父鏡像(parent image),最底層的稱為基礎(chǔ)鏡像(base image) 最上層為'可讀寫'層,其下均為'只讀'層

一篇把docker基礎(chǔ)說的很透徹的文章

docker文件系統(tǒng)

advanced multi-layered unification filesystem :高級多層統(tǒng)一文件系統(tǒng)

· 用于為linux文件系統(tǒng)實(shí)現(xiàn)'聯(lián)合掛載'

· aufs是之前的Unionfs的重新實(shí)現(xiàn)

· Docker 最初使用aufs作為容器文件系統(tǒng)層,他目前仍作為存儲后端之一來支持

docker的分層鏡像,除了aufs,docker還持之btrfs,devicemapper和vfs等 在ubuntun系統(tǒng)下,docekr默認(rèn)ubuntu的aufs,而在centos7上,用的是devicemapper,比較新的docker使用overlay

多層實(shí)現(xiàn)聯(lián)合掛載使用overlay2 Storage Driver: overlay2 # 抽象的二級文件系統(tǒng),需要建構(gòu)在本地的文件系統(tǒng)之上 Backing Filesystem: xfs # 后端本地的文件系統(tǒng)

Docker Volumes介紹

Docker鏡像由多個只讀層疊加而成,啟動容器時,Docker會加載只讀鏡像層并在鏡像棧頂部添加一個讀寫層 如果運(yùn)行中的容器修改了現(xiàn)有的一個已經(jīng)存在的文件,那該文件將會從讀寫層下面的只讀層復(fù)制到讀寫層,該文件的的只讀版本仍然存在,只是已經(jīng)被讀寫層中該文件的副本所隱藏,此即'寫時復(fù)制'(COW)機(jī)制 關(guān)閉并重啟容器,其數(shù)據(jù)不受影響;但刪除Docker容器,則其更改將會全部丟失。 單純使用容器有存在如下問題:

· 存儲于聯(lián)合文件系統(tǒng)中,不易于宿主機(jī)訪問

· 容器間數(shù)據(jù)共享不方便

· 刪除容器其數(shù)據(jù)會丟失

因此引出了卷(volumes)

· 卷是容器上的一個或多個'目錄',此類目錄可繞過聯(lián)合文件系統(tǒng),與宿主機(jī)上的某目錄'綁定'

docker有兩種類型的卷

· 綁定掛載卷

· docker run –name t1 -it –rm -v /data/volumes/t1:/data busybox # 指定宿主機(jī)固定目錄

· Dokcer-managed volume

· docker run –name t1 -it -v /data busybox # /var/lib/docker/下生成一個目錄 查看掛載情況

1.docker inspect -f {{.Mounts}} t1

2.docker inspect -f {{.Mounts.Destination}} t1

多個容器的卷使用同一個主機(jī)目錄

1.docker run --name t1 --rm -it -v /data/volumes/t1/:/data busybox

2.docker run --name t2 --rm -it -v /data/volumes/t1:/data busybox

復(fù)制使用其他容器的卷

1.docker run --name t1 --rm -it -v /data/volumes/t1/:/data busybox

2.docker run --name t2 --rm -it --network container:t1 --volumes-from t1 busybox

Docker 掛載數(shù)據(jù)卷的默認(rèn)權(quán)限是讀寫,用戶也可以通過 :ro 指定為只讀

1.docker run --name t1 --rm -it -v /data/volumes/t1/:/data:ro busybox

Docker Registry介紹

啟動容器時,docekr daemon會試圖從本地獲取相關(guān)的鏡像,本地鏡像不存在是,其將叢register中下載該鏡像保存到本地 Registry用于保存docker鏡像,包括鏡像的層次結(jié)構(gòu)和元數(shù)據(jù) 用戶可自建Registry,也可使用官方的Docker Hub

Docker Registry分類

· Sponsor Registry:第三方的registry,供客戶和docker社區(qū)使用

· Mirror Registry:第三方的registry,供客戶使用

· Vendor Registry:由發(fā)布Docker鏡像的供應(yīng)商提供的registry

· Private Registry:通過設(shè)有防火墻和額外安全層的私有實(shí)體提供的registry

Registry(repository and index)

Repository:

· 由某特定的docker鏡像的所有迭代版本組成的鏡像倉庫

· 一個Registry中可以存多個repository

· repository可分為'頂級倉庫'和'用戶倉庫'

· 用戶倉庫名稱格式為'用戶名/倉庫名'

· 每個倉庫可以包含多個Tag(標(biāo)簽),每個標(biāo)簽對應(yīng)一個鏡像

Index:

· 維護(hù)用戶賬戶,鏡像的效驗(yàn)以及公共命名空間的信息

· 相當(dāng)于為Registry提供了一個完成用戶認(rèn)證等功能的檢索接口

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多