'docker運行原理與使用總結'

"

docker運行原理概述

Client-Server架構

  • docker守護進程運行在宿主機上systemctl start docker
  • daemon進程通過socket從客戶端(docker命令)接受命令來運行管理各個容器
  • 容器是一個運行時環境,可以看做是運行中的精簡版Linux系統

docker容器技術 vs 虛擬機技術(VMware等)

  • 對比角度:程序運行所在系統、存儲佔用、運行性能、移植性(類比JDK)。
  • 不再需要Hypevisor硬件資源虛擬化的抽象層,運行在docker容器上的程序直接使用實際宿主物理機的硬件資源,從而在CPU和內存利用率上有明顯優勢。
  • docker新建一個容器時,是直接使用宿主機的內核。VMware新建一個虛擬機時,需要加載GuestOS內核(VMware上下載的各個os),這個過程至少分鐘級別,而docker新建容器則是秒級別。
  • 官方對比圖↓
  • docker
"

docker運行原理概述

Client-Server架構

  • docker守護進程運行在宿主機上systemctl start docker
  • daemon進程通過socket從客戶端(docker命令)接受命令來運行管理各個容器
  • 容器是一個運行時環境,可以看做是運行中的精簡版Linux系統

docker容器技術 vs 虛擬機技術(VMware等)

  • 對比角度:程序運行所在系統、存儲佔用、運行性能、移植性(類比JDK)。
  • 不再需要Hypevisor硬件資源虛擬化的抽象層,運行在docker容器上的程序直接使用實際宿主物理機的硬件資源,從而在CPU和內存利用率上有明顯優勢。
  • docker新建一個容器時,是直接使用宿主機的內核。VMware新建一個虛擬機時,需要加載GuestOS內核(VMware上下載的各個os),這個過程至少分鐘級別,而docker新建容器則是秒級別。
  • 官方對比圖↓
  • docker
docker運行原理與使用總結


  • 虛擬機
"

docker運行原理概述

Client-Server架構

  • docker守護進程運行在宿主機上systemctl start docker
  • daemon進程通過socket從客戶端(docker命令)接受命令來運行管理各個容器
  • 容器是一個運行時環境,可以看做是運行中的精簡版Linux系統

docker容器技術 vs 虛擬機技術(VMware等)

  • 對比角度:程序運行所在系統、存儲佔用、運行性能、移植性(類比JDK)。
  • 不再需要Hypevisor硬件資源虛擬化的抽象層,運行在docker容器上的程序直接使用實際宿主物理機的硬件資源,從而在CPU和內存利用率上有明顯優勢。
  • docker新建一個容器時,是直接使用宿主機的內核。VMware新建一個虛擬機時,需要加載GuestOS內核(VMware上下載的各個os),這個過程至少分鐘級別,而docker新建容器則是秒級別。
  • 官方對比圖↓
  • docker
docker運行原理與使用總結


  • 虛擬機
docker運行原理與使用總結



docker鏡像原理

鏡像是什麼

  • 輕量級、可執行的獨立軟件包
  • 打包了運行某個軟件(比如tomcat鏡像)所需的所有內容,包括:
  • 代碼(tomcat代碼)
  • 運行時環境(OS、JDK)
  • 依賴庫
  • 環境變量
  • 配置文件等
  • 底層基礎是Union File System(聯合文件系統)
  • UnionFS:一種分層、輕量級且高性能的文件系統,支持對文件系統的修改作為一次提交來一層層的疊加,也支持將不同目錄掛載到同一虛擬文件系統下。
  • 鏡像由一層層的文件系統組成,通過分層進行繼承。基於基礎鏡像,可以製作出各種具體的應用鏡像
  • 鏡像運行時,一次聯合加載多個文件系統,根據繼承關係進行疊加,最終外部只看到一個文件系統,但擁有了完整的文件和目錄結構。

鏡像加載原理

  • 鏡像實際有一層層的文件系統組成,即UnionFS。
  • 文件系統層級中主要關注bootfs和rootfs
  • bootfs包括BootLoader和kernel(操作系統內核),BootLoader主要是引導加載kernel。同Linux,docker鏡像最底層是bootfs。Linux系統啟動時,會加載bootfs,然後BootLoader加載kernel(Linux內核)至內存,完成之後內存的使用權由bootfs轉移給內核,接著卸載掉bootfs。
  • rootfs包含了我們熟悉的Linux文件目錄結構:/dev/ /proc/ /bin/ /etc/ 等。對於不同的Linux發行版(Ubuntu、centos等),bootfs基本一致(內核相同,都是Linux-kernel),而rootfs會有差別。
  • why一個centos的docker鏡像只有200M,而VMware的centos系統鏡像幾個G?
  • 對於一個精簡的Linux系統,rootfs可以很小,只需要包括最基本的命令、工具和程序庫就OK了。
  • docker容器共用了宿主機的系統內核,只需要提供精簡的rootfs就OK,所以docker的os鏡像體積可以這麼小,因此可以把docker容器看做一個精簡的Linux系統。
  • why一個tomcat的docker鏡像反而比一個centos的docker鏡像大得多
  • 每個應用級別的docker鏡像,都是源於基礎鏡像(聯合文件系統),類比Java中的Object類,一層層繼承得到的。
  • centos鏡像拉取:
[root@richardCentos ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
  • tomcat鏡像拉取:
[root@richardCentos ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
9cc2ad81d40d: Pull complete
e6cb98e32a52: Pull complete
ae1b8d879bad: Pull complete
42cfa3699b05: Pull complete
8d27062ef0ea: Pull complete
9b91647396e3: Pull complete
7498c1055ea3: Pull complete
a183d8c2c929: Pull complete
73dd800dda4c: Pull complete
2bc71ef979ec: Pull complete
Digest: sha256:80db17f3efd9cdcd9af7c799097fe0d223bbee8f25aa36234ab56292e3d8bd7b
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
  • 很明顯,tomcat需要聯合的鏡像更多,可以想象這樣的繼承關係:
  • kernel < centos < jdk < tomcat
  • docker鏡像都是隻讀的,但當容器啟動時,一個新的可寫層會加載到鏡像的頂層,這一層稱為“容器層”,即我們進行容器交互操作的對外層,容器層之下的都叫“鏡像層”。

docker使用心得

鏡像與容器理解

  • 類比Java程序,鏡像-Java類,容器-Java類對象,Docker-JDK(跨平臺)
  • 關於Logo,大海里(宿主主機)鯨魚(docker)揹著很多集裝箱(運行的容器s)
  • 容器可以看作是一個運行中的精簡版的Linux環境(文件系統、root用戶權限等都有)

使用經驗

  • docker --help xxx 看下官方說明,可以解決很多疑惑
"

docker運行原理概述

Client-Server架構

  • docker守護進程運行在宿主機上systemctl start docker
  • daemon進程通過socket從客戶端(docker命令)接受命令來運行管理各個容器
  • 容器是一個運行時環境,可以看做是運行中的精簡版Linux系統

docker容器技術 vs 虛擬機技術(VMware等)

  • 對比角度:程序運行所在系統、存儲佔用、運行性能、移植性(類比JDK)。
  • 不再需要Hypevisor硬件資源虛擬化的抽象層,運行在docker容器上的程序直接使用實際宿主物理機的硬件資源,從而在CPU和內存利用率上有明顯優勢。
  • docker新建一個容器時,是直接使用宿主機的內核。VMware新建一個虛擬機時,需要加載GuestOS內核(VMware上下載的各個os),這個過程至少分鐘級別,而docker新建容器則是秒級別。
  • 官方對比圖↓
  • docker
docker運行原理與使用總結


  • 虛擬機
docker運行原理與使用總結



docker鏡像原理

鏡像是什麼

  • 輕量級、可執行的獨立軟件包
  • 打包了運行某個軟件(比如tomcat鏡像)所需的所有內容,包括:
  • 代碼(tomcat代碼)
  • 運行時環境(OS、JDK)
  • 依賴庫
  • 環境變量
  • 配置文件等
  • 底層基礎是Union File System(聯合文件系統)
  • UnionFS:一種分層、輕量級且高性能的文件系統,支持對文件系統的修改作為一次提交來一層層的疊加,也支持將不同目錄掛載到同一虛擬文件系統下。
  • 鏡像由一層層的文件系統組成,通過分層進行繼承。基於基礎鏡像,可以製作出各種具體的應用鏡像
  • 鏡像運行時,一次聯合加載多個文件系統,根據繼承關係進行疊加,最終外部只看到一個文件系統,但擁有了完整的文件和目錄結構。

鏡像加載原理

  • 鏡像實際有一層層的文件系統組成,即UnionFS。
  • 文件系統層級中主要關注bootfs和rootfs
  • bootfs包括BootLoader和kernel(操作系統內核),BootLoader主要是引導加載kernel。同Linux,docker鏡像最底層是bootfs。Linux系統啟動時,會加載bootfs,然後BootLoader加載kernel(Linux內核)至內存,完成之後內存的使用權由bootfs轉移給內核,接著卸載掉bootfs。
  • rootfs包含了我們熟悉的Linux文件目錄結構:/dev/ /proc/ /bin/ /etc/ 等。對於不同的Linux發行版(Ubuntu、centos等),bootfs基本一致(內核相同,都是Linux-kernel),而rootfs會有差別。
  • why一個centos的docker鏡像只有200M,而VMware的centos系統鏡像幾個G?
  • 對於一個精簡的Linux系統,rootfs可以很小,只需要包括最基本的命令、工具和程序庫就OK了。
  • docker容器共用了宿主機的系統內核,只需要提供精簡的rootfs就OK,所以docker的os鏡像體積可以這麼小,因此可以把docker容器看做一個精簡的Linux系統。
  • why一個tomcat的docker鏡像反而比一個centos的docker鏡像大得多
  • 每個應用級別的docker鏡像,都是源於基礎鏡像(聯合文件系統),類比Java中的Object類,一層層繼承得到的。
  • centos鏡像拉取:
[root@richardCentos ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
  • tomcat鏡像拉取:
[root@richardCentos ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
9cc2ad81d40d: Pull complete
e6cb98e32a52: Pull complete
ae1b8d879bad: Pull complete
42cfa3699b05: Pull complete
8d27062ef0ea: Pull complete
9b91647396e3: Pull complete
7498c1055ea3: Pull complete
a183d8c2c929: Pull complete
73dd800dda4c: Pull complete
2bc71ef979ec: Pull complete
Digest: sha256:80db17f3efd9cdcd9af7c799097fe0d223bbee8f25aa36234ab56292e3d8bd7b
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
  • 很明顯,tomcat需要聯合的鏡像更多,可以想象這樣的繼承關係:
  • kernel < centos < jdk < tomcat
  • docker鏡像都是隻讀的,但當容器啟動時,一個新的可寫層會加載到鏡像的頂層,這一層稱為“容器層”,即我們進行容器交互操作的對外層,容器層之下的都叫“鏡像層”。

docker使用心得

鏡像與容器理解

  • 類比Java程序,鏡像-Java類,容器-Java類對象,Docker-JDK(跨平臺)
  • 關於Logo,大海里(宿主主機)鯨魚(docker)揹著很多集裝箱(運行的容器s)
  • 容器可以看作是一個運行中的精簡版的Linux環境(文件系統、root用戶權限等都有)

使用經驗

  • docker --help xxx 看下官方說明,可以解決很多疑惑
docker運行原理與使用總結

"

相關推薦

推薦中...