Docker架構與工作流程

Docker架構

Docker架構分爲:

1. docker host:運行docker daemon的主機

2. docker client:對容器進行create…

 

一個host可以啓動多個容器,基於鏡像可在容器中啓動不同的應用。如果本地無此鏡像,docker可自動連接到docker registry上下載鏡像,存儲到本地/文件系統(overlay2)中。


鏡像本身是隻讀的,倉庫名就是應用程序名。而倉庫內是同一應用程序的不同版本,使用標籤來識別之後。

 

Docker是碼頭工人的意思,而鏡像可形象理解爲應用程序的集裝箱,碼頭工人docker負責裝卸集裝箱(image/application)。



Docker鏡像

比如,在底層純淨的發行版之上,添加一個emacs層,這是一個獨立的層,如果需要額外的工具則需要在上面執行安裝操作比如安裝vim,安裝後可理解爲附加了一層vim的層級,該層級僅僅包含了vim。


然後可再添加一個獨立的層級如apache。當啓動apache時,從下往上掛載疊加,並且三層都是隻讀的。如果需要讀寫操作,則在最上層容器的自有層次(container)進行,而其他層次是共享的。


一旦啓動完成,最底下的層(kernel)也將被移除。如果刪除容器,則容器自有的可寫層也被刪除。


鏡像的分成構建和聯合掛載,依賴專有的文件系統支撐。


21.jpg


其中overlay2是二層抽象文件系統,需要底層文件系統支持(XFS

 


Docker registry

鏡像的統一存儲位置。構建鏡像時,需要一個統一存儲的位置。當啓動鏡像時,docker daemon先從本地獲取鏡像,如果本地不存在鏡像則到registry中下載鏡像並保存到本地。如果沒有指定鏡像地址,則到docker hub中獲取


一般而言,需要二次定製鏡像以符合自身業務需求。


Registry的組成部分repository(一大堆倉庫)  index(一個索引)

運維人員可將鏡像pull到特定的環境部署,比如UAT (用戶驗收測試)環境Promote環境,Production環境。

 


第三方鏡像倉庫

https://quay.io/

鏡像製作

獲取flannel鏡像,默認通過443端口拉取


22.png


方法:啓動一個容器,在容器之上做好自己需要的配置,然後通過docker commit製作鏡像


如:將busybox 加上html目錄index.html,將此結果做成鏡像。日後每次啓動有會存在此文件。

1. 安裝docker服務,並啓動:

yum install docker –y

systemctl start docker

2. 拉取busybox鏡像

docker pull busybox

3. 啓動容器:


23.jpg


4. 提交: 


24.png

24.png


5. 打上標籤:


25.png


6. 可以爲一個鏡像打上多個標籤: 


26.jpg


7. 刪除一個鏡像,僅刪除了指定標籤的鏡像:


27.jpg


8. 也能在做鏡像的同時,打上標籤

9. docker inspect busy 查看鏡像在啓動時,默認執行的命令,比如


28.png


10. 在創建鏡像時,改變原來鏡像默認運行的命令,修改原有鏡像的基礎命令,修改其中的cmd指令:

docker commit -a "jaywin.com" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 jaywin/httpd:v0.2

11. 運行0.2鏡像 


29.png


12. 驗證:


30.png


docker container inspect t2


31.png

32.png



鏡像推送

1. 登錄到服務器上 


33.png


2. 本地鏡像的名字,必須和docker hub中保持一致

34.png

35.jpg


 

國內訪問比較快的鏡像地址,是阿里雲

https://dev.aliyun.com/

登錄自己的賬號,獲得自己專用的加速地址,寫入到daemon.json中重啓docker後生效

 

可以根據操作指南,將鏡像託管到阿里雲:

1. docker login --username=15088132158 registry.cn-hangzhou.aliyuncs.com

2. docker tag 9bc68d7b4d76 registry.cn-hangzhou.aliyuncs.com/jaywinz/httpd:v0.1-1

3. docker push registry.cn-hangzhou.aliyuncs.com/jaywinz/httpd

推送鏡像時,如果不是dockerhub,則必須加上服務器地址,名稱空間和標籤

 


鏡像的導入和導出

在已有鏡像的基礎上,打包鏡像。然後在另外的機上解壓直接使用。

比如:

 1. docker save -o myimages.gz jaywin/httpd:v0.1-1 jaywinz/httpd:v0.2-1

 2. docker load -i myimages.gz



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