主頁 > 軟體設計 > 我和docker的初相識(二)

我和docker的初相識(二)

2021-04-02 08:20:54 軟體設計

溫故:

在上一篇文章里面我和大家分享了什么是docker?簡單的介紹了docker的概念,就是帶大家認識了一下到底docker是干什么的?再學新的知識之前我們先回顧一下:

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器或Windows 機器上,也可以實作虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面,一個完整的Docker有以下幾個部分組成:1.DockerClient客戶端 2.Docker Daemon守護行程 3.Docker Image鏡像 4.DockerContainer容器,

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器,Docker 容器通過 Docker 鏡像來創建,容器與鏡像的關系類似于面向物件編程中的物件與類,

Docker并非適合所有應用場景,Docker只能虛擬基于Linux的服務,Windows Azure 服務能夠運行Docker實體,但到目前為止Windows服務還不能被虛擬化,

Docker 鏡像(Images)

Docker 鏡像是用于創建 Docker 容器的模板,比如 Ubuntu 系統,

Docker 容器(Container)

容器是獨立運行的一個或一組應用,是鏡像運行時的物體,

Docker 客戶端(Client)

Docker 客戶端通過命令列或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護行程通信,

Docker 主機(Host)

一個物理或者虛擬的機器用于執行 Docker 守護行程和容器,

Docker Registry

Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫,

Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用,

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像,

通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用于對應該軟體的各個版本,我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟體哪個版本的鏡像,如果不給出標簽,將以 latest 作為默認標簽,

Docker Machine

Docker Machine是一個簡化Docker安裝的命令列工具,通過一個簡單的命令列即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure,

上一篇關于docker的鏈接如下:我和Docker的初相識

知新:

一、Docker解決的問題

云計算、大資料,移動技術的快速發展,加之企業業務需求的不斷變化,導致企業架構要隨時更改以適合業務需求,跟上技術更新的步伐,毫無疑問,這些重擔都將壓在企業開發人員身上;團隊之間如何高效協調,快速交付產品,快速部署應用,以及滿足企業業務需求,是開發人員亟需解決的問題,Docker技術恰好可以幫助開發人員解決這些問題,

為了解決開發人員和運維人員之間的協作關系,加快應用交付速度,越來越多的企業引入了DevOps這一概念,但是,傳統的開發程序中,開發、測驗、運維是三個獨立運作的團隊,團隊之間溝通不暢,開發運維之間沖突時有發生,導致協作效率低下,產品交付延遲, 影響了企業的業務運行,Docker技術將應用以集裝箱的方式打包交付,使應用在不同的團隊中共享,通過鏡像的方式應用可以部署于任何環境中,這樣避免了各團隊之間的協作問題的出現,成為企業實作DevOps目標的重要工具,以容器方式交付的Docker技術支持不斷地開發迭代,大大提升了產品開發和交付速度,

此外,與通過Hypervisor把底層設備虛擬化的虛擬機不同,Docker直接移植于Linux內核之上,通過運行Linux行程將底層設備虛擬隔離,這樣系統性能的損耗也要比虛擬機低的多,幾乎可以忽略,同時,Docker應用容器的啟停非常高效,可以支持大規模的分布系統的水平擴展,真正給企業開發帶來福音,

正如中國惠普云計算集成云技術首席專家劉艷凱所說的那樣:“任何一項技術的發展和它受到的追捧,都是因為它能夠解決困擾人們的問題,”Docker正是這樣的一種技術,Docker的解決問題能力雖然很強,但在企業中的實際應用卻并不多,那么是什么問題阻礙了Docker在企業中的實踐?

雖然Docker技術發展很快,但技識訓不夠成熟,對存盤的靈活的支持、網路的開銷和兼容性方面還存在限制,這是Docker沒有被企業大范圍使用的一個主要原因,另外一個原因是企業文化是否與DevOps運動一致,只有企業支持DevOps,才能更大地發揮Docker的價值,最后一個原因就是安全性問題,Docker對于Linux這一層的安全的隔離還有待改進,才能進一步得到企業的認可,

二、應用實體

還有就是前面把docker說的這么厲害,那么它都能干什么呢?有沒有具體的實體呢?有!!!在docker的網站上提到了docker的典型場景:

  • Automating the packaging and deployment of applications(使應用的打包與部署自動化)

  • Creation of lightweight, private PAAS environments(創建輕量、私密的PAAS環境)

  • Automated testing and continuous integration/deployment(實作自動化測驗和持續的集成/部署)

  • Deploying and scaling web apps, databases and backend services(部署與擴展webapp、資料庫和后臺服務)

舉個“栗子”

Sandbox

作為sandbox大概是container的最基本想法了 - 輕量級的隔離機制, 快速重建和銷毀, 占用資源少,用docker在開發者的單機環境下模擬分布式軟體部署和除錯,可謂又快又好,

同時docker提供的版本控制和image機制以及遠程image管理,可以構建類似git的分布式開發環境,可以看到用于構建多平臺image的packer以及同一作者的vagrant已經在這方面有所嘗試了,筆者會后續的blog中介紹這兩款來自同一geek的精致小巧的工具,

Docker已經不僅僅是DevOps人員手中的神器了,每一個開發者都應該學會如何使用Docker,

PaaS

dotcloud、heroku以及cloudfoundry都試圖通過container來隔離提供給用戶的runtime和service,只不過dotcloud采用docker,heroku采用LXC,cloudfoundry采用自己開發的基于cgroup的warden,基于輕量級的隔離機制提供給用戶PaaS服務是比較常見的做法 - PaaS 提供給用戶的并不是OS而是runtime+service,因此OS級別的隔離機制向用戶屏蔽的細節已經足夠,而docker的很多分析文章提到『能夠運行任何應用的“PaaS”云』只是從image的角度說明docker可以從通過構建 image實作用戶app的打包以及標準服務service image的復用,而非常見的buildpack的方式,

由于對Cloud Foundry和docker的了解,接下來談談筆者對PaaS的認識,PaaS號稱的platform一直以來都被當做一組多語言的runtime和一組常用的middleware,提供這兩樣東西

即可被認為是一個滿足需求的PaaS,然而PaaS對能部署在其上的應用要求很高:

  • 運行環境要簡單 - buildpack雖然用于解決類似問題,但仍然不是很理想

  • 要盡可能的使用service - 常用的mysql, apache倒能理解,但是類似log之類的如果也要用service就讓用戶接入PaaS平臺,讓用戶難以維護

  • 要盡可能的使用"平臺” - 單機環境構建出目標PaaS上運行的實際環境比較困難,開發測驗作業都離不開"平臺”

  • 缺少可定制性 - 可選的中間件有限,難于調優和debug,

綜上所述部署在PaaS上的應用幾乎不具有從老平臺遷移到之上的可能,新應用也難以進入引數調優這種深入的作業,個人理解還是適合快速原型的展現,和短期應用的嘗試,

然而docker確實從另一個角度(類似IaaS+orchestration tools)實作了用戶運行環境的控制和管理,然而又基于輕量級的LXC機制,確實是一個了不起的嘗試,

筆者也認為IaaS + 靈活的orchestration tools(深入到app層面的管理 如bosh)是交付用戶環境最好的方式,

國內也已經開始出現基于Docker的PaaS,2015年3月11日,云雀Alauda云平臺正式開啟內測,對外提供基于Docker的PaaS服務,

拓展

之前在上一篇文章中提到了一個名詞“cgroup”,cgroups 實作了對資源的配額和度量, cgroups 的使用非常簡單,提供類似檔案的介面,在 /cgroup目錄下新建一個檔案夾即可新建一個group,在此檔案夾中新建task檔案,并將pid寫入該檔案,即可實作對該行程的資源控制,具體的資源配置選項可以在該檔案夾中新建子 subsystem ,{子系統前綴}.{資源項} 是典型的配置方法,如memory.usage_in_bytes 就定義了該group 在subsystem memory中的一個記憶體限制選項,另外,cgroups中的 subsystem可以隨意組合,一個subsystem可以在不同的group中,也可以一個group包含多個subsystem - 也就是說一個 subsystem,

因為之前沒有介紹它是如何實作對資源的配置的,我這里補充一下:

cpu : 在cgroup中,并不能像硬體虛擬化方案一樣能夠定義CPU能力,但是能夠定義CPU輪轉的優先級,因此具有較高CPU優先級的行程會更可能得到CPU運算,

通過將引數寫入cpu.shares,即可定義改cgroup的CPU優先級 - 這里是一個相對權重,而非絕對值,當然在cpu這個subsystem中還有其他可配置項,手冊中有詳細說明,

cpusets : cpusets 定義了有幾個CPU可以被這個group使用,或者哪幾個CPU可以供這個group使用,在某些場景下,單CPU系結可以防止多核間快取切換,從而提高效率

memory : 記憶體相關的限制

blkio : block IO相關的統計和限制,byte/operation統計和限制(IOPS等),讀寫速度限制等,但是這里主要統計的都是同步IO

net_clscpuacct , devices , freezer 等其他可管理項,

局限性

Docker在本質上是一個附加系統,使用檔案系統的不同層構建一個應用是有可能的,每個組件被添加到之前已經創建的組件之上,可以比作為一個檔案系統更明智,分層架構帶來另一方面的效率提升,當你重建存在變化的Docker鏡像時,不需要重建整個Docker鏡像,只需要重建變化的部分,

可能更為重要的是,Docker旨在用于彈性計算,每個Docker實體的運營生命周期有限,實體數量根據需求增減,在一個管理適度的系統中,這些實體生而平等,不再需要時便各自消亡了,

針對Docker環境存在的不足,意味著在開始部署Docker前需要考慮如下幾個問題,首先,Docker實體是無狀態的,這意味著它們不應該承載任何交易資料,所有資料應該保存在資料庫服務器中,

其次,開發Docker實體并不像創建一臺虛擬機、添加應用然后克隆那樣簡單,為成功創建并使用Docker基礎設施,管理員需要對系統管理的各個方面有一個全面的理解,包括Linux管理、編排及配置工具比如Puppet、Chef以及Salt,這些工具生來就基于命令列以及腳本,

今天關于docker暫時就講到這里,客堆疊歇業一天!

小二,關門 上閘板,睡覺

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/271301.html

標籤:其他

上一篇:Redhat 8.2_cmake編譯原始碼安裝MySQL5.7.14

下一篇:超詳細的LNMP(12核)編譯安裝理論+實踐

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more