1. 程式人生 > >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)也將被移除。如果刪除容器,則容器自有的可寫層也被刪除。

映象的分成構建和聯合掛載,依賴專有的檔案系統支撐。

其中overlay2是二層抽象檔案系統,需要底層檔案系統支援(XFS)
Docker registry

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

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

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

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

 

第三方映象倉庫

https://quay.io/

映象製作

獲取flannel映象,預設通過443埠拉取:

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

如:將busybox 加上html目錄和index.html,將此結果做成映象。日後每次啟動有會存在此檔案。

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

yum install docker –y

systemctl start docker

2.拉取busybox映象:

docker pull busybox

3.啟動容器:

4.提交

5.打上標籤

6.可以為一個映象打上多個標籤:

7.刪除一個映象,僅刪除了指定標籤的映象:

8.也能在做映象的同時,打上標籤

9.docker inspect busy 檢視映象在啟動時,預設執行的命令,比如

  1. 10.在建立映象時,改變原來映象預設執行的命令,修改原有映象的基礎命令,修改其中的cmd指令:

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

  1. 執行0.2映象:

  1. 驗證:

docker container inspect t2

 

映象推送

  1. 登入到伺服器上

  1. 本地映象的名字,必須和docker hub中保持一致

 

國內訪問比較快的映象地址,是阿里雲

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