国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Docker 官方文檔] 理解 Docker

cncoder / 2324人閱讀

摘要:將一個(gè)輕量級(jí)的容器虛擬化平臺(tái)和一組標(biāo)準(zhǔn)工作流程工具進(jìn)行集成,來(lái)幫助你方便地管理和部署應(yīng)用。主要包括哪些組件主要包括兩個(gè)組件開源的容器虛擬化平臺(tái)用于分享和管理容器的軟件即服務(wù)平臺(tái)。

【編者的話】本文來(lái)自 Docker 的官方文檔,詳細(xì)介紹了 Docker 的體系結(jié)構(gòu)、重要概念、內(nèi)部工作機(jī)理等內(nèi)容,推薦不了解 Docker 內(nèi)部原理的同學(xué)閱讀。

什么是 Docker?

Docker 是一個(gè)用于開發(fā)、交付和運(yùn)行應(yīng)用的開放平臺(tái),Docker 設(shè)計(jì)用來(lái)更快的交付你的應(yīng)用程序。Docker 可以將你的應(yīng)用程序和基礎(chǔ)設(shè)施層隔離,并且還可以將你的基礎(chǔ)設(shè)施當(dāng)作程序一樣進(jìn)行管理。Docker 可以幫助你更塊地打包你代碼、測(cè)試以及部署,并且也可以減少?gòu)木帉懘a到部署運(yùn)行代碼的周期。

Docker 將一個(gè)輕量級(jí)的容器虛擬化平臺(tái)和一組標(biāo)準(zhǔn)工作流程、工具進(jìn)行集成,來(lái)幫助你方便地管理和部署應(yīng)用。

核心是,Docker 提供了一種在安全隔離的容器中運(yùn)行近乎所有應(yīng)用的方式,這種隔離性和安全性允許你在同一主機(jī)上同時(shí)運(yùn)行多個(gè)容器,而容器的這種輕量級(jí)特性,意味著你可以節(jié)省更多的硬件資源,因?yàn)槟悴槐叵倪\(yùn)行 hypervisor 所需要的額外負(fù)載。

基于容器虛擬化的工具或者平臺(tái)可以為你提供如下幫助:

將應(yīng)用程序(包括支撐的組件)放入Docker容器中;

將這些容器打包并分發(fā)給你的團(tuán)隊(duì),以便于后續(xù)的開發(fā)和測(cè)試;

將這些容器部署到生產(chǎn)環(huán)境中,生產(chǎn)環(huán)境可以是本地的數(shù)據(jù)中心,也可以在云端。

我可以用 Docker 做些什么? 快速分發(fā)你的應(yīng)用

Docker是開發(fā)過(guò)程中較為理想的助手,它允許你在包含了你的應(yīng)用和服務(wù)的本地容器中進(jìn)行開發(fā),然后幫你完成集成和部署。

例如,你的開發(fā)人員可以在本地編寫代碼然后通過(guò)Docker與其他同事共享,當(dāng)他們完成了各自的開發(fā)任務(wù)后,可以將他們的代碼推送到一個(gè)測(cè)試的環(huán)境中進(jìn)行測(cè)試,完成測(cè)試后便可以將相應(yīng)的Docker鏡像部署到生產(chǎn)環(huán)境中。

更方便地進(jìn)行部署和調(diào)整規(guī)模

Docker這種基于容器的平臺(tái)具有高度的便攜性,它可以無(wú)縫地運(yùn)行于開發(fā)者的本地主機(jī)、數(shù)據(jù)中心其它的物理機(jī)或虛擬機(jī)、或者云端。

Docker的便攜性和其天然的輕量特性易于實(shí)現(xiàn)動(dòng)態(tài)地負(fù)載管理,你可以利用Docker快速地增減應(yīng)用和服務(wù)的部署規(guī)模,Docker的速度保證了這種規(guī)模的調(diào)整近乎實(shí)時(shí)。

更高密度的部署應(yīng)用和運(yùn)行更多的應(yīng)用

由于Docker輕量并且快速,因此相對(duì)于基于Hypervisor的虛擬機(jī)的部署方式,Docker提供了一種更可行和劃算的替代方案,這對(duì)于高密度部署環(huán)境尤其有用,例如在構(gòu)建私有云或PaaS。當(dāng)然,當(dāng)你想在有限的資源里部署更多的應(yīng)用時(shí),Docker對(duì)于中小型的部署也非常有用。

Docker 主要包括哪些組件?

Docker主要包括兩個(gè)組件:

Docker:開源的容器虛擬化平臺(tái);

Docker Hub :用于分享和管理Docker容器的軟件即服務(wù)平臺(tái)。

:Docker在Apache 2.0開源協(xié)議下進(jìn)行授權(quán)。

Docker 的架構(gòu)?

Docker是Client/Server的架構(gòu),Docker客戶端與Docker daemon進(jìn)行交互,daemon負(fù)責(zé)構(gòu)建、運(yùn)行和發(fā)布Docker容器。客戶端可以和服務(wù)端運(yùn)行在同一個(gè)系統(tǒng)中,也可以連接遠(yuǎn)程的daemon。Docker的客戶端的daemon通過(guò)RESTful API進(jìn)行socket通信。

[

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

就像上圖所示,Docker守護(hù)進(jìn)程(daemon)在主機(jī)上運(yùn)行,用戶不能直接和守護(hù)進(jìn)程打交道,但是可以通過(guò)Docker客戶端與其進(jìn)行交互。

Docker 客戶端

Docker客戶端——docker二進(jìn)制文件的功能之一——是Docker的初始用戶界面,它接收用戶的命令并反饋,并且與Docker的守護(hù)進(jìn)行交互。

Docker 內(nèi)部機(jī)制

理解Docker的內(nèi)部機(jī)制,你需要明白如下三個(gè)組件:

Docker鏡像

Docker注冊(cè)中心

Docker容器

Docker 鏡像

Docker鏡像是一個(gè)只讀的模板。例如,一個(gè)鏡像可以包含安裝了Apache Web服務(wù)應(yīng)用的Ubuntu操作系統(tǒng)。鏡像可以用來(lái)創(chuàng)建Docker容器。Docker提供了構(gòu)建新鏡像或升級(jí)原有鏡像的較為便利的方式,或者你也可以下載別人已經(jīng)創(chuàng)建好的鏡像。Docker鏡像是Docker的構(gòu)建組件。

Docker 注冊(cè)中心

Docker注冊(cè)中心用于上傳和下載鏡像,分為公共注冊(cè)中心和私有注冊(cè)中心兩種。公共注冊(cè)中心為Docker Hub,它提供了大量的現(xiàn)成鏡像,你可以構(gòu)建自己的鏡像并上傳到上面,也可以在上面下載別人構(gòu)建的鏡像。Docker注冊(cè)中心是Docker的發(fā)布組件。

Docker 容器

Docker容器就像是一個(gè)文件夾,它包含了一個(gè)應(yīng)用程序運(yùn)行所需要的所有內(nèi)容。每個(gè)容器都是基于Docker鏡像構(gòu)建。我們可以運(yùn)行、開始、停止、遷移或者是刪除Docker容器。每個(gè)容器均是一個(gè)隔離的、安全的應(yīng)用平臺(tái)。Docker容器是Docker的運(yùn)行組件。

Docker 怎樣工作的

至此,我們已經(jīng)知道了:

你可以構(gòu)建用于存儲(chǔ)你的應(yīng)用程序的鏡像;

你可以從Docker鏡像中創(chuàng)建容器用來(lái)運(yùn)行你的應(yīng)用;

你可以通過(guò)Docker Hub或者你自己的注冊(cè)中心來(lái)共享Docker鏡像。

那我們看看 Docker 是怎么將這些元素組合在一起工作的。

Docker 鏡像是如何工作的

我們已經(jīng)知道Docker鏡像實(shí)質(zhì)上是一些用于加載Docker容器的只讀模板,每個(gè)鏡像包括很多層。Docker利用union file systems將這些層組合為一個(gè)鏡像。Union file systems允許相互隔離的文件或目錄透明的疊加在一起,而呈現(xiàn)為一個(gè)統(tǒng)一的文件系統(tǒng)。

Docker如此輕量化的原因也是由于這些層的存在。當(dāng)你對(duì)一個(gè)Docker鏡像進(jìn)行修改時(shí)——例如將一個(gè)應(yīng)用升級(jí)為一個(gè)新的版本——會(huì)構(gòu)建一個(gè)新的層,因此,與虛擬機(jī)的替換整個(gè)鏡像或完全構(gòu)建的方式不同,Docker僅對(duì)相關(guān)的層進(jìn)行添加或升級(jí)。所以你僅需要發(fā)布鏡像的更新部分而不必發(fā)布整個(gè)鏡像,這種方式使得鏡像的發(fā)布更加快速和簡(jiǎn)單。

每個(gè)鏡像始于一個(gè)基礎(chǔ)鏡像,例如:ubuntu便是一個(gè)基礎(chǔ)的Ubuntu鏡像,fedora是一個(gè)基礎(chǔ)的Fedora鏡像。你也可以將你自己制作的鏡像作為基礎(chǔ)鏡像,例如你可以將一個(gè)Apache鏡像作為一個(gè)Web應(yīng)用的基礎(chǔ)鏡像。

  

注意:Docker一般從Docker Hub上獲取基礎(chǔ)鏡像。Docker鏡像從這些基礎(chǔ)鏡像中按照一系列的步驟進(jìn)行制作,我們稱這些步驟為指令,每個(gè)指令在你的鏡像中創(chuàng)建一個(gè)新的層,指令包括以下行為:

運(yùn)行一條命令;

添加一個(gè)文件或目錄;

創(chuàng)建一個(gè)環(huán)境變量;

從此鏡像中加載一個(gè)容器時(shí)需要運(yùn)行的進(jìn)程。

這些指令存儲(chǔ)在Dockerfile中,Docker在構(gòu)建鏡像過(guò)程中讀取這個(gè)Dockerfile,運(yùn)行里面的指令并返回最終的鏡像。

Docker注冊(cè)中心如何工作的

Docker注冊(cè)中心是Docker鏡像的存儲(chǔ)中心,當(dāng)你構(gòu)建完一個(gè)鏡像后便可以將其推送到Docker Hub或你自己的注冊(cè)中心。

利用Docker客戶端,你可以搜索已經(jīng)發(fā)布的鏡像,然后將其拉取到你的Docker主機(jī)上,以便于基于這些鏡像構(gòu)建容器。

Docker Hub為鏡像提供了公共的和私有的存儲(chǔ)空間。公共的存儲(chǔ)空間任何人均可以在上面搜索和下載,私有存儲(chǔ)空間僅對(duì)你本人或你的團(tuán)隊(duì)開放搜索以及拉取下載,你可以通過(guò)這里注冊(cè)一個(gè)私有的存儲(chǔ)空間。

容器是如何工作的

一個(gè)容器包括操作系統(tǒng)、用戶添加的文件以及相關(guān)的元數(shù)據(jù)。我們知道,每個(gè)容器都是從鏡像中構(gòu)建出來(lái)的,這個(gè)鏡像告訴Docker容器用到什么資源、當(dāng)容器加載時(shí)啟動(dòng)哪個(gè)進(jìn)程以及容器啟動(dòng)時(shí)的其它配置。Docker鏡像是只讀的,當(dāng)Docker從一個(gè)鏡像運(yùn)行一個(gè)容器時(shí),它會(huì)在鏡像的上層添加一個(gè)用于運(yùn)行應(yīng)用的可讀寫的層(利用的就是上文提到的union file system)。

運(yùn)行一個(gè)容器時(shí)到底發(fā)生了什么

不管是通過(guò)Docker命令還是API調(diào)用的方式,Docker客戶端都會(huì)通知Docker的守護(hù)進(jìn)程運(yùn)行一個(gè)容器。

sudo docker run -i -t ubuntu /bin/bash

我們來(lái)看一下這個(gè)命令,Docker客戶端利用docker命令并結(jié)合run選項(xiàng)來(lái)啟動(dòng)一個(gè)容器,一個(gè)最小配置的Docker客戶端運(yùn)行一個(gè)容器需要告訴Docker守護(hù)進(jìn)程以下事項(xiàng):

此容器基于什么鏡像來(lái)構(gòu)建,此處是ubuntu——一個(gè)基礎(chǔ)的Ubuntu鏡像;

需要在容器中運(yùn)行的命令,此處是/bin/bash——在容器中啟動(dòng)一個(gè)Bash Shell。

那么我們看看運(yùn)行上述命令時(shí)到底發(fā)生了什么?

按照順序,Docker依次干了如下事情:

拉取ubuntu鏡像 : Docker首先檢查一下ubuntu鏡像在本地服務(wù)器上存不存在,如果不存在,則自動(dòng)從Docker Hub中下載,如果已經(jīng)存在則直接利用這個(gè)鏡像來(lái)啟動(dòng)一個(gè)新的容器。

創(chuàng)建一個(gè)新的容器: 如果Docker本地服務(wù)器中存在這個(gè)鏡像,那么就據(jù)此來(lái)啟動(dòng)一個(gè)容器。

分配一個(gè)文件每戶并且將其掛載到一個(gè)可讀寫的層: 容器在此文件系統(tǒng)中被創(chuàng)建,并且將其作為一個(gè)可讀寫的層添加到鏡像中。

分配一個(gè)網(wǎng)絡(luò)或橋接的接口: 創(chuàng)建一個(gè)網(wǎng)絡(luò)的接口以便于Docker容器能夠訪問(wèn)本機(jī)。

設(shè)置一個(gè)IP地址: 為此容器從地址池中找到并綁定一個(gè)IP地址。

執(zhí)行指定的進(jìn)程: 運(yùn)行你的應(yīng)用程序,然后;

獲取并提供應(yīng)用程序的輸出: 連接標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤接口,這樣你便可以觀察到程序運(yùn)行的一切。

現(xiàn)在你已經(jīng)運(yùn)行了一個(gè)容器,這樣你便可以管理你的容器、與應(yīng)用程序進(jìn)行交互,當(dāng)運(yùn)行結(jié)束是停止或者刪除你的容器。

底層技術(shù)問(wèn)題

Docker是用Go語(yǔ)言實(shí)現(xiàn)的,用到了一些Linux內(nèi)核的特性實(shí)現(xiàn)上述功能。

命名空間(namespaces)

Docker在為容器提供一個(gè)隔離的工作空間時(shí),用到了命名空間的技術(shù),當(dāng)你運(yùn)行一個(gè)容器時(shí),Docker會(huì)為此容器創(chuàng)建一組命名空間。

這樣便可以提供一個(gè)隔離的層:每個(gè)容器運(yùn)行在自己的命名空間中,而外部不能訪問(wèn)這個(gè)層。

Docker用到的一些命名空間有:

pid命名空間: 用于隔離進(jìn)程(PID:Process ID);

net命名空間: 用于管理網(wǎng)絡(luò);

ipc命名空間: 用于訪問(wèn)IPC資源(IPC:InterProcess Communication);

mnt命名空間: 用于管理掛載點(diǎn)(MNT:Mount);

uts命名空間: 用于隔離內(nèi)核和版本標(biāo)識(shí)(UTS:Unix Timesharing System)。

控制組(Control Groups)

Docker還用到了另外一項(xiàng)技術(shù)叫cgroups或者叫控制組(control groups)。實(shí)現(xiàn)程序運(yùn)行環(huán)境的隔離的關(guān)鍵在于使這些程序只用到它們需要的資源,這就能夠保證這些容器是主機(jī)服務(wù)環(huán)境小社會(huì)中的好市民。控制組允許Docker在不同的容器之間共享硬件資源,需要時(shí)添加一些限制和約束,例如限制一個(gè)容器最大訪問(wèn)內(nèi)存量。

統(tǒng)一文件系統(tǒng)(Union file systems)

統(tǒng)一文件系統(tǒng)或者說(shuō)是UnionFS,是創(chuàng)建層的時(shí)候用到的文件系統(tǒng),使文件系統(tǒng)非常輕量和快速。Docker使用統(tǒng)一文件系統(tǒng)為容器構(gòu)建blocks,Docker可以使用幾種不同的文件系統(tǒng):AUFS、btrfs、vfs以及DeviceMapper。

容器格式

Docker容器將這些組件合并在一起,我們稱之為容器格式,容器的缺省格式稱為libcontainer。Docker還支持利用LXC技術(shù)的傳統(tǒng)Linux容器格式,未來(lái)還將會(huì)支持其它的容器格式,例如:與BSD Jails或者Solaris Zones實(shí)現(xiàn)整合。

下一步

安裝Docker,請(qǐng)參照 installation section

Docker用戶指南,請(qǐng)參照 深入學(xué)習(xí)Docker


原文鏈接:Understanding Docker(翻譯:deerlux 校對(duì):李穎杰)
譯者介紹:deerlux@163.com,現(xiàn)就職于一家軍工科研機(jī)構(gòu),深度的技術(shù)控、Linux控、python控。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/26379.html

相關(guān)文章

  • docker入門概覽

    摘要:至于很具體的操作指令,比如怎么安裝,怎么和來(lái)跑一個(gè)簡(jiǎn)單的,請(qǐng)參考官方文檔部分的或者也可參考文末的一些參考資料參考資料官方文檔入門教程系列簡(jiǎn)明教程使用演示中文系列資源從入門到實(shí)踐作者更多文章個(gè)人網(wǎng)站 docker入門概覽 標(biāo)簽 : docker [TOC] 本文對(duì)docker進(jìn)行大致介紹,包括概述,安裝,簡(jiǎn)單使用,架構(gòu),基本原理等方面 寫在前面 本文是自己學(xué)習(xí)docker的一個(gè)記錄...

    yy13818512006 評(píng)論0 收藏0
  • 30 分鐘快速入門 Docker 教程

    摘要:分鐘快速入門教程一歡迎來(lái)到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。 30 分鐘快速入門 Docker 教程 一、歡迎來(lái)到 Docker 世界 1. Docker 與虛擬化 在沒有 Docker 的時(shí)代,我們會(huì)使用硬件虛擬化(虛擬機(jī))以提供隔離。這里,虛擬機(jī)通過(guò)在操作系...

    LucasTwilight 評(píng)論0 收藏0
  • 30 分鐘快速入門 Docker 教程

    摘要:分鐘快速入門教程一歡迎來(lái)到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 歡迎關(guān)注公眾號(hào):「服務(wù)端思維」。一群同頻者,一起成長(zhǎng),一起精進(jìn),打破認(rèn)知的局限性。 30 分鐘快速入門 Docker 教程...

    Binguner 評(píng)論0 收藏0
  • 30 分鐘快速入門 Docker 教程

    摘要:分鐘快速入門教程一歡迎來(lái)到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 歡迎關(guān)注公眾號(hào):「服務(wù)端思維」。一群同頻者,一起成長(zhǎng),一起精進(jìn),打破認(rèn)知的局限性。 30 分鐘快速入門 Docker 教程...

    yexiaobai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

cncoder

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<