Docker技術快速精通指南

 

嘉賓介紹html

韋瑋,重慶韜翔網絡科技有限公司董事長兼CEO,國內知名出版社特邀IT做家,極客學院金牌佈道師,CSDN特邀IT專家,51CTO學院IT專家講師。《知道日報》特約做者,國家工信部高級網絡營銷師,蜻蜓FM獨家簽約主播,國家專利發明人,多年IT從業經驗。docker

直播實錄

拒絕套路!Docker技術快速精通指南數據庫

各位朋友你們好,本期咱們分享的主題是Docker技術快速精通指南,也是第一期Docker的分享,但願在本期分享中可以讓各位朋友快速瞭解Docker技術與傳統的虛擬化有何具體區別,並讓各位朋友掌握Docker的一些基礎的實戰,包括鏡像的管理、容器的管理、倉庫的管理等,同時,讓你們瞭解下一個雲計算的熱點,併爲你們制定Docker專家養成的最佳路徑。ubuntu

具體來講,包括如下幾個部分:centos

一、Docker與傳統虛擬化究竟有何不一樣?安全

二、下一個雲計算的熱點bash

三、如何在短時間內掌握Docker技術?網絡

四、經過實戰掌握Docker鏡像、容器、倉庫的管理架構

五、Docker專家養成最佳路徑運維

好,那麼接下來咱們立刻進入第一部份內容的分享:Docker與傳統虛擬化究竟有何不一樣? Docker的本質實際上也是一種虛擬化技術。虛擬化技術目前大體分爲兩種:虛擬機技術、容器技術。顯然,Docker屬於後者,即容器級虛擬化技術。

那麼,容器級虛擬化技術與傳統的虛擬機技術到底有什麼區別呢? 咱們先從鏡像的角度來看一下。

咱們知道,傳統的鏡像,好比一個很普通的CentOS的鏡像的大小相對來講會比較大,大概在幾個G左右,其實,這個鏡像裏面包含兩部分的內容: 1)Linux內核。 2)對應操做系統發行版等,好比,CentOS系統發行版等,這一部分是不包含Linux內核的,這一部分所包含的信息主要是一些驅動、管理軟件等。

而在Docker中,會將這兩部分的信息明顯地分開,在鏡像中,不會包含Linux內核,只包含對應操做系統發行版。在Docker中,Linux內核是共享的。 因此,咱們會發現,Docker的鏡像相對來講會很是小,普通的一個ubuntu鏡像也就是幾十M到100多M。

咱們基於這些Docker的鏡像,能夠很輕鬆的建立出一個容器,容器就至關於傳統虛擬化裏面的虛擬機。

咱們能夠在這個容器中進行相應環境的部署,部署完成後,咱們能夠將部署後的環境再次封裝爲鏡像,隨後,咱們能夠將該鏡像遷移到任何擁有Docker的機器中,而不用過多的去考慮Linux機器的具體內核等底層信息。

這樣作,可讓虛擬化變得更輕,而且遷移性能等會更好。這也就是,爲何Docker能夠更輕量級以及具備更好的平臺遷移性的基本緣由。

總結來講,容器技術與傳統的虛擬機技術具備如下不一樣的地方:

一、Docker容器的部署和啓動很是快(秒級),而傳統虛擬機相對來講部署和啓動會慢不少(分鐘級)。

二、同等條件下,一個單機計算機所支持的容器數量比虛擬機數量要多得多,通常爲十倍以上的差距。

三、Docker容器佔硬盤較小,而傳統虛擬機佔硬盤較大。

相信你們通過剛纔對Docker鏡像與傳統虛擬機鏡像的分析以後,對於以上的3點內容會很好理解。接下來,咱們爲你們分享第二部分的內容:下一個雲計算的熱點。

隨着大數據時代的到來,大量的數據就比如水,而有了這些水以後,就須要用一些器具承載這些水。

若是將這些數據按正常的方式存儲,在以往數據量小的時候是很方便的,但當數據量不斷增大的時候,再用傳統的方式存儲,則杯子的性價比會愈來愈低。

此時,應用虛擬化技術能夠很好的解決這些問題,因此有了雲計算的發展,也有了傳統虛擬化的發展。

但當這些數據量仍持續大量增長的時候,傳統虛擬化的方式性價比也會變得愈來愈低,此時,咱們須要尋求一種性價比更高的雲計算方案。

通過第一個知識點的分析,咱們知道了Docker技術相對於傳統虛擬化技術來講,會更加輕量。

換一種說法,利用Docker技術實現虛擬化的性價比要遠遠高於傳統虛擬化方案的性價比。

天然,Docker技術將會成爲下一個雲計算的熱點,而且根據目前的數據,愈來愈多的大型公司也逐步地在使用Docker。包括百度雲在今年4月份的時候向開發者發佈了內部郵件通知,將會全面的支持Docker。

如圖,爲Docker的受關注的指數圖,咱們能夠看到,其關注數量大不斷上升。而且上升幅度很大。

20160902211715

接下來,咱們將爲你們分享第三個知識點:如何在短時間內掌握Docker技術。

要在短時間內掌握Docker技術的一些基本應用,其實並非一件難事。

Docker是一個由Go語言開發的開源項目,既然是開源項目,其實不少底層的東西官方都已經實現,若是要掌握Docker的基本應用,是不難的。

可是若是要深入的掌握Docker,就必需要對Docker的底層架構等進行相應的研究,如何深刻研究這一部分咱們將在第五個知識點爲你們詳細分析。

若是是初學Docker,可能咱們學習的思路會比較亂,在此,咱們分享一個比較好的學習步驟與方案。

咱們能夠經過如下幾個步驟在短時間內快速掌握Docker:

一、對Docker的基本理念以及實踐方式有初步的瞭解。(本次公開課)

二、經過實踐瞭解Docker的基本應用,下一個知識點咱們即將分享這一部份內容。(本次公開課,下一個知識點)

三、經過實戰掌握Docker的網絡配置的知識。(1天左右)

四、掌握Docker性能監控管理方面的知識。(1-2天左右)

五、掌握一些基本的Docker項目的實踐,好比如何在Docker中構建SSH鏡像、如何構建Python(PHP、MySQL、Java)技術棧等、如何在公有云中(好比阿里雲)部署Docker等,Dockerfile實際應用等。(2天左右)

六、學會構建Docker集羣。(2-3天左右)

按照步驟掌握這幾部分知識以後,咱們就能夠對Docker有一個比較基礎、全面的掌握了,而且也可以使用Docker進行一些實際的項目了。

接下來,咱們進入第四個知識點的分享:經過實戰掌握Docker鏡像、容器、倉庫的管理。

首先,筆者使用的操做系統版本是CentOS7 64位,咱們須要安裝Docker,只須要經過一個命令便可實現:yum -y install docker

隨後,咱們還須要啓動Docker,咱們能夠經過如下指令啓動:systemctl start docker

啓動好Docker以後,咱們能夠從Docker的官方獲取一些鏡像來使用。咱們能夠經過如下指令實現鏡像的獲取:docker pull 鏡像所在倉庫:版本號

好比,咱們能夠經過docker pull ubuntu:16.10獲取官方的版本號爲16.10的ubuntu鏡像。

固然咱們也能夠pull其餘鏡像。有了該鏡像以後,咱們就能夠利用該鏡像輕鬆地建立出容器。

在此,咱們須要知道,鏡像是隻讀不可寫的,這也是鏡像的一種保護機制。若是要改變鏡像,能夠按這種方式來:鏡像–》建立成容器–》修改內容–》封裝成新鏡像

固然,咱們也能夠直接利用Dockerfile來更新鏡像。咱們可使用如下指令來查看本機有哪些已經下載的鏡像:docker images

有了鏡像以後,咱們能夠利用這些已經在本地的鏡像來建立容器。

接下來咱們將學習容器的管理。剛纔咱們已經提到,容器就至關於傳統虛擬化裏面的虛擬機。同一個鏡像能夠建立多個容器,每個容器都是一個相對獨立的環境,容器之間互相隔離、互不影響。

咱們可使用「docker create 參數 鏡像:版本號」來建立對應的容器。好比咱們可使用: docker create -ti ubuntu:16.10來建立一個基於ubuntu:16.10鏡像的容器。

那麼,咱們如何新建並啓動一個容器呢?咱們能夠經過「docker run 參數 鏡像 /bin/bash」 來實現建立並啓動一個容器。好比能夠經過:docker run -ti ubuntu:16.10 /bin/bash來建立並隨之直接啓動一個基於ubuntu鏡像的容器。

若是要查看當前的機器上有哪些容器,咱們則可使用如下命令實現:docker ps -a

其中-a爲參數,表示展現全部本機上的容器信息,包括已啓動的、未啓動的等等。經過這個參數的變化能夠篩選出咱們想要查找的容器信息出來。

假如,咱們想進入某個容器,咱們須要用到容器依附的知識。咱們首先能夠經過「docker ps」等指令查看出要找的容器。隨後,記錄容器id的前幾位。(通常前4位便可)

隨後,經過「docker attach 容器id」依附到對應容器中。好比,咱們可使用:docker attach ec7d來實現進入id號爲ec7d的容器。id號能夠經過docker ps查找。

隨後能夠在該容器中進行任何部署,該部署不會影響CentOS主機,也不會影響其餘容器。好比咱們能夠在容器中安裝Python,部署大數據環境等。

部署好後,容器中擁有一套對應環境,而在外層主機以及其餘容器中,不會擁有對應環境。由於他們是相對隔離的。

部署好後,假如如今咱們須要對這臺容器作數據遷移,能夠將該容器封裝爲鏡像,直接遷移到其餘機器中便可。不須要考慮Linux內核、版本等信息,只須要對方機器有Docker便可。遷移起來也會很是方便。而且因爲該鏡像不包含Linux內核,也很小,因此遷移、部署起來會很是輕量。

若是咱們想要中止某個容器,一樣,首先能夠經過「docker ps」等指令查看出要找的容器,而後使用:docker stop ec7d來實現中止id號爲ec7d的容器。

若是要從新啓動的話,可使用如下指令實現:docker start ec7d;

假如,咱們不想用某個容器了,咱們能夠將該容器刪除,刪除容器能夠用「docker rm 容器id」實現。

好比咱們能夠經過如下指令刪除剛纔所建立的容器:docker rm ec7d 。

接下來,咱們將爲你們分享Docker倉庫管理的知識。

簡單來講,倉庫就是存放鏡像的地方。咱們能夠在https://hub.docker.com/中構建屬於本身的倉庫。

也可使用「docker push 本地鏡像」實現將本地的鏡像上傳到Docker倉庫中。

也可使用「docker push 本地鏡像」實現將本地的鏡像上傳到Docker倉庫中。也可使用「docker search 關鍵詞」在倉庫中搜索對應的鏡像。

關於倉庫的管理,相對來講比較簡單,在此因爲時間關係,咱們就不過多說起。接下來咱們將爲你們分享第五個知識點: Docker專家養成最佳路徑。

咱們已經學習了Docker的基礎知識。可是,要學會Docker在實踐中的應用,還須要學習Docker的網絡配置的知識、Docker性能監控管理方面的知識、Docker基本項目的實踐、Docker集羣的構建等。

上面提到的這些都是基本的部分,若是要深刻研究Docker,還須要進行一些提高。那麼,咱們如何纔可以比較系統地研究Docker?有什麼比較好的路線能夠成爲Docker方面的專家呢?

方向決定可否實現目標,堅持決定可以實現到哪一個階段。因此方向很是重要。在此,咱們爲你們分享一些較好的深刻研究Docker的步驟與路線:

1)Docker架構剖析

2)鏡像技術底層組織結構分析

3)Docker倉庫底層架構分析

4)容器技術底層原理分析

5)Docker API接口高級實戰應用

6)卷插件及API接口實戰

7)Docker高級網絡配置解決方案

8)Docker集羣管理實踐

9)Docker的測試技術

10)Libcontainer技術實踐

11)Docker安全策略實踐

12)Docker二次開發

13)Docker源碼深度剖析

按照這個路線學習下來,會讓你比較清晰、系統地掌握Docker,這一個路線相對來講也是一個比較好的學習研究路線。

好,本次的分享內容咱們就分享到這裏,這一期的內容是第一次Docker的內容,爲了方便更多朋友學習,因此相對來講基礎一些,若是各位對剛纔體系中的某一部份內容感興趣,也能夠互相溝通學習。

但願經過這一期的內容,可以讓你們對Docker的架構以及Docker的學習思路有一個清晰的瞭解,並可以經過實戰實現Docker的虛擬化,包括鏡像的管理、容器的管理以及倉庫的管理等。

互動篩選

Q1:剛纔提到容器遷移,也是基於Docker的V2V,Docker 有沒有P2V或者V2P的相關技術?P:物理機,V虛擬機

A1:其實在Docker中,須要依靠一個基本的主機系統,因此Docker更多的關注上層,而對底層沒有過多影響。

Q2:容器的日誌收集怎麼作的?

A2:有兩種方案,一、將日誌直接掛載到主機磁盤,二、運行一個容器,這個容器專門作日誌收集。

Q3:如何監控容器性能?

A3:監控方案有不少,總的來講,兩種:一、利用一些工具,好比cAdvisor等實現。二、本身寫一些運維程序,好比利用Python寫一些程序進行監控。前者用得多。

Q4:容器之間的應用如何通訊 ?

A4:能夠在容器之間開闢一個隧道進行通訊,具體的實踐部分個人一套錄播課程中有,也能夠直接網上找一下隧道建立的知識實現。

Q5:默認運行一個ubuntu容器,須要多少內存 ?

A5:Docker中底層內存是共享的,具體須要多少內存須要看容器內運行的東西,只須要保證多個容器的內存使用總和小於本地內存便可。

Q6:Docker是否合適支持db?

A6:Docker支持DB,由於Docker中容器中具有一套獨立的操做系統環境,因此不管是數據庫仍是其餘的,只要操做系統支持,Docker就支持。

Q7:docker能夠有幾個bridge?

A7:docker會默認建立一個名爲docker0的網橋,也能夠自定義網橋實現。

Q8:對於Oracle這種須要修改內核參數的,docker能支持麼?

A8:可使用Oracle XE實現。

Q9:docker用go開發的,二次開發有其它語言可選嗎?

A9:若是是修改一些內容,那是須要用Go語言,若是獨立開發一些模塊,徹底能夠用其餘語言,接口的方式實現就行。

原文:http://www.dockerinfo.net/2443.html
上一篇: Docker容器 深度剖析容器之「狀態」下一篇: 從零開始搭建Jenkins+Docker自動化集成環境
相關文章
相關標籤/搜索