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 查看鏡像在啓動時,默認執行的命令,比如
10. 在創建鏡像時,改變原來鏡像默認運行的命令,修改原有鏡像的基礎命令,修改其中的cmd指令:
docker commit -a "jaywin.com" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 jaywin/httpd:v0.2
11. 運行0.2鏡像:
12. 驗證:
docker container inspect t2
鏡像推送
1. 登錄到服務器上
2. 本地鏡像的名字,必須和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