中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

做視頻網(wǎng)站違法么色盲

做視頻網(wǎng)站違法么,色盲,福田蒙派克優(yōu)缺點(diǎn),西安優(yōu)化排名推廣大家好,這里是七七,今天起開(kāi)起我們的Docker技術(shù)篇,本文是介紹Docker的,不介紹如何使用和安裝Docker,只是單純的介紹Docker。 目錄 一、歷史 二、Docker究竟是什么 三、Docker的結(jié)構(gòu)與特性 1、Docker倉(cāng)庫(kù) 2、Dock…

大家好,這里是七七,今天起開(kāi)起我們的Docker技術(shù)篇,本文是介紹Docker的,不介紹如何使用和安裝Docker,只是單純的介紹Docker。

目錄

一、歷史

二、Docker究竟是什么

三、Docker的結(jié)構(gòu)與特性

1、Docker倉(cāng)庫(kù)

2、Docker自身程序

3、工作流程

4、Docker化應(yīng)用的存在形式

5、Docker對(duì)變更的管理

四、為什么使用Docker

1、從代碼管理說(shuō)起

2、當(dāng)前的優(yōu)化策略

3、Github版的應(yīng)用部署解決方案

4、Docker應(yīng)用場(chǎng)景

場(chǎng)景一

場(chǎng)景二

5、Docker可以解決哪些痛點(diǎn)

1、開(kāi)發(fā)人員

2、測(cè)試人員

3、運(yùn)維人員

6、Docker的學(xué)習(xí)成本


一、歷史

關(guān)于Docker的歷史,這里我們簡(jiǎn)要介紹它是dotCloud公司內(nèi)部使用的Container容器技術(shù),拿出來(lái)開(kāi)源后廣受好評(píng)。其老板隨著Docker的知名度越來(lái)越高,直接將公司名字改為Docker股份有限公司,重心轉(zhuǎn)向Docker。

之后,Docker發(fā)布了V1.0版,許多大公司均表示加入Docker陣營(yíng)。在那之后,Docker又完成了幾輪融資。如今,在業(yè)界影響力很大。

二、Docker究竟是什么

?按照官方的說(shuō)法,Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎。但這個(gè)說(shuō)法太抽象,不容易理解。

那就從最熟悉的事物說(shuō)起,但凡從事過(guò)計(jì)算機(jī)相關(guān)行業(yè)的人,對(duì)Java、Android和Github都很熟悉

先說(shuō)Java,在Java之前的編程語(yǔ)言,像C/C++,是嚴(yán)重依賴(lài)平臺(tái)的,在不同平臺(tái)下,需要重新編譯才能運(yùn)行。Java的一個(gè)非常重要的特性就是與平臺(tái)無(wú)關(guān)性,而使用Java虛擬機(jī)是實(shí)現(xiàn)這一特性的關(guān)鍵。Java虛擬機(jī)屏蔽了與具體平臺(tái)相關(guān)的信息,使得Java編譯程序只需生成可以在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。Java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。

軟件部署也依賴(lài)平臺(tái),Ubuntu的軟件包在Centos下可能就運(yùn)行不起來(lái)。和Java虛擬機(jī)類(lèi)似,Docker使用容器引擎解決平臺(tái)依賴(lài)問(wèn)題,它在每臺(tái)宿主機(jī)上都啟動(dòng)一個(gè)Docker的守護(hù)進(jìn)程,守護(hù)進(jìn)程屏蔽了與具體平臺(tái)相關(guān)的信息,對(duì)上層應(yīng)用提供統(tǒng)一的借口。這樣,Docker化的應(yīng)用,就可以在多個(gè)平臺(tái)下運(yùn)行,Docker會(huì)針對(duì)不同的平臺(tái),解析給不同平臺(tái)下的執(zhí)行驅(qū)動(dòng)、存儲(chǔ)驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)去執(zhí)行。

Java曾提出"寫(xiě)一次,在哪兒都運(yùn)行"的口號(hào),而Docker則提出了"搭建、設(shè)置一次,在哪兒都能運(yùn)行"。雖然,Java和Docker是為了解決不同領(lǐng)域的問(wèn)題,但在平臺(tái)移植方面卻面臨相同的問(wèn)題,使用的解決方式也相似。

提起Android,我們會(huì)想到它是一個(gè)開(kāi)源的手機(jī)操作系統(tǒng),也是一個(gè)生態(tài)圈,其App以apk形式打包、發(fā)布,可以運(yùn)行在任何廠商的Android手機(jī)上。它還有一個(gè)官方的安卓市場(chǎng),提供各種各樣的App,我們需要某個(gè)App時(shí),就從安卓市場(chǎng)上搜索下載,手機(jī)開(kāi)發(fā)者也可以編寫(xiě)一些App,發(fā)布到安卓市場(chǎng),給別人使用,Android也允許在第三方的安卓市場(chǎng)上下載或上傳應(yīng)用。

如果把軟件部署的應(yīng)用看作Android的App,Docker簡(jiǎn)直和Android一模一樣。Docker是一個(gè)開(kāi)源的容器引擎,也有自己的生態(tài)圈,它的應(yīng)用以鏡像(image)的形式發(fā)布,可以運(yùn)行在任何裝有Docker引擎的操作系統(tǒng)上。它有一個(gè)官方的鏡像倉(cāng)庫(kù),提供各種各樣的應(yīng)用,當(dāng)需要某個(gè)應(yīng)用時(shí),就從官方的倉(cāng)庫(kù)搜索并下載,個(gè)人開(kāi)發(fā)者也可以提交鏡像到官方倉(cāng)庫(kù),分享給別人使用。Docker也允許使用第三方的鏡像倉(cāng)庫(kù)。

最后,再談Github。它主要用來(lái)做版本控制,不僅可以比較兩個(gè)版本的差異,還可以基于某些歷史版本創(chuàng)建新的分支。

使用Docker后,軟件部署的應(yīng)用也可以具備類(lèi)似Github的版本控制功能,對(duì)應(yīng)用做一些修改,提交新版本,運(yùn)行環(huán)境可以在多個(gè)版本間快速切換,自由選擇使用哪個(gè)版本對(duì)外提供服務(wù)。

通過(guò)和Java、Android、Github的對(duì)比,大家對(duì)Docker應(yīng)該有了比較直觀的認(rèn)識(shí),Docker用來(lái)管理軟件部署的應(yīng)用,Docker把應(yīng)用打包成一個(gè)鏡像,鏡像帶有版本控制功能,應(yīng)用的每次修改迭代就對(duì)應(yīng)鏡像的一個(gè)版本,制作好的鏡像可以發(fā)布到鏡像倉(cāng)庫(kù);也可以直接從鏡像倉(cāng)庫(kù)下載別人制作好的應(yīng)用,不做任何修改,即可運(yùn)行起來(lái)。

三、Docker的結(jié)構(gòu)與特性

了解完Docker,我們?cè)賮?lái)看看它的結(jié)構(gòu)。

如果把Docker當(dāng)做一個(gè)獨(dú)立的軟件來(lái)看,它就是用Golang寫(xiě)的開(kāi)源程序,采用C/S架構(gòu),包含Docker Sever和Docker Client,源代碼在Github上。

如果把Docker看做一個(gè)生態(tài)的話,它主要由兩部分組成:Docker倉(cāng)庫(kù)和Docker自身程序。拿iPhone做類(lèi)比的話,Docker倉(cāng)庫(kù)相當(dāng)于Appstore,Docker相當(dāng)于iOS手機(jī)操作系統(tǒng)。

1、Docker倉(cāng)庫(kù)

Docker倉(cāng)庫(kù)snag有非常多的應(yīng)用,既有各大公司打包的應(yīng)用,也有大量個(gè)人開(kāi)發(fā)者提供的應(yīng)用。如redis,ubuntu,mysql等等。

2、Docker自身程序

Docker本身是一個(gè)單機(jī)版的程序,運(yùn)行在Linux上,屬于用戶態(tài)程序,通過(guò)一些接口和內(nèi)核交互。

由于Docker需要用到Linux的cgroups、namespace等特性,所以目前只能運(yùn)行在Linux下。

Docker是一個(gè)C/S架構(gòu),它的Docker Daemon作為Server端,在宿主機(jī)上以后臺(tái)守護(hù)進(jìn)程的形式運(yùn)行。Docker Client使用比較靈活、既可以在本機(jī)上以bin命令的形式(如Docker info、Docker start)發(fā)送指令,也可以在遠(yuǎn)端通過(guò)RESTful API的形式發(fā)送指令;Docker的Server端接受指令并把指令分解為一系列任務(wù)去執(zhí)行。

3、工作流程

在了解了Docker的構(gòu)成后,再來(lái)看看如何使用Docker。

首先,在Linux上安裝Docker軟件包,并啟動(dòng)Docker Daemon守護(hù)進(jìn)程。然后,就可以通過(guò)Docker Client端發(fā)送各種指令,Docker Daemon守護(hù)進(jìn)程執(zhí)行完命令,向Client端返回結(jié)果。

假如要啟動(dòng)一個(gè)新的Docker應(yīng)用app1,其工作流程大致如下:

  1. DockerClient向Daemon發(fā)送啟動(dòng)app1指令
  2. 因?yàn)槲覀兊腖inux只裝有Docker軟件包,沒(méi)有app1相關(guān)軟件或服務(wù),Docker Daemon就發(fā)請(qǐng)求給Docker的官方倉(cāng)庫(kù),在倉(cāng)庫(kù)中搜索app1
  3. 如果找到app1,就把它下載到我們的服務(wù)器上
  4. Docker Daemon啟動(dòng)app1
  5. 把啟動(dòng)app1應(yīng)用是否成功的結(jié)果返回給Docker Client

65a4f9382b004d0e8a7aaaf7ff40863c.png

Docker的其他操作,比如停止或刪除Docker應(yīng)用和啟動(dòng)的流程差不多,這里就不一一介紹了。

4、Docker化應(yīng)用的存在形式

我們知道,經(jīng)過(guò)這么多年,Linux下的軟件不計(jì)其數(shù),安裝方式也千奇百怪。有些依賴(lài)特定操作系統(tǒng),有些依賴(lài)特定內(nèi)核版本,有些依賴(lài)一些第三方軟件和共享庫(kù)等。

既然軟件安裝部署方式?jīng)]有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),那么Docker的官方倉(cāng)庫(kù)該如何做呢?總不能一個(gè)軟件寫(xiě)一個(gè)安裝說(shuō)明書(shū)吧。

換個(gè)角度想一下,用戶的需求只是把軟件運(yùn)行起來(lái),至于怎么安裝軟件、軟件運(yùn)行在什么操作系統(tǒng)下用戶不提關(guān)心。那么,就把軟件和它依賴(lài)的環(huán)境(包括操作系統(tǒng)和共享庫(kù)等)、依賴(lài)的配置文件打包在一起,以虛擬機(jī)的形式放到官方倉(cāng)庫(kù),供大家使用。只要有虛擬機(jī)的運(yùn)行環(huán)境,就可以不做任何修改把軟件運(yùn)行起來(lái)。只要有一個(gè)人把軟件安裝和配置好,交到官方倉(cāng)庫(kù),其他人直接下載就可以用。以這種方式解決了軟件安裝部署方式?jīng)]有一個(gè)統(tǒng)一標(biāo)準(zhǔn)的問(wèn)題。

但這種軟件部署方式卻存在很多問(wèn)題,一般一個(gè)軟件包大小也就幾兆到幾十兆不等,但一個(gè)操作系統(tǒng)卻有好幾個(gè)G。如果每個(gè)軟件都帶上它依賴(lài)的操作系統(tǒng),那么每個(gè)軟件都有好幾個(gè)G,很難受。

Docker為了解決這個(gè)問(wèn)題,引入了分層的概念。把一個(gè)應(yīng)用分為任意多個(gè)層,比如操作系統(tǒng)是第一層,依賴(lài)的庫(kù)和第三方軟件是第二層,應(yīng)用的軟件包和配置文件是第三層。如果這兩個(gè)應(yīng)用有相同的層,就可以共享這些層。

例如A應(yīng)用和B應(yīng)用的操作系統(tǒng)是一樣的,它們就可以共享這一層,安裝應(yīng)用A時(shí)需要下載操作系統(tǒng)層,anzhuangyingyB就不用下載操作系統(tǒng)層,只需要下載它的依賴(lài)包和自身的軟件包。因?yàn)橹髁鞯牟僮飨到y(tǒng)也就那么幾個(gè),最差情況下,也就把常用的操作系統(tǒng)都安裝一遍,然后,包含操作系統(tǒng)的軟件包就和傳統(tǒng)的軟件包一樣大小了。

但這種共享層存在沖突問(wèn)題,比如,應(yīng)用A需要修改操作系統(tǒng)的某個(gè)配置,應(yīng)用B不需要修改。如何解決這個(gè)沖突?我們規(guī)定層次是有優(yōu)先級(jí)的,上層和下層有相同的文件和配置時(shí),上層覆蓋下層,數(shù)據(jù)以上層的數(shù)據(jù)為準(zhǔn)。我們給每個(gè)應(yīng)用一個(gè)優(yōu)先級(jí)最高的空白層,如果需要修改下層的文件,就把這個(gè)文件拷貝到這個(gè)優(yōu)先級(jí)最高的空白層進(jìn)行修改,保證下層的文件不做任何改變。這樣,從應(yīng)用A的角度來(lái)看,文件已經(jīng)修改成功了,而從應(yīng)用B的角度來(lái)看文件沒(méi)有發(fā)生任何改變。

Docker的分層和寫(xiě)時(shí)拷貝策略,解決了包含操作系統(tǒng)的應(yīng)用程序比較大的問(wèn)題。但我們只大,主流的虛擬機(jī)(KVM、Xen、VMWare等)一般比較笨重,除了虛擬機(jī)本身運(yùn)行要消耗大量的系統(tǒng)資源外,啟動(dòng)一個(gè)虛擬機(jī)也要花費(fèi)數(shù)分鐘,如何把虛擬機(jī)做到輕量化呢?

以O(shè)penVZ、VSever、LXC為代表的容器類(lèi)虛擬機(jī),是一種內(nèi)核虛擬化技術(shù),與宿主機(jī)運(yùn)行在相同的Linux內(nèi)核,不需要指令級(jí)模擬,性能消耗非常小,是非常輕量級(jí)的虛擬化容器,虛擬容器的系統(tǒng)資源消耗和一個(gè)普通的進(jìn)程差不多。Docker就是使用LXC(后來(lái)又推出libcontainer)讓虛擬機(jī)變得輕量化。

在Docker的官方倉(cāng)庫(kù)里,只需要它有完整的文件系統(tǒng)和程序包,沒(méi)有動(dòng)態(tài)生成新文件的需求;當(dāng)把它下載到宿主機(jī)上運(yùn)行對(duì)外提供服務(wù)時(shí),有可能修改文件(比如輸出新日志到日志文件中),需要有空白層用于寫(xiě)時(shí)拷貝。Docker把這兩種不同狀態(tài)做了區(qū)分,分別叫做鏡像(image)和容器(container)

在倉(cāng)庫(kù)中的應(yīng)用都是以鏡像的形式存在的,把鏡像從Docker倉(cāng)庫(kù)中下拉到本機(jī),以這個(gè)鏡像為模版啟動(dòng)應(yīng)用,就叫容器。

在Docker的世界里,鏡像和容器是其兩大核心概念,幾乎所有的指令和文檔都是圍繞這兩個(gè)概念展開(kāi)的。

5、Docker對(duì)變更的管理

對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō),版本迭代、版本回退是常態(tài),Docker對(duì)變更管理又有什么特別之處呢?

假若有一個(gè)應(yīng)用的Docker鏡像,它的V1.0版本有3層,每層大小如圖所示:

?接下來(lái),我們要對(duì)它進(jìn)行如下修改:

  • 修改位于第一層的文件A
  • 刪除位于第二層的文件B
  • 添加一個(gè)新文件C

Docker會(huì)新增一個(gè)第四層,針對(duì)上面的需求,處理方式如下:

  • 把第一層的文件A拷貝到第四層,修改文件A的內(nèi)容
  • 在第四層,把名稱(chēng)為B的文件設(shè)置為不存在
  • 在第四層,創(chuàng)建一個(gè)新文件C

通過(guò)增加一個(gè)第四層,我們的版本變?yōu)?.1,如圖:

e7f3f47bd26e46a4b806cc0d522f739b.png

我們想把應(yīng)用的V1.1版本發(fā)布到Docker倉(cāng)庫(kù)。Docker倉(cāng)庫(kù)已經(jīng)存在這個(gè)應(yīng)用鏡像的V1.0版本,我們上傳時(shí),只需要把第四層(只有3M)上傳到Docker倉(cāng)庫(kù)即可。

假設(shè)有一臺(tái)遠(yuǎn)程服務(wù)器,正在運(yùn)行這個(gè)應(yīng)用的V1.0版,只需要從Docker倉(cāng)庫(kù)把第四層下載下來(lái),就可以運(yùn)行V1.1版了。

綜上,Docker不僅有版本控制功能,還能利用分層特性做到增量更新。

四、為什么使用Docker

你可能會(huì)說(shuō),因?yàn)閯e人用了,所以我也用。噢😓如果那樣的話,可就太糟糕了??。

當(dāng)深入了解Docker后,你想在部門(mén)推廣Docker,就需要給大家講明白為什么使用Docker。

當(dāng)講Docker是什么時(shí),受眾是一批Docker愛(ài)好者,Docker的原理和細(xì)節(jié)講得越深入,越具體,就越受歡迎

當(dāng)講為什么要使用Docker時(shí),受眾可能從來(lái)沒(méi)聽(tīng)說(shuō)過(guò)Docker,他們更關(guān)注Docker能帶來(lái)什么,引入Docker需要對(duì)現(xiàn)有的系統(tǒng)或程序做多大改造,Docker是不是足夠的穩(wěn)定,學(xué)習(xí)和使用Docker的成本有多高等問(wèn)題。

1、從代碼管理說(shuō)起

現(xiàn)在的軟件項(xiàng)目,失敗的原因主要是設(shè)計(jì)結(jié)構(gòu)不合理、編程人員水平不高、代碼bug太多等因素。不管項(xiàng)目有多大,參與的人員有多么多,代碼修改多么頻繁,很少是由管理上混亂導(dǎo)致項(xiàng)目失敗的。究其原因,主要是我們有非常優(yōu)秀的代碼管理工具——Git和SVN。它們有版本控制和中心倉(cāng)庫(kù)這兩大核心功能,能保證大家不用擔(dān)心下列問(wèn)題:

  • 快速把代碼分享給別人
  • 多人同時(shí)修改一個(gè)文件,導(dǎo)致代碼不一致
  • 分不清每個(gè)人在什么時(shí)間提交過(guò)什么代碼
  • 代碼被誤刪誤改,不知道哪些文件被刪被改,也恢復(fù)不到以前的狀態(tài)
  • 變更和新分支太多,混亂到無(wú)法維護(hù)的地步

版本控制功能不僅能清晰記錄每個(gè)開(kāi)發(fā)者在什么時(shí)間交過(guò)什么代碼,還能讓大家在各個(gè)版本間自動(dòng)地切換、融合。大家如果要對(duì)齊開(kāi)發(fā)環(huán)境,不需要注意列出文件的名字、文件的內(nèi)容,只需要簡(jiǎn)單地說(shuō)下版號(hào),就能保證大家的文件完全一致。

中心倉(cāng)庫(kù)可以保證多人協(xié)作有一個(gè)統(tǒng)一的平臺(tái),既可以與別人分享代碼和開(kāi)發(fā)進(jìn)度,也可以對(duì)每個(gè)人的代碼做異機(jī)備份,防止因?yàn)闄C(jī)器故障而導(dǎo)致數(shù)據(jù)丟失。

軟件部署和代碼部署面臨很多相似的問(wèn)題:

  • 如何快速把一臺(tái)機(jī)器的應(yīng)用環(huán)境分享給其他機(jī)器使用,用于擴(kuò)容和故障時(shí)服務(wù)轉(zhuǎn)移
  • 同一個(gè)功能模塊的多臺(tái)機(jī)器,軟件版本和配置文件鏡像出現(xiàn)不一致,很難被發(fā)現(xiàn)
  • 多人維護(hù)一套系統(tǒng),很難清晰地記錄下每個(gè)人都做過(guò)什么操作、每次變更都有哪些內(nèi)容,以便在故障時(shí)快速回退
  • 有些配置文件或數(shù)據(jù)被誤刪了,恢復(fù)不回來(lái),甚至很長(zhǎng)一段時(shí)間都察覺(jué)不到
  • 隨著操作系統(tǒng)版本、軟件、硬件的更新迭代,系統(tǒng)維護(hù)的復(fù)雜度直線上升,混亂不堪

既然代碼管理做的這么好,那軟件部署為什么不借鑒代碼管理的方法呢? ? 噢😯 ,是因?yàn)榇笮?/p>

代碼管理的對(duì)象是純文件(代碼),提亮小,有統(tǒng)一規(guī)范的文件編碼方式,對(duì)平臺(tái)無(wú)依賴(lài)。而軟件部署管理的對(duì)象是一個(gè)環(huán)境,除了文件,還有二進(jìn)制的軟件和它依賴(lài)的運(yùn)行環(huán)境(包括操作系統(tǒng)和依賴(lài)庫(kù))。由于操作系統(tǒng)和依賴(lài)庫(kù)的體量很大,難以完全照搬代碼管理的方式,用版本控制和中心倉(cāng)庫(kù)來(lái)解決軟件部署的問(wèn)題。

2、當(dāng)前的優(yōu)化策略

下面來(lái)看看,對(duì)于軟件部署,目前主流的解決方案是什么樣子

把環(huán)境分為兩個(gè)部分:基礎(chǔ)環(huán)境和應(yīng)用環(huán)境。

  • 基礎(chǔ)環(huán)境:包含機(jī)器硬件、操作系統(tǒng)、提供基礎(chǔ)服務(wù)的應(yīng)用(如ssh、syslog等)
  • 應(yīng)用環(huán)境:包含應(yīng)用需要的各種軟件包和配置文件(雖然軟件包中也可以包含配置文件,但對(duì)于一些變更頻繁和需要個(gè)性化配置的文件,最好還是獨(dú)立出來(lái))。
  • 基礎(chǔ)環(huán)境統(tǒng)一化,盡量保持完全一致。比如,使用相同的硬件服務(wù)器,運(yùn)行相同版本的操作系統(tǒng)和基礎(chǔ)軟件。
  • 應(yīng)用環(huán)境分解出一個(gè)個(gè)獨(dú)立服務(wù),每個(gè)服務(wù)再分解為包和配置文件,使用版本控制和中心倉(cāng)庫(kù)來(lái)對(duì)包與配置進(jìn)行管理

整體方案如圖所示:

ef29b01604cc4086a0c5de8bf32d83fc.png

在這個(gè)解決方案中,我們把軟件包和配置都版本化,每次變更都提交一個(gè)版本到中心倉(cāng)庫(kù),然后再下發(fā)到各臺(tái)機(jī)器上。由于每臺(tái)機(jī)器的基礎(chǔ)環(huán)境都保持一致,所以軟件部署時(shí)可以不關(guān)注底層適配問(wèn)題,在一臺(tái)機(jī)器打包編譯的應(yīng)用可以快速遷移到其他機(jī)器。

這個(gè)解決方案,在基礎(chǔ)環(huán)境一致的前提下,實(shí)現(xiàn)了分解版的版本控制和中心倉(cāng)庫(kù),針對(duì)分解出來(lái)的軟件安裝包和配置文件,可以通過(guò)版本來(lái)管理,并且可以把包和配置提交到中心倉(cāng)庫(kù),讓所有其他機(jī)器分享。

這個(gè)方案,存在以下兩個(gè)問(wèn)題:

  • 基礎(chǔ)環(huán)境難以改動(dòng):因?yàn)樯蠈討?yīng)用環(huán)境的軟件和配置文件都是基于基礎(chǔ)環(huán)境編譯與配置的,一旦基礎(chǔ)環(huán)境發(fā)生改變,可能導(dǎo)致上層的軟件包和配置不能正常工作。
  • 應(yīng)用環(huán)境的維護(hù)成本取決于包和配置的數(shù)量:由于應(yīng)用環(huán)境不是一個(gè)統(tǒng)一整體,而是分解出一個(gè)個(gè)包和配置,隨著包和配置的增多,維護(hù)的復(fù)雜性也隨之增加。

3、Github版的應(yīng)用部署解決方案

Github是最流行、最優(yōu)秀的代碼管理平臺(tái),Docker借鑒了Github的管理思路,打造了一個(gè)Github版的應(yīng)用部署的管理方案。

如果使用Docker來(lái)管理部署應(yīng)用,解決方案如圖所示:

c788298cebc7456e855d108c2b88f689.png

和上面的方案做下對(duì)比:

  • 基礎(chǔ)環(huán)境靈活,對(duì)硬件和操作系統(tǒng)都沒(méi)有限制,只需要在每臺(tái)計(jì)算機(jī)上安裝Docker Engine,用于運(yùn)行Docker應(yīng)用。
  • 應(yīng)用環(huán)境也不再分解為一個(gè)個(gè)包和配置文件,而是作為一個(gè)有機(jī)的整體,這個(gè)有機(jī)整體包含應(yīng)用需要的所有軟件包、配置文件和依賴(lài)的運(yùn)行環(huán)境(操作系統(tǒng)和依賴(lài)庫(kù)),帶有版本控制功能,也可以提交到中心倉(cāng)庫(kù)供大家共享。由于Docker鏡像中包含應(yīng)用運(yùn)行所需要的所有包、配置和系統(tǒng)環(huán)境,下發(fā)鏡像后不需要做任何安裝配置,應(yīng)用就可以直接執(zhí)行,不會(huì)隨著應(yīng)用中包和配置數(shù)量的增加,導(dǎo)致安裝部署變得復(fù)雜

Docker方案完美地把代碼管理中的版本控制和中心倉(cāng)庫(kù)概念移植到應(yīng)用部署領(lǐng)域,讓大家頓時(shí)從應(yīng)用部署煩瑣、重復(fù)的工作中解脫出來(lái),可以像使用Github管理代碼那樣優(yōu)雅地管理應(yīng)用的部署工作。

Docker這個(gè)方案能夠順利實(shí)施,一個(gè)關(guān)鍵點(diǎn)是通過(guò)分層共享和增量變更技術(shù)把應(yīng)用的運(yùn)行環(huán)境(包括操作系統(tǒng)在內(nèi))這么一個(gè)龐大的體量順利瘦身,讓?xiě)?yīng)用運(yùn)行環(huán)境的安裝和修改在大多數(shù)情況下與只裝軟件包一樣輕量、方便。

4、Docker應(yīng)用場(chǎng)景

下面描述兩個(gè)典型的Docker應(yīng)用場(chǎng)景

在這兩個(gè)應(yīng)用場(chǎng)景中,有開(kāi)發(fā)、測(cè)試(QA)和運(yùn)維人員,分別維護(hù)開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境的服務(wù),他們有一個(gè)私有的Docker倉(cāng)庫(kù),存儲(chǔ)著各種各樣的Docker化的應(yīng)用鏡像。

場(chǎng)景一

現(xiàn)在有一個(gè)需求,需要對(duì)應(yīng)用App1做修改、測(cè)試和發(fā)布新變更到生產(chǎn)環(huán)境,步驟如下:

  1. 開(kāi)發(fā)者先從私有倉(cāng)庫(kù)找到App1則個(gè)應(yīng)用最新穩(wěn)定版本,假設(shè)為V1.0版,把這個(gè)App:v1.0下載到開(kāi)發(fā)機(jī),修改,并提交到私有倉(cāng)庫(kù),并告訴測(cè)試人員測(cè)試。
  2. 測(cè)試人員下載開(kāi)發(fā)者剛提交的新版本App1:v1.1,測(cè)試,并把測(cè)試結(jié)果反饋給開(kāi)發(fā)者
  3. 如果測(cè)試失敗,開(kāi)發(fā)者繼續(xù)修改,提交新版本給測(cè)試人員做新一輪的測(cè)試;如果測(cè)試成功,開(kāi)發(fā)把要發(fā)布的應(yīng)用的名稱(chēng)和版本號(hào)提供給運(yùn)維同事。
  4. 運(yùn)維人員根據(jù)開(kāi)發(fā)提供的應(yīng)用名和版本號(hào),把相關(guān)鏡像從私有倉(cāng)庫(kù)下拉到各個(gè)生產(chǎn)環(huán)境的機(jī)器上,停掉就版本的Docker容器,啟動(dòng)新版本的Docker容器,完成發(fā)布。生產(chǎn)環(huán)境的機(jī)器上可以同時(shí)緩存應(yīng)用的多個(gè)版本鏡像,如果新發(fā)布的版本有問(wèn)題,可以快速切換回原來(lái)的版本。

因?yàn)镈ocker的應(yīng)用鏡像包含應(yīng)用運(yùn)行需要的所有軟件包、配置和操作系統(tǒng),所以開(kāi)發(fā)者打包好DockerDocker鏡像,測(cè)試和運(yùn)維獲取,不需要任何修改就可以運(yùn)行。

場(chǎng)景二

有一個(gè)應(yīng)用App2,目前在生產(chǎn)環(huán)境正常運(yùn)行,但由于系統(tǒng)比較老、缺乏維護(hù)、開(kāi)發(fā)和運(yùn)維經(jīng)歷過(guò)更替且交接文檔不全,現(xiàn)在誰(shuí)都不知道該如何部署App2這個(gè)應(yīng)用到新服務(wù)器上。

如果App2是Docker化的應(yīng)用,它可以直接把運(yùn)行的環(huán)境轉(zhuǎn)換為一個(gè)帶版號(hào)的Docker鏡像(如App2:v1.0),提交到私有倉(cāng)庫(kù),供開(kāi)發(fā)者修改或運(yùn)維人員發(fā)布新機(jī)器

5、Docker可以解決哪些痛點(diǎn)

1、開(kāi)發(fā)人員

不管是在大公司還是小公司,開(kāi)發(fā)人員經(jīng)常被如下問(wèn)題困擾:

  • 為了節(jié)約成本,一臺(tái)開(kāi)發(fā)機(jī)多人使用,管理混亂,相互干擾
  • 一個(gè)開(kāi)發(fā)往往只用一套開(kāi)發(fā)環(huán)境,同時(shí)有多個(gè)開(kāi)發(fā)任務(wù)時(shí),不得不反復(fù)修改開(kāi)發(fā)環(huán)境,以適應(yīng)不同的開(kāi)發(fā)任務(wù)
  • 多個(gè)開(kāi)發(fā)人員希望保持相同的開(kāi)發(fā)環(huán)境開(kāi)發(fā)同一個(gè)項(xiàng)目,但開(kāi)發(fā)環(huán)境難以復(fù)刻,即便大家起初的開(kāi)發(fā)環(huán)境一樣,隨著項(xiàng)目的滾動(dòng)、開(kāi)發(fā)環(huán)境的不停更新,很難保證每個(gè)人的開(kāi)發(fā)環(huán)境都同步更新
  • 開(kāi)發(fā)機(jī)硬件故障,需要更換新機(jī)器,重新搭建開(kāi)發(fā)環(huán)境是件頭疼的事。如果硬件故障,重要數(shù)據(jù)沒(méi)備份,那就更讓人崩潰
  • 打算調(diào)研下新軟件,安裝配置文檔復(fù)雜,僅僅把軟件安裝、運(yùn)行起來(lái)就要花費(fèi)大半天時(shí)間

上面問(wèn)題帶來(lái)的工作量不能體現(xiàn)開(kāi)發(fā)人員的核心價(jià)值,但是是不得不面對(duì)的。

如果使用Docker,可以輕松解決上述問(wèn)題:

  • Docker化的應(yīng)用使用容器虛擬化技術(shù),每個(gè)應(yīng)用都運(yùn)行在獨(dú)立的虛擬化環(huán)境中,天然具有隔離行,不用擔(dān)心一機(jī)多用造成的管理混亂。
  • 開(kāi)發(fā)人員在多任務(wù)開(kāi)發(fā)時(shí),可以并行啟動(dòng)這些應(yīng)用的Do可容器,每一個(gè)Docker應(yīng)用有一個(gè)獨(dú)立的運(yùn)行環(huán)境,互不干擾。
  • 開(kāi)發(fā)機(jī)硬件故障,在新開(kāi)發(fā)機(jī)上,重新從Docker倉(cāng)庫(kù)下拉開(kāi)發(fā)環(huán)境的鏡像,一兩分鐘內(nèi)就可以重新搭建一套開(kāi)發(fā)環(huán)境,并且及時(shí)新舊開(kāi)發(fā)機(jī)的硬件和操作系統(tǒng)不一致,重新搭建的開(kāi)發(fā)環(huán)境仍能保持和原來(lái)的環(huán)境一摸一樣。另外,還可以通過(guò)Docker倉(cāng)庫(kù),把重要變更及時(shí)備份到遠(yuǎn)端。
  • Docker的每個(gè)復(fù)雜軟件都可以制作成Docker鏡像,分享給大家使用。隨著Docker的流行,幾乎所有的主流的軟件都提供Docker化的部署方式。軟件部署將成為再簡(jiǎn)單不過(guò)的事情。

2、測(cè)試人員

測(cè)試人員經(jīng)常費(fèi)了九牛二虎之力測(cè)出一些bug,和開(kāi)發(fā)逐一核對(duì),發(fā)現(xiàn)大多數(shù)bug都是開(kāi)發(fā)和測(cè)試環(huán)境不一致造成的。

測(cè)試人員經(jīng)常為配置不同的測(cè)試環(huán)境浪費(fèi)大量時(shí)間,還是不能保證和開(kāi)發(fā)環(huán)境完全包次一致,開(kāi)發(fā)人員雖然很認(rèn)真負(fù)責(zé)地告訴測(cè)試人員如何配置測(cè)試環(huán)境,但還是經(jīng)常性地遺漏一些配置。

使用Docker,不需要做任何配置,就能保證開(kāi)發(fā)和測(cè)試環(huán)境完全一致,測(cè)試人員只需要關(guān)注測(cè)試本身就可以了。

3、運(yùn)維人員

運(yùn)維人員大部分時(shí)間都浪費(fèi)在裝軟件、修改配置上,重復(fù)單調(diào),經(jīng)常半夜還要起來(lái)做緊急擴(kuò)容、故障機(jī)服務(wù)遷移。如果使用了Docker,好處顯而易見(jiàn):

  • 服務(wù)具備快速部署能力,擴(kuò)縮容、版本回退在幾秒內(nèi)就可以完成。
  • 基于同一個(gè)Docker鏡像部署服務(wù),可以保證每臺(tái)機(jī)器應(yīng)用完全一致。
  • 由于Docker化的應(yīng)用是虛擬化,多個(gè)應(yīng)用可以混合部署在一臺(tái)機(jī)器上,互不干擾,可以提高機(jī)器使用率。
  • Docker化的應(yīng)用可以運(yùn)行在不同的硬件和操作系統(tǒng)平臺(tái)下,在不同的環(huán)境自由遷移。
  • 通過(guò)Dockerfiel管理Docker鏡像,即使系統(tǒng)多次易手、交接文檔不全,運(yùn)維人員也可以快速了解系統(tǒng)是如何搭建的。
  • Docker倡導(dǎo)"Build once, Run anywhere",再煩瑣的活兒,只需要做一次🤣,制作成Docker鏡像,在任何環(huán)境下都可以運(yùn)行;還可以基于這個(gè)Docker鏡像做修改,制作新的鏡像。

上面只羅列幾條好處,運(yùn)維在使用Docker的過(guò)程中,還會(huì)發(fā)現(xiàn)很多意想不到的好處。一句話,Docker可以讓運(yùn)維工作變得簡(jiǎn)單和易于維護(hù)。

6、Docker的學(xué)習(xí)成本

坦白說(shuō),Docker是有學(xué)習(xí)和使用成本的。

Docker雖然已經(jīng)做的足夠簡(jiǎn)單易用,但由于其定位是虛擬化容器,是一個(gè)單機(jī)版的應(yīng)用,如果要給予Docker構(gòu)建集群u或PaaS管理系統(tǒng),如Web管理界面、任務(wù)調(diào)度策略、監(jiān)控報(bào)警等,則還需要自己開(kāi)發(fā)或從開(kāi)發(fā)社區(qū)尋求幫助。

另外,傳統(tǒng)的運(yùn)維是以機(jī)器為中心,而Docker是以應(yīng)用為中心,它會(huì)顛覆我們一些固有的運(yùn)維習(xí)慣和運(yùn)維方式。

http://www.risenshineclean.com/news/62102.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)都有什么功能企業(yè)網(wǎng)站seo托管怎么做
  • 常州建站網(wǎng)站模板seo百度刷排名
  • 商貿(mào)公司的網(wǎng)站建設(shè)上海高端網(wǎng)站定制
  • jsp網(wǎng)站開(kāi)發(fā)的兩種模式企業(yè)營(yíng)銷(xiāo)策劃包括哪些內(nèi)容
  • 阿里云個(gè)人網(wǎng)站備案做淘客網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣方案怎么寫(xiě)
  • 網(wǎng)站建設(shè)畢業(yè)答辯ppt模板公司網(wǎng)址有哪些
  • 做黑網(wǎng)站嗎b站24小時(shí)自助下單平臺(tái)網(wǎng)站
  • 制作網(wǎng)頁(yè)可以使用的網(wǎng)頁(yè)元素包括seo查詢友情鏈接
  • 怎么刪除寶塔其他版本建設(shè)的網(wǎng)站seo權(quán)威入門(mén)教程
  • 長(zhǎng)沙做網(wǎng)站湖南微聯(lián)訊點(diǎn)靠譜百度廣告搜索推廣
  • 網(wǎng)站域名價(jià)值查詢獨(dú)立站推廣
  • 北京高端品牌網(wǎng)站建設(shè)寧波外貿(mào)網(wǎng)站推廣優(yōu)化
  • 做網(wǎng)站可不可以模仿鄭州網(wǎng)絡(luò)推廣專(zhuān)業(yè)公司
  • 培訓(xùn)教育行業(yè)網(wǎng)站建設(shè)方案app推廣拉新一手渠道代理
  • 普陀集團(tuán)網(wǎng)站建設(shè)網(wǎng)站注冊(cè)
  • 站長(zhǎng)工具大全企業(yè)網(wǎng)站的作用
  • 教育類(lèi)網(wǎng)站怎么做優(yōu)化搜索引擎優(yōu)化排名培訓(xùn)
  • bbs網(wǎng)站模板下載網(wǎng)站運(yùn)營(yíng)策劃書(shū)范文
  • 天寧常州做網(wǎng)站長(zhǎng)沙市seo百度關(guān)鍵詞
  • 新昌網(wǎng)站制作網(wǎng)站投放廣告費(fèi)用
  • 注冊(cè)功能網(wǎng)站建設(shè)icp備案查詢官網(wǎng)
  • 外貿(mào)網(wǎng)站建設(shè)公司渠道安卓系統(tǒng)優(yōu)化軟件
  • 營(yíng)銷(xiāo)型網(wǎng)站建設(shè)要懂代碼嗎西安網(wǎng)站制作工作室
  • 房地產(chǎn)公司 網(wǎng)站建設(shè)seo網(wǎng)絡(luò)優(yōu)化師
  • 做網(wǎng)站用sql和mysql域名批量查詢
  • 獨(dú)立外貿(mào)網(wǎng)站建設(shè)電商運(yùn)營(yíng)自學(xué)全套教程
  • 怎么對(duì)網(wǎng)站做壓力測(cè)試怎樣做關(guān)鍵詞排名優(yōu)化
  • 網(wǎng)絡(luò)公司網(wǎng)站賞析企業(yè)推廣視頻
  • 網(wǎng)站優(yōu)化軟件排行榜seo企業(yè)推廣案例
  • wordpress 圖片被壓縮seo包年服務(wù)