1. 程式人生 > >初識Docker,概念-架構-相關術語

初識Docker,概念-架構-相關術語

介紹Docker概念與平臺架構,相關術語

  1. Docker的歷史

誕生

Docker 是Docker.Inc 公司開源的一個基於 LXC技術之上構建的Container容器引擎,基於Google 公司推出的 Go語言實現的雲開源專案,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘專案。專案後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,專案程式碼在 GitHub 上進行維護。而且居然只有 1W 行就完成了這些功能。如果想嘗試一下的話可以看官方介紹了。

Docker的主要目標是"Build,Ship and Run Any App,Anywhere",也就是通過對應用元件的封裝、分發、部署、執行等生命週期的管理,使使用者的APP(可以是一個WEB應用或者資料庫應用等等)及其執行環境能夠做到"一次封裝,到處執行"

歷史發展

Docker 自開源後受到廣泛的關注和討論,以至於 dotCloud 公司後來都改名為 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支援 Docker;Google 也在其 PaaS 產品中廣泛應用。

Docker 專案的目標是實現輕量級的作業系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作 Docker 的容器就像操作一個快速輕量級的虛擬機器一樣簡單。

Docker在2014年6月召開DockerConf 2014技術大會吸引了IBM、Google、RedHat等業界知名公司的關注和技術支援,無論是從 GitHub 上的程式碼活躍度,還是Redhat宣佈在

RHEL7中正式支援Docker, 都給業界一個訊號,這是一項創新型的技術解決方案。 就連 Google 公司的 Compute Engine 也支援 docker 在其之上執行, 國內"BAT"先鋒企業百度Baidu App Engine(BAE)平臺也是以Docker作為其PaaS雲基礎

Docker 的創始人 Solomon Hykes 在2017年大會上介紹,對於即將推出的 Docker 平臺新版本,開發人員將能夠在其工作站中的 Kubernetes 上直接進行生產應用程式的構建與測試。而運營人員則能夠從 Docker 企業版中獲得各種幫助,具體包括多租戶安全保護,映象掃描以及基於角色的訪問控制等,同時配合 Kubernetes 或者 Swarm 在生產環境中實現應用執行。

Docker 0.9 版本開始使用 libcontainer 替代 lxc

2017/3/3 Docker版本從1.13.*直接跳入17.03

CEEE在各發行版的支援情況為:

Platform

Docker EE

Docker CE

Debian

yes

Red Hat Enterprise Linux

yes

SUSE Linux Enterprise Server

yes

Microsoft Windows Server 2016

yes

Microsoft Windows 10

yes

macOS

yes

Microsoft Azure

yes

yes

Amazon Web Services

yes

yes

17.03與1.13版本說明

20172月份,Docker公司釋出了全新的Docker版本:V1.13.0。從201731號開始,Docker的版本命名發生如下變化:

專案

說明

版本格式

YY.MM

stable版本

每個季度發行

edge版本

每個月發行

同時將Docker分成CEEE 2個版本CE版本即社群版(免費,支援週期三個月),EE即企業版,強調安全,付費使用。

Docker版本從1.13.*直接跳入17.03,該版本的意思是17年3月。同時,還聲明瞭Docker以後會以CE(Community Edition)和EE(Enterprise Edition)的形式釋出。其中,CE版本每個月釋出一次,也就是說,隨後的版本就是17.03、17.04、17.05等,而EE的版本是沒三個月釋出一次,對應的就是17.03、17.06等。對於釋出的每個EE版本,Docker官網都會提供一年的技術支援。

Docker 會每月釋出一個 edge 版本(17.03, 17.04, 17.05...),每三個月釋出一個 stable 版本(17.03, 17.06, 17.09...),企業版(EE)  stable 版本號保持一致,但每個版本提供一年維護。

Docker  Linux 發行版的軟體倉庫也從以前的https://apt.dockerproject.orghttps://yum.dockerproject.org變更為目前的

當前的CE版本為17.03.0,基於V1.13.0。主要修復錯誤,沒有重大功能增加,API亦保持不變。此版本17.03的發行說明,請參考:ttps://github.com/docker/docker/releases

  1. 為什麼選擇Docker

快速交付應用程式

  • 我們希望你的開發環境能夠更好的提高你的工作效率。Docker容器能夠幫助開發人員、系統管理員、QA和版本控制工程師在一個生產環節中一起協同工作。我們制定了一套容器標準,而這套容器標準能夠使系統管理員更改容器的時候,程式設計師不需要關心容器的變化,而更專注自己的應用程式程式碼。從而隔離開了開發和管理,簡化了開發和部署的成本。
  • 我們使應用的構建方式更加簡單,可以快速的迭代你的應用,並且可以視覺化的來檢視應用的細微更改。這能夠幫助組織裡邊的成員來更好的理解一個應用從構建到執行的過程。
  • Docker 是一個輕量級的容器,所以它的速度是非常快的,而容器的啟動時間只需要一秒鐘,從而大大的減少了開發、測試和部署的時間。

輕鬆部署和擴充套件

  • Docker 容器可以執行在大多數的環境中,你可以在桌面環境、物理主機、虛擬主機再到資料中,私有或者公有云中部署。
  • 因為 Docker 可以從多平臺下執行。你可以很容器的遷移你的應用程式。如果需要,你可以非常簡單的將應用程式從測試環境遷移到雲,或者從雲遷移到測試環境。
  • Docker 是一個輕量級的容器,因此它可以在很短的時間內啟動和關閉。當你需要的時候,你可以啟動多個容器引擎,並且在不需要使用他們的時候,可以將他們全部關閉。

Get higher density and run more workloads

Docker的容器本身不需要額外建立虛擬機器管理系統,因此你可以啟動多套Docker容器,這樣就可以充分發揮主機伺服器的物理資源,也可以降低因為採購伺服器licenses而帶來的額外成本。

快速構建 輕鬆管理

因為Docker上述輕便,快速的特性。可以使您的應用達到快速迭代的目的。每次小的變更,馬上就可以看到效果。而不用將若干個小變更積攢到一定程度再變更。每次變更一小部分其實是一種非常安全的方式。

好的案例說明為啥要用"容器"的好處

專業的叫法是應用容器(Application Container)。那麼應用容器長什麼樣子呢,一個做好的應用容器長得就好像一個裝好了一組特定應用的虛擬機器一樣。比如我現在想用MySQL那我就找個裝好MySQL的容器,執行起來,那麼我就可以使用 MySQL了。

那麼我直接裝個 MySQL不就好了,何必還需要這個容器這麼詭異的概念?話是這麼說,可是你要真裝MySQL的話可能要再裝一堆依賴庫,根據你的作業系統平臺和版本進行設定,有時候還要從原始碼編譯報出一堆莫名其妙的錯誤,可不是這麼好裝。而且萬一你機器掛了,所有的東西都要重新來,可能還要把配置在重新弄一遍。但是有了容器,你就相當於有了一個可以執行起來的虛擬機器,只要你能執行容器,MySQL的配置就全省了。而且一旦你想換臺機器,直接把這個容器端起來,再放到另一個機器就好了。硬體,作業系統,執行環境什麼的都不需要考慮了。

在公司中的一個很大的用途就是可以保證線下的開發環境、測試環境和線上的生產環境一致。當年在 Baidu 經常碰到這樣的事情,開發把東西做好了給測試去測,一般會給一坨程式碼和一個介紹上線步驟的上線單。結果程式碼在測試機跑不起來,開發就跑來跑去看問題,一會兒啊這個配置檔案忘了提交了,一會兒啊這個上線命令寫錯了。找到了一個 bug 提上去,開發一看,啊我怎麼又忘了把這個命令寫在上線單上了。類似的事情在上線的時候還會發生,變成啊你這個軟體的版本和我機器上的不一樣…… Amazon 的時候,由於一個開發直接擔任上述三個職位,而且有一套自動化部署的機制所以問題會少一點,但是上線的時候大家還是膽戰心驚。

若果利用容器的話,那麼開發直接在容器裡開發,提測的時候把整個容器給測試,測好了把改動改在容器裡再上線就好了。通過容器,整個開發、測試和生產環境可以保持高度的一致。

此外容器也和VM一樣具有著一定的隔離性,各個容器之間的資料和記憶體空間相互隔離,可以保證一定的安全性。

  1. Docker&虛擬機器VM的不同

二者框架上的不同處

下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在作業系統層面上實現虛擬化,直接複用本地主機的作業系統,而傳統方式則是在硬體層面實現。直觀上來講vm多了一層guest OS,同時Hypervisor會對硬體資源進行虛擬化,docker直接使用硬體資源,所以資源利用率相對docker低也是比較容易理解的

官網的說法是:虛擬機器上的應用不僅包含了應用本身、必要的依賴(二進位制和庫包等),還包括整個作業系統;而docker應用不同,共享系統核心,僅僅包含應用本身和依賴。

虛擬化的核心是對資源進行抽象,目標往往是為了在同一個機器上執行多個系統或應用,從而提高系統資源的利用率。虛擬化分為很多型別,比如常見的硬體輔助虛擬化(VMware workstation、 KVM等)。Docker所代表的容器虛擬化技術屬於作業系統級虛擬化:核心通過建立多個虛擬的作業系統例項(核心和庫)來隔離不同的程序。

傳統虛擬化和容器技術結構比較:傳統虛擬化技術是在硬體層面實現虛擬化,增加了系統呼叫鏈路的環節,有效能損耗;容器虛擬化技術以共享Kernel的方式實現,幾乎沒有效能損耗。

二者效能、安全等方面的對比

為啥隔離性VM強:VM各個系統用各自核心,而Docker共用一個。

虛擬機器的概念

先來理解一下虛擬機器概念,廣義來說,虛擬機器是一種模擬系統,即在軟體層面上通過模擬硬體的輸入和輸出,讓虛擬機器的作業系統得以執行在沒有物理硬體的環境中(也就是宿主機的作業系統上),其中能夠模擬出硬體輸入輸出,讓虛擬機器的作業系統可以啟動起來的程式,被叫做hypervisor。用一張圖來說明這個關係就是:

  • 在這張圖中:
  • 物理機被稱為宿主機
  • 虛擬機器也被稱為guest OS
  • 而被hypervisor虛擬出來的硬體被稱為虛擬硬體

比如,舉一個大家都很熟悉的例子,在編寫android程式時,除錯和測試執行都可以在X86架構的桌上型電腦或筆記本進行,這就是一個典型的虛擬機器例子,在這之中:

  • 宿主機就是桌上型電腦或筆記本
  • 虛擬機器就是虛擬出來的android
  • 而模擬android的軟體就是android box

當然android模擬機一個大問題就是:啟動速度非常慢,最長可達10分鐘或以上,這是因為單純模擬硬體的輸入輸出,效率是很差的,所以這樣的虛擬機器如果真部署在伺服器上,速度是感人的。

這個時候,就有電腦科學家提出了非常偷懶的想法:假如我們不模擬硬體輸入輸出,只是做下真實硬體輸入輸出的搬運工,那麼虛擬機器的指令執行速度,就可以和宿主機一致了。當然這前提是宿主機的硬體架構必須和虛擬硬體架構一致。比如,

我們可以在linux的桌上型電腦上輕鬆模擬windows,而且這個windows的執行速度基本上和原生裝一個windows速度差不多,因為windows也能被直接安裝在這臺臺式機上。

這個思路對於在windows系統中執行android系統不管用,因為android系統的執行硬體一般是手機(arm系統,可以理解為不同的硬體架構體系和cpu指令集),所以android模擬機還是一樣的慢。

容器的概念

一般來說,虛擬機器都會有自己的kernel,自己的硬體,這樣虛擬機器啟動的時候需要先做開機自檢,啟動kernel,啟動使用者程序等一系列行為,雖然現在電腦執行速度挺快,但是這一系列檢查做下來,也要幾十秒,也就是虛擬機器需要幾十秒來啟動。

重新來理解虛擬機器的概念,電腦科學家發現其實我們建立虛擬機器也不一定需要模擬硬體的輸入和輸出,假如宿主機和虛擬機器他們的kernel是一致的,就不用做硬體輸入輸出的搬運工了,只需要做kernel輸入輸出的搬運工即可,為了有別於硬體層面的虛擬機器,這種虛擬機器被命名為 作業系統層虛擬化:Operating-system-level virtualization也被叫做容器

讓我們來回顧虛擬機器的概念,在虛擬機器的系統中,虛擬機器認為自己有獨立的檔案系統,程序系統,記憶體系統,等等一系列,所以為了讓容器接近虛擬機器,也需要有獨立的檔案系統,程序系統,記憶體系統,等等一系列,為了達成這一目的,主機系統採用的辦法是:只要隔離容器不讓它看到主機的檔案系統,程序系統,記憶體系統,等等一系列,那麼容器系統就是一個接近虛擬機器的玩意了。

詳細對比二者的例子

首先,大家需要明確一點,Docker容器不是虛擬機器。Docker不停地給大家宣傳,"虛擬機器需要數分鐘啟動,而Docker容器只需要50毫秒"。

然而,Docker容器並非虛擬機器,我們不妨來比較一下它們。

理解虛擬機器

使用虛擬機器執行多個相互隔離的應用時,如下圖:

從下到上理解上圖:

  • 基礎設施(Infrastructure)。它可以是你的個人電腦,資料中心的伺服器,或者是雲主機
  • 虛擬機器管理系統(Hypervisor)。利用Hypervisor,可以在主作業系統之上執行多個不同的從作業系統。型別1的Hypervisor有支援MacOS的HyperKit,支援Windows的Hyper-V、Xen以及KVM。型別2的Hypervisor有VirtualBox和VMWare workstation。
  • 客戶機作業系統(Guest Operating System)。假設你需要執行3個相互隔離的應用,則需要使用Hypervisor啟動3個客戶機作業系統,也就是3個虛擬機器。這些虛擬機器都非常大,也許有700MB,這就意味著它們將佔用2.1GB的磁碟空間。更糟糕的是,它們還會消耗很多CPU和記憶體。
  • 各種依賴。每一個客戶機作業系統都需要安裝許多依賴。如果你的應用需要連線PostgreSQL的話,則需要安裝libpq-dev;如果你使用Ruby的話,應該需要安裝gems;如果使用其他程式語言,比如Python或者Node.js,都會需要安裝對應的依賴庫。
  • 應用。安裝依賴之後,就可以在各個客戶機作業系統分別執行應用了,這樣各個應用就是相互隔離的。

理解Docker容器

使用Docker容器執行多個相互隔離的應用時,如下圖:

不難發現,相比於虛擬機器Docker要簡潔很多。因為我們不需要執行一個臃腫的客戶機作業系統了。

從下到上理解上圖:

  • 基礎設施(Infrastructure)
  • 主作業系統(Host Operating System)。所有主流的Linux發行版都可以執行Docker。對於MacOS和Windows,也有一些辦法"執行"Docker。
  • Docker守護程序(Docker Daemon)。Docker守護程序取代了Hypervisor,它是執行在作業系統之上的後臺程序,負責管理Docker容器。
  • 各種依賴。對於Docker,應用的所有依賴都打包在Docker映象中,Docker容器是基於Docker映象建立的。
  • 應用。應用的原始碼與它的依賴都打包在Docker映象中,不同的應用需要不同的Docker映象。不同的應用執行在不同的Docker容器中,它們是相互隔離的。

對比虛擬機器與Docker

Docker守護程序可以直接與主作業系統進行通訊,為各個Docker容器分配資源;它還可以將容器與主作業系統隔離,並將各個容器互相隔離。虛擬機器啟動需要數分鐘,而Docker容器可以在數毫秒內啟動。由於沒有臃腫的從作業系統,Docker可以節省大量的磁碟空間以及其他系統資源。

說了這麼多Docker的優勢,大家也沒有必要完全否定虛擬機器技術,因為兩者有不同的使用場景。虛擬機器更擅長於徹底隔離整個執行環境。例如,雲服務提供商通常採用虛擬機器技術隔離不同的使用者。而Docker通常用於隔離不同的應用,例如前端後端以及資料庫

伺服器虛擬化 vs Docker

伺服器好比運輸碼頭:擁有場地和各種裝置(伺服器硬體資源)

伺服器虛擬化好比作碼頭上的倉庫:擁有獨立的空間堆放各種貨物或集裝箱

(倉庫之間完全獨立,獨立的應用系統和作業系統)

Docker比作集裝箱:各種貨物的打包

(將各種應用程式和他們所依賴的執行環境打包成標準的容器,容器之間隔離)

Docker有著小巧、遷移部署快速、執行高效等特點,但隔離性比伺服器虛擬化差:不同的集裝箱屬於不同的運單(Docker上執行不同的應用例項),相互獨立(隔離)。但由同一個庫管人員管理(主機作業系統核心),因此通過庫管人員可以看到所有集裝箱的相關資訊(因為共享作業系統核心,因此相關資訊會共享)。

伺服器虛擬化就好比在碼頭上(物理主機及虛擬化層),建立了多個獨立的"小碼頭"—倉庫(虛擬機器)。其擁有完全獨立(隔離)的空間,屬於不同的客戶(虛擬機器所有者)。每個倉庫有各自的庫管人員(當前虛擬機器的作業系統核心),無法管理其它倉庫。不存在資訊共享的情況

因此,我們需要根據不同的應用場景和需求採用不同的方式使用Docker技術或使用伺服器虛擬化技術。例如一個典型的Docker應用場景是當主機上的Docker例項屬於單一使用者的情況下,在保證安全的同時可以充分發揮Docker的技術優勢。對於隔離要求較高的環境如混合使用者環境,就可以使用伺服器虛擬化技術。正則科技提供了豐富的Docker應用例項,滿足您的各種應用需求,並且支援在已經安裝了自在(Isvara)伺服器虛擬化軟體的主機上同時使用伺服器虛擬化技術和Docker技術提供不同技術場景。

4.Docker的基本相關概念

docker定義

Docker是一款針對程式開發人員和系統管理員來開發、部署、執行應用的一款虛擬化平臺。一款輕量級容器管理引擎.

Docker可以讓你像使用集裝箱一樣快速的組合成應用、遮蔽程式碼層面的差異,會盡可能的縮短從程式碼測試到產品部署的時間。

Docker系統有兩個程式:Docker Daemon和docker client.

Docker Platform (docker平臺)

Docker Engine+docker hub =docker platform

Docker engine引擎

docker引擎是一個c/s結構的應用, 是一個基於虛擬化技術的輕量級並且功能強大的開源容器引擎管理工具。它可以將不同的 work flow 組合起來構建成你的應用。主要元件見下圖:

Server是一個常駐程序

REST API 實現了client和server間的互動協議

CLI 實現容器和映象的管理,為使用者提供統一的操作介面

Docker引擎的基礎是Linux自帶的容器(Linux Containers,LXC)技術。IBM對於容器技術的準確描述如下:

容器有效的將單個作業系統管理的資源劃分到孤立的組中,以便更好的在孤立的組之間平衡有衝突的資源使用需求。與虛擬化相比,這樣既不需要指令級模擬,也不需要即時編譯。容器可以在核心CPU本地執行指令,而不需要任何專門的解釋機制。此外,也避免了準虛擬化(paravirtualization)和系統呼叫替換中的複雜性。

我們可以將容器理解為一種沙盒。每個容器內執行一個應用,不同的容器相互隔離,容器之間可以建立通訊機制。容器的建立和停止都十分快速(秒級),容器自身對資源的需求十分有限,遠比虛擬機器本身佔用的資源少。

Docker hub

Docker Hub: 用於分享、管理 Docker 容器的 Docker SaaS 平臺,可以分享和管理你的images映象的一個 Saas 服務平臺–https://hub.docker.com/

Docker Hub是一個由Docker公司負責維護的公共註冊中心,它包含了超過15,000個可用來下載和構建容器的映象,並且還提供認證、工作組結構、工作流工具(比如webhooks)、構建觸發器以及私有工具(比如私有倉庫可用於儲存你並不想公開分享的映象)。

Docker hub的介面

Docker Daemon(docker服務端)

Docker 架構中常駐後臺的系統程序,是一個服務程序,負責接收處理使用者傳送的請求和管理所有的 Docker 容器,所謂的執行 Docker 即代表執行 Docker Daemon

Docker Client(docker客戶端)

Docker 架構中使用者與 Docker Daemon 建立通訊的客戶端。扮演著docker服務端的遠端控制器,可以用來控制docker的服務端程序。大部分情況下,docker服務端和客戶端執行在一臺機器上。

Docker的內部構建

要理解 Docker 內部構建,需要理解以下三種部件:

Docker 映象 - Docker images

Docker 倉庫 - Docker registeries

Docker 容器 - Docker containers

Docker images- docker映象

Docker映象類似於虛擬機器映象,是一個只讀模板,並且包含了檔案系統。一個只讀層被稱為映象,一個映象是永久不會變的。

一個映象可以只包含一個作業系統環境(比如SUSE映象),也可以安裝了使用者程式及其執行環境(比如eBackup映象)。映象其實就是一個檔案,任何使用者程式都可以成為映象的一部分。

映象=作業系統+軟體執行環境+使用者程式

由於 Docker 使用一個統一檔案系統,Docker 程序認為整個檔案系統是以讀寫方式掛載的。但是所有的變更都發生頂層的可寫層,而下層的原始的只讀映象檔案並未變化。由於映象不可寫,所以映象是無狀態的。

映象可以用來建立 Docker 容器,一個映象可以建立很多容器。Docker 提供了一個很簡單的機制來建立映象或者更新現有的映象,使用者甚至可以直接從其他人那裡下載一個已經做好的映象來直接使用。

映象(Image)就是一堆只讀層(read-only layer)的統一視角,也許這個定義有些難以理解,看看下面這張圖

右邊我們看到了多個只讀層,它們重疊在一起。除了最下面一層,其它層都會有一個指標指向下一層。這些層是Docker內部的實現細節,並且能夠在docker宿主機的檔案系統上訪問到。統一檔案系統(Union File System)技術能夠將不同的層整合成一個檔案系統,為這些層提供了一個統一的視角,這樣就隱藏了多層的存在,在使用者的角度看來,只存在一個檔案系統。

Images與container的關係

Image是建立container的基礎。映象是 Docker 應用的靜態表示,是應用的交付件,映象中包含了應用執行所需的所有依賴,包括應用程式碼、應用依賴庫、應用執行時和作業系統。

Dockerfile 是一個描述檔案,描述了產生 Docker 映象的過程,詳細文件可以參見官方文件 Dockerfile reference。一個應用 Docker 化的第一步就是通過 Dockerfile 產生應用映象。

如上圖,一個layer就是一個image,多個image又可以打包成一個image。

Image類似一個單鏈表系統,每個image包含一個指向parent image的指標,沒有parent image的image是baseimage(image的指標靠sqlite資料庫來儲存)。

最上面的一層(不屬於image)是可寫的,上面的內容依賴於下面的內容,如果要修改下面的內容,先將下面的內容複製到上面再進行修改。

關於image的一些命令:

docker pull     //從網路上下載映象

docker images  //檢視本地主機已經存在的映象

父映象

每一個映象都可能依賴於由一個或多個下層的組成的另一個映象。我們有時說,下層那個映象是上層映象的父映象。

基礎映象

一個沒有任何父映象的映象,謂之基礎映象。

映象ID

所有映象都是通過一個 64 位十六進位制字串(內部是一個 256 bit 的值)來標識的。為簡化使用,前 12 個字元可以組成一個短ID,可以在命令列中使用。短ID還是有一定的碰撞機率,所以伺服器總是返回長ID

Docker倉庫-Docker registries

Docker 倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫。同樣的,Docker 倉庫也有公有和私有的概念。公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的映象集合供使用。這些映象可以是自己建立,或者在別人的映象基礎上建立。Docker 倉庫是 Docker 的分發部分。

倉庫(Repository)是集中存放映象檔案的場所。有時候會把倉庫和倉庫註冊伺服器(Registry)混為一談,並不嚴格區分。實際上,倉庫註冊伺服器上往往存放著多個倉庫,每個倉庫中又包含了多個映象,每個映象有不同的標籤(tag)。

倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的映象供使用者下載。國內的公開倉庫包括時速雲、網易雲等,可以提供大陸使用者更穩定快速的訪問。當然,使用者也可以在本地網路內建立一個私有倉庫。

當用戶建立了自己的映象之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個映象時候,只需要從倉庫上 pull 下來就可以了。

Docker 倉庫的概念跟 Git 類似,註冊伺服器可以理解為 GitHub 這樣的託管服務。

Docker容器- Docker containers

容器是映象執行時的動態表示,如果把映象想象為一個 Class 那麼容器就是這個 Class 的一個例項。

Docker 容器和資料夾很類似,一個Docker容器包含了所有的某個應用執行所需要的環境。每一個 Docker 容器都是從 Docker 映象建立的。Docker 容器可以執行、開始、停止、移動和刪除。每一個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是 Docker 的執行部分。

Docker 利用容器(Container)來執行應用。容器是從映象建立的執行例項。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境(包括root使用者許可權、程序空間、使用者空間和網路空間等)和執行在其中的應用程式。

容器的定義和映象幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。

一個執行態容器被定義為一個可讀寫的統一檔案系統加上隔離的程序空間和包含其中的程序。下面這張圖片展示了一個執行中的容器。

正是檔案系統隔離技術使得Docker成為了一個非常有潛力的虛擬化技術。一個容器中的程序可能會對檔案進行修改、刪除、建立,這些改變都將作用於可讀寫層。

5.Docker相關的附屬工具與概念

Docker Machine

Docker 官方提供的部署工具。幫助使用者快速在執行環境中建立虛擬機器服務節點,在虛擬機器中安裝並配置 Docker,最終幫助使用者配置 Docker Client,使得 Docker Client 有能力與虛擬機器中的 Docker 建立通訊。

Docker Compose

Docker 官方提供的容器編配工具。隨著服務的複雜度增長,容器管理過程的配置項將變得冗長,Compose 可有效幫助使用者緩解甚至解決容器部署的複雜性。

Docker Compose Docker 容器進行編排的工具,定義和執行多容器的應用,可以一條命令啟動多個容器。

使用Compose 基本上分為三步:

  1. Dockerfile 定義應用的執行環境
  2. docker-compose.yml 定義組成應用的各服務
  3. docker-compose up 啟動整個應用

    Docker 加速器

    使用 Docker 的時候,需要經常從官方獲取映象,但是由於顯而易見的網路原因,拉取映象的過程非常耗時,嚴重影響使用 Docker 的體驗。因此 DaoCloud 或阿里雲等公司推出 Docker 加速器解決這個難題,通過智慧路由和快取機制,極大提升了國內網路訪問 Docker Hub 的速度,目前已經擁有了廣泛的使用者群體,並得到了 Docker 官方的大力推薦。如果您是在國內的網路環境使用 Docker,那麼 Docker 加速器一定能幫到您。目前已知的DaoCloud 或阿里雲加速器服務是永久免費的,並且無流量限制,請放心使用

    docker toolbox

    不推薦使用,建議使用新的 docker for mac 及 docker for windows 以在這兩種平臺執行 docker

    6.容器技術

    現代化IT管理中,容器技術已經成為一種潮流。越來越多的企業選擇容器技術來分發業務,越來越多的資料中心採納容器技術來管理資源。而阿里巴巴作為全球業務場景最複雜的網際網路服務提供商,其背後自然少不了容器技術的支撐。從現場釋出可知,如今這項技術已經覆蓋阿里內部絕大部分事業部,在阿里的資料中心執行有數十萬個Pouch容器,大規模支撐內部離線線上業務的混部,且100%線上業務已通過Pouch容器化對外服務

    lxc;

    第一個完整意義的容器管理技術,可方便的建立、啟動及停止容器,也可以同過lxc操作容器中的應用或檢視容器執行狀態。

    libcontainer:

    Docker開發的原生的容器管理技術來代替lxc

    Pouch

    2017年10月12日,在以"飛天·智慧"為主題的2017杭州雲棲大會上,阿里內部自研容器技術Pouch宣佈開源。在阿里的資料中心執行有數十萬個Pouch容器,大規模支撐內部離線線上業務的混部,且100%線上業務已通過Pouch容器化對外服務。

    7.Docker的架構

    Docker 架構模式

    Docker使用C/S(客戶端/服務端)架構,Client 通過介面與Server程序通訊實現容器的構建,執行和釋出。client和server可以執行在同一臺叢集,也可以通過跨主機實現遠端通訊。

    Docker daemon會處理複雜繁重的任務,例如建立、執行、釋出你的 Docker 容器。Docker 客戶端和daemon可以執行在同一個系統上,當然你也可以使用 Docker 客戶端去連線一個遠端的 Docker daemon程。Docker 客戶端和daemon之間通過 socket 或者 RESTful API 進行通訊。

    Docker構造:Client-Server

    8.Docker技術原理

    技術原理

     
    execdriver
    :儲存了容器定義的配置資訊。

    相關推薦

    初識Docker概念-架構-相關術語

    介紹Docker概念與平臺架構,相關術語Docker的歷史 誕生 Docker 是Docker.Inc 公司開源的一個基於 LXC技術之上構建的Container容器引擎,基於Google 公司推出的 Go語言實現的雲開源專案,誕生於 2013 年初,最初是 dotCloud

    照明概念相關術語

    道路 彌補 部分 can flux lamp 最大 term 利用 主要概念1.1 光通量 Luminous Flux 單位時間內輻射能量的大小。單位:流明 lm。公式如下: 這個公式較直觀,在波長380nm~780nm內做光視效率(η/nm)乘上光譜輻

    圖的基本概念相關術語

    1、圖(Graph)是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合。 2、對於圖的定義,我們需要明確幾個注意的地方: (1)線性表中我們把資料元素叫元素,樹中叫結點,在圖中資料元素我們則稱之為頂點(V

    Docker 介紹以及其相關術語

    ### 什麼是Docker > Docker 是一個開源引擎,可以輕鬆的為任何應用建立一個輕量級,可移植的的容器,開發者在筆記本上編譯通過的容器可以批量在生產環境部署,包括虛擬機器、bare metal、OpenStack 叢集和其他的基礎應用平臺。 ### Docke

    QT樣式表styleSheet(qss)幫助文件的使用相關術語概念

    學習樣式表,最好的參考資料莫過於QT自帶的幫助文件,隨便開啟一個QT工程,點選->幫助->索引->styleSheet,即可開啟QT所有關於樣式表的幫助資訊,如下圖所示: 比如,我們想查查下拉列表控制元件QComboBox支援哪些樣式屬性,可以點選上圖

    容器與Docker簡介(三)Docker相關術語——微軟微服務電子書翻譯系列

    進程 數據 public 圖像 over 表示 -c ice ner 本節列出了在更加深入Docker之前應該熟悉的術語和定義。 有關詳細的定義,請參閱Docker提供的術語表。 容器鏡像(Container image):具有創建容器所需要的所有依賴和信息的包。 鏡像

    射頻信號發生器的使用以及相關中心頻率載波調制波術語解釋

    直觀 rms http 中心 20M 基礎 解調 目的 如果   今日嘗試使用射頻信號發生器驗證電平轉換芯片。然只能輸出交流耦合波形,遂無法實現驗證。心灰之下,嘗試了信號發生器的各項功能,現將相關心得記錄如下。   射頻信號發生器只能輸出交流耦合信號,舉例,設定輸出1V的信

    軟件測試相關術語概念

    系統性能 不能 ssi 系統應用 單元 時間 問題 所有 需求規格說明書 單元測試:單元測試是對軟件中的基本組成單位進行的測試,如一個模塊、一個過程等。其目的是檢驗軟件基本組成單位的正確性。單元測試的主要方法有控制流測試、數據流測試、排錯測試、分域測試等。 集成測試:集成測

    關於gcclibc等相關概念的理解

    轉自 http://blog.163.com/[email protected]/blog/static/100473339201107101517380/ 1、gcc(gnu collect compiler)是一組編譯工具的總稱。它主要完成的工作任務是“預處理”和“編譯”,

    變量提升函數提升概念相關

    解析 function rip 地方 先後 函數 函數定義 運行 fin 之前總是對變量提升,函數提升一知半解,隨著時間的推移,理解的越來越深刻,接下來就寫一寫,有不對的地方請大家指出來。 1) 變量提升 1. 通過var定義(聲明)的變量, 在定義語句之前就可以訪問到2.

    初識Docker學習-Docker的基本命令和概念

    docker的基本命令-拉取、執行、停止、刪除映象,檢視日誌等操作,以及對應的概念說明 docker的基本操作 獲取映象 執行 啟動一個容器 容器內的一些操作 停止執行中的容器 檢視執行的日

    AKKA文件(java)——術語概念

    本章我們試圖建立一個通用的術語列表,用來定義有關併發和分散式系統的堅實的基礎,而這也是akka的目標。請注意,在這些術語當中許多並沒有一致的定義。我們簡單的尋求在akka文件範圍內使用的工作定義。 併發與並行 併發與並行是相關的概念,但是也有很多細節上的差異。併發意味著兩個或更多的任務正在取

    微服務架構下的資料一致性:概念相關模式

    從2014年開始,微服務逐漸進入大家的實現,被認為是下一代實現資訊化的有效手段。設計到系統,其中繞不開的就是資料一致性,從本地事務,到後來的分散式事務,都能夠有效的保證資料一致性。但是在微服務架構中,這兩種方式都不是最好的選擇。1. 使用本地事務和分散式事務保證一致性在傳統的

    O2OB2BC2C等相關概念介紹

    概念介紹: O2O:線上到線下(online to offline),代表:美團外賣,糯米網, B2B:企業對企業的電子商務模式(business to business),代表:阿里巴巴集團網 C2C:消費者對消費者的電子商務模式(Consumer To Consumer),代表:

    萬臺伺服器單臺只裝一個Docker世界級瀏覽器IT架構之旅_Kubernetes中文社群

    網頁瀏覽器間的戰爭,可以從上世紀末90年代的網景Netscape與微軟IE說起,當時兩大公司角逐誰才是瀏覽器霸主,而在局勢已定的20多年後,每每有人得知CloudMosa創辦人沈修平仍要繼續投入瀏覽器開發時,「他們都跟我說:『老兄,War is over。』」他笑著說,雖然現階段局勢看似趨於穩

    docker學習(三)—— docker映象概念映象的基本操作

    docker參考手冊:https://docs.docker.com/engine/reference/commandline/dockerd/ daemon.json參考:https://docs.docker.com/engine/reference/commandline/docker

    Docker打破單一架構、平臺限制便捷移植即刻擁有!

    出品丨Docker公司(ID:docker-cn)編譯丨小東每週一、三、五晚6點10分  與您不

    二、併發相關術語概念

    學習內容 併發和並行 同步和非同步 臨界區 阻塞和非阻塞 死鎖、飢餓、活鎖 Amdahl定律、Gustafson定律、Sun-Ni 定律 併發和並行 解釋一: 並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔發生。 解釋二:

    初識Tensorflow基本概念及簡單示例

    一、前言 目前,深度學習已經廣泛應用於各個領域,比如影象識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無鉅細的講到,所有的示例都將使用 P

    【Android】關於pixdipdipsp等相關概念

     1.px (pixels)畫素 – 是畫素,就是螢幕上實際的畫素點單位。 dip或dp (device independent pixels)裝置獨立畫素, 與裝置螢幕有關。 sp (scaled pixels — best for text size):類似dp, 主要處理字型的大小。 dpi(dot