3.docker虛擬化技術-docker系統架構

前言

在上一篇博客docker引擎中我們介紹了

你通過CLI(命令行工具)輸入docker命令,REST API(通信接口)接收命令後,指揮docker daemon(docker 守護進程)去管理image(鏡像),container(容器),network(網絡),data volumes(數據卷)的生命週期。

看到這句話,我們不禁會產生幾個疑問?

  • docker 命令是什麼?
  • docker 守護進程如何管理鏡像,容器等?
  • 鏡像是什麼?
  • 容器是什麼?
  • 數據卷又是什麼?

帶着這些疑問我們再來看一幅圖

docker系統架構

docker系統架構

名詞解釋

docker倉庫
docker是用來存放docker鏡像的,有公有倉庫和私有倉庫之分,如果大家知道maven便不難理解倉庫這個詞的含義,docker鏡像也可以理解爲倉庫中存放的依賴(jar包)。

docker鏡像
感性理解:我們先把docker鏡像理解爲Java中類(class)的概念。

docker容器
感性理解:我們先把docker容器理解爲Java中對象的概念。

圖片解讀

從在上面那副圖中,我們可以解讀到:
docker引擎與docker倉庫的關係
我們把Client,docker host看做是docker引擎,其中Client便是docker引擎的CLI(命令行工具),docker引擎會與docker倉庫進行交互,也就是說docker引擎可以從docker倉庫中拉取鏡像(這個過程參考maven拉取依賴的過程)。

docker倉庫中存放了什麼
我們從圖片中看到了以Linux爲內核的Ubuntu操作系統橙色圓形圖標,以Linux爲內核的centos操作系統Nginx等。

我們知道在maven倉庫中存放了各種與編寫程序相關的依賴,比如springmvc,mybatis等。而docker中則存放了許多與程序運行相關的軟件,比如操作系統(Ubuntu,centos),負載均衡器(Nginx)。所以使用maven可以使我們方便快捷的搭建一個程序編寫的環境,不會在受到因使用不同編輯器而導致程序結構不同的影響,同樣,docker也可以使我們方便快捷的搭建一個程序運行的環境,不會因部署環境的差異而導致無法正常運行程序的問題

真正實現一次編譯,到處運行
我在初識docker中介紹docker時,說docker真正實現了一次編譯到處運行,我們把目光轉向docker倉庫,如果你把你的項目做成了一個docker鏡像,發佈到倉庫中(發佈的倉庫一般是你的私有倉庫,不是官方倉庫),只要在電腦(服務器)中安裝了docker,就可以運行你發佈的鏡像了。

鏡像與容器的感性認知
鏡像就像Java中類一樣,而容器就是Java中的對象一樣,我們可以按照鏡像(類)的樣子去構建(new)一個容器(對象),這個容器就像對象一樣可以有多個,並且每個容器之間也會向對象一樣有自己的內存空間,操作某個容器不會影響其他容器。

數據卷
通過docker技術可以直接操作宿主機的文件,通話數據卷實現docker與宿主機文件的共享。

docker倉庫解決的問題
在當前宿主機上構建的鏡像如何在其他主機上運行?就像是人家寫的mybatis分頁插件爲什麼在你的程序中可以使用一樣,因爲它發佈到了maven倉庫。

docker C/S架構

C/S
在第一幅圖中我們主要介紹docker引擎與docker倉庫的關係,第二幅圖是在centos7中安裝docker後,使用docker version查看docker呈現出的狀態。
從上圖中我們可以看出docker是C/S架構(客戶端/服務端)的軟件,爲什麼我們要了解docker的系統架構,瞭解docker系統架構能幫助我們理解docker上下文環境,以及像docker build這樣的命令,方便我們通過Dockerfile去構建鏡像。等到後面的博客我會接着闡述什麼是上下文環境,以及部分命令的工作原理,Dockerfile中的各種指令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章