嘉賓介紹
韋瑋,重慶韜翔網絡科技有限公司董事長兼CEO,國內知名出版社特邀IT作家,極客學院金牌布道師,CSDN特邀IT專家,51CTO學院IT專家講師。《知道日報》特約作者,國家工信部高級網絡營銷師,蜻蜓FM獨家簽約主播,國家專利發明人,多年IT從業經驗。
直播實錄
拒絕套路!Docker技術快速精通指南
各位朋友大家好,本期我們分享的主題是Docker技術快速精通指南,也是第一期Docker的分享,希望在本期分享中能夠讓各位朋友快速了解Docker技術與傳統的虛擬化有何具體區別,并讓各位朋友掌握Docker的一些基礎的實戰,包括鏡像的管理、容器的管理、倉庫的管理等,同時,讓大家了解下一個云計算的熱點,并為大家制定Docker專家養成的最佳路徑。
具體來說,包括以下幾個部分:
1、Docker與傳統虛擬化究竟有何不同?
2、下一個云計算的熱點
3、如何在短期內掌握Docker技術?
5、Docker專家養成最佳路徑
好,那么接下來我們馬上進入第一部分內容的分享:Docker與傳統虛擬化究竟有何不同? Docker的本質實際上也是一種虛擬化技術。虛擬化技術目前大致分為兩種:虛擬機技術、容器技術。顯然,Docker屬于后者,即容器級虛擬化技術。
那么,容器級虛擬化技術與傳統的虛擬機技術到底有什么區別呢? 我們先從鏡像的角度來看一下。
我們知道,傳統的鏡像,比如一個很普通的CentOS的鏡像的大小相對來說會比較大,大概在幾個G左右,其實,這個鏡像里面包含兩部分的內容: 1)Linux內核。 2)對應操作系統發行版等,比如,CentOS系統發行版等,這一部分是不包含Linux內核的,這一部分所包含的信息主要是一些驅動、管理軟件等。
而在Docker中,會將這兩部分的信息明顯地分開,在鏡像中,不會包含Linux內核,只包含對應操作系統發行版。在Docker中,Linux內核是共享的。 所以,我們會發現,Docker的鏡像相對來說會非常小,普通的一個ubuntu鏡像也就是幾十M到100多M。
我們基于這些Docker的鏡像,可以很輕松的創建出一個容器,容器就相當于傳統虛擬化里面的虛擬機。
我們可以在這個容器中進行相應環境的部署,部署完成后,我們可以將部署后的環境再次封裝為鏡像,隨后,我們可以將該鏡像遷移到任何擁有Docker的機器中,而不用過多的去考慮Linux機器的具體內核等底層信息。
這樣做,可以讓虛擬化變得更輕,并且遷移性能等會更好。這也就是,為什么Docker可以更輕量級以及具有更好的平臺遷移性的基本原因。
總結來說,容器技術與傳統的虛擬機技術具有以下不同的地方:
1、Docker容器的部署和啟動非常快(秒級),而傳統虛擬機相對來說部署和啟動會慢很多(分鐘級)。
2、同等條件下,一個單機計算機所支持的容器數量比虛擬機數量要多得多,一般為十倍以上的差距。
3、Docker容器占硬盤較小,而傳統虛擬機占硬盤較大。
相信大家經過剛才對Docker鏡像與傳統虛擬機鏡像的分析之后,對于以上的3點內容會很好理解。接下來,我們為大家分享第二部分的內容:下一個云計算的熱點。
隨著大數據時代的到來,大量的數據就好比水,而有了這些水之后,就需要用一些器具承載這些水。
如果將這些數據按正常的方式存儲,在以往數據量小的時候是很方便的,但當數據量不斷增大的時候,再用傳統的方式存儲,則杯子的性價比會越來越低。
此時,應用虛擬化技術可以很好的解決這些問題,所以有了云計算的發展,也有了傳統虛擬化的發展。
但當這些數據量仍持續大量增加的時候,傳統虛擬化的方式性價比也會變得越來越低,此時,我們需要尋求一種性價比更高的云計算方案。
經過第一個知識點的分析,我們知道了Docker技術相對于傳統虛擬化技術來說,會更加輕量。
換一種說法,利用Docker技術實現虛擬化的性價比要遠遠高于傳統虛擬化方案的性價比。
自然,Docker技術將會成為下一個云計算的熱點,并且根據目前的數據,越來越多的大型公司也逐步地在使用Docker。包括百度云在今年4月份的時候向開發者發布了內部郵件通知,將會全面的支持Docker。
如圖,為Docker的受關注的指數圖,我們可以看到,其關注數量大不斷上升。并且上升幅度很大。
接下來,我們將為大家分享第三個知識點:如何在短期內掌握Docker技術。
要在短期內掌握Docker技術的一些基本應用,其實并不是一件難事。
Docker是一個由Go語言開發的開源項目,既然是開源項目,其實很多底層的東西官方都已經實現,如果要掌握Docker的基本應用,是不難的。
但是如果要深刻的掌握Docker,就必須要對Docker的底層架構等進行相應的研究,如何深入研究這一部分我們將在第五個知識點為大家詳細分析。
如果是初學Docker,可能我們學習的思路會比較亂,在此,我們分享一個比較好的學習步驟與方案。
我們可以通過以下幾個步驟在短期內快速掌握Docker:
1、對Docker的基本理念以及實踐方式有初步的了解。(本次公開課)
2、通過實踐了解Docker的基本應用,下一個知識點我們即將分享這一部分內容。(本次公開課,下一個知識點)
3、通過實戰掌握Docker的網絡配置的知識。(1天左右)
4、掌握Docker性能監控管理方面的知識。(1-2天左右)
5、掌握一些基本的Docker項目的實踐,比如如何在Docker中構建SSH鏡像、如何構建Python(PHP、MySQL、Java)技術棧等、如何在公有云中(比如阿里云)部署Docker等,Dockerfile實際應用等。(2天左右)
6、學會構建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:有兩種方案,1、將日志直接掛載到主機磁盤,2、運行一個容器,這個容器專門做日志收集。
Q3:如何監控容器性能?
A3:監控方案有很多,總的來說,兩種:1、利用一些工具,比如cAdvisor等實現。2、自己寫一些運維程序,比如利用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
文章列表