Docker架構與工作流程
Docker架構分為:
- docker host:執行docker daemon的主機
- 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環境。
第三方映象倉庫
映象製作
獲取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 檢視映象在啟動時,預設執行的命令,比如
- 10.在建立映象時,改變原來映象預設執行的命令,修改原有映象的基礎命令,修改其中的cmd指令:
docker commit -a "jaywin.com" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 jaywin/httpd:v0.2
- 執行0.2映象:
- 驗證:
docker container inspect t2
映象推送
- 登入到伺服器上
- 本地映象的名字,必須和docker hub中保持一致
國內訪問比較快的映象地址,是阿里雲
登入自己的賬號,獲得自己專用的加速地址,寫入到daemon.json中,重啟docker後生效。
可以根據操作指南,將映象託管到阿里雲:
- docker login --username=15088132158 registry.cn-hangzhou.aliyuncs.com
- docker tag 9bc68d7b4d76 registry.cn-hangzhou.aliyuncs.com/jaywinz/httpd:v0.1-1
- docker push registry.cn-hangzhou.aliyuncs.com/jaywinz/httpd
推送映象時,如果不是dockerhub,則必須加上伺服器地址,名稱空間和標籤
映象的匯入和匯出
在已有映象的基礎上,打包映象。然後在另外的機上解壓直接使用。
比如:
- docker save -o myimages.gz jaywin/httpd:v0.1-1 jaywinz/httpd:v0.2-1
- docker load -i myimages.gz