對於學習Docker而言,很關鍵的一點,一定要了解Docker的核心概念及其原理,若不瞭解清除,在後續的可持續集成,自動化生產部署方案會出現問題
Docker原理:
Docker使用客戶端-服務器(C/S)架構模式。Docker客戶端會與Docker守護進程進行通信。Docker守護進程會處理複雜繁重的任務,例如建立、運行、發佈你的Docker容器。Docker客戶端和守護進程可以運行在同一個系統上,當然你也可以使用Docker客戶端去連接一個遠程的Docker守護進程。Docker客戶端和守護進程之間通過socket或者
RESTful API進行通信
Docker核心概念:
1、鏡像(image)
類似於虛擬機鏡像,可以理解爲一個面向Docker引擎的只讀模板,包含了文件系統
2、容器(Container)
鏡像核心概念:
按照Docker官網的技術文檔描述,Image(鏡像)是Docker術語的一種,代表一個只讀的layer。而layer則具體代表Docker Container文件系統中可疊加的一部分
例如:假設用戶已經通過Docker Registry下拉了Ubuntu:14.04的鏡像,並通過命令docker run –it ubuntu:14.04 /bin/bash將其啓動運行。則Docker Daemon爲其創建的rootfs以及容器可讀寫的文件系統可參見圖
一般情況下,通過某種文件系統掛載內容至掛載點的話,掛載點目錄中原先的內容將會被隱藏。而Unionmount則不會將掛載點目錄中的內容隱藏,反而是將掛載點目錄中的內容和被掛載的內容合併,併爲合併後的內容提供一個統一獨立的文件系統視角
繼續以ubuntu14.04爲例,雖然通過AUFS可以實現rootfs與read-writefilesystem的合併,但是考慮到rootfs自身接近200MB的磁盤大小,如果以這個rootfs的粒度來實現容器的創建與遷移等,是否會稍顯笨重,同時也會大大降低鏡像的靈活性。而且,若用戶希望擁有一個ubuntu14.10的rootfs,那麼是否有必要創建一個全新的rootfs,畢竟ubuntu14.10和ubuntu14.04的rootfs中有很多一致的內容。
DockerImage中又抽象出兩種概念:ParentImage以及BaseImage。
通過image的形式,原先較爲臃腫的rootfs被逐漸打散成輕便的多層。Image除了輕便的特性,同時還有上文提到的只讀特性,如此一來,在不同的容器、不同的rootfs中image完全可以用來複用。
Docker images -tree
docker run -ti docker.io/centos:latest /bin/bash
docker pull centos
實際執行的命令爲我們也可以創建自己私有的倉庫,運行官方提供的 registry 鏡像,將端口映射到主機的 5000 端口上,其它均使用默認配置
guohl@ghl-MBP ⮀ ~ ⮀ docker run -d -p 5000:5000 registry
Unable to find image 'registry:latest' locally
6cfde7386ab2: Pull complete
9789d95d9fda: Pull complete
19443e64f223: Pull complete
b329371ab73c: Pull complete
f0daee9a4e8f: Pull complete
a66e50e56475: Pull complete
8ab3d2988df5: Pull complete
5f60fa7ea945: Pull complete
db22a140c899: Pull complete
5b2fff9306bd: Pull complete
511136ea3c5a: Already exists
f3c84ac3a053: Already exists
a1a958a24818: Already exists
9fec74352904: Already exists
d0955f21bf24: Already exists
registry:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Status: Downloaded newer image for registry:latest
8fb8e82e61822e593e10b59a4e7bbad18c789b34e3b38942d5b63dccb497ed09
創建好私有倉庫之後,我們就可以向該倉庫上傳鏡像,別人也可以從該倉庫下載鏡像