Docker之路 認識docker

2022-09-15 11:27:14 字數 3280 閱讀 2705

docker 是基於 os 層的虛擬化技術之上的容器引擎,實現對程序的封裝隔離。開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的 linux 機器上。

docker為開發人員以及系統管理員提供了乙個用於開發、部署、和在容器中執行應用的平台。

使用linux容器來部署應用這種方式稱為容器化。

容器化變得越來月流行,應為容器化有太多優點:

docker服務中,有幾個概念是需要我們首先理解的,最主要的是映象images和容器container,這2個概念對於初學者來說很容易混淆,理解他們將有助於我們在操作容器時調理清晰。

docker client

docker提供給使用者的客戶端。docker client提供給使用者乙個終端,使用者輸入docker提供的命令來管理本地或者遠端的伺服器。

docker daemon

docker服務的守護程序。每台伺服器(物理機或虛機)上只要安裝了docker的環境,基本上就跑了乙個後台程式docker daemon,docker daemon會接收docker client發過來的指令,並對伺服器的進行具體操作。

docker registry

images

乙個映象是乙個可執行包,包含了啟動乙個應用所需要的一切資源,例如:**,執行時,lib庫,環境變數以及配置檔案。

docker 映象是乙個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(如匿名卷、環境變數、使用者等)。

docker 映象不包含任何動態資料,其內容在構建之後也不會被改變。

docker映象採用分層儲存結構(aufs)。每一層構建好後就不會在變,一層層構建,前一層是後一層的基礎,由多層檔案系統聯合組成。

docker 映象可以傳到 docker registry,docker registry裡面可以建立私有或公共倉庫,每個倉庫可以包含多個標籤(tag),每個標籤對應乙個映象。通過這個分層儲存與標籤管理,docker 映象可以像**一樣,非常方便的拉取,在任何 docker egnine上執行,帶來全新的運維模式。

containers

容器是映象的執行時例項,乙個映象在執行時在記憶體中會變成什麼樣子?它就像乙個帶狀態的映象或者理解成使用者程序。你可以使用docker ps來檢視正在執行的容器列表。

docker container是真正跑專案程式、消耗機器資源、提供服務的地方,docker container通過docker images啟動,在docker images的基礎上執行你需要的**。

你可以認為docker container提供了系統硬體環境,然後使用了docker images這些製作好的系統盤,再加上你的專案**,跑起來就可以提供服務了。

容器的實質是程序,但與直接在宿主執行的程序不同,容器程序執行於屬於自己的獨立的命名空間。容器銷毀,資料隨之被刪除。任何儲存於容器儲存層的資訊都會隨容器刪除而丟失。

映象是容器的基礎,每次執行 docker run 的時候都會指定哪個映象作為容器執行的基礎。在執行的容器中做檔案修改,然後docker commit,就相當於在原有映象的基礎上,再疊加上容器的儲存層,並構成新的映象。

映象(image)和容器(container)的關係,就像是物件導向程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。

大家都在說docker輕量,區別於傳統的kvm,那麼他們究竟有什麼不同呢?

容器在linux上本地執行,並與其他容器共享主機的核心。它執行乙個獨立的程序,不占用比其他任何可執行程式更多的記憶體,使其輕量級。

虛擬機器(vm)執行乙個成熟的「guest」作業系統,通過虛擬機器監控程式對主機資源進行虛擬訪問。通常,vm提供的資源比大多數應用程式所需的要多。

傳統的虛擬機器技術是虛擬出一套硬體後,在其上執行乙個完整作業系統,在該系統上再執行所需要的應用程序;而容器內的應用程序直接執行與宿主的核心,容器沒有自己的核心,也沒有硬體虛擬,容器是輕量級的虛擬化技術。

比較下兩圖的差異,左圖虛擬機器的guest os層和hypervisor層在docker中被docker engine層所替代。

虛擬機器的guest os即為虛擬機器安裝的作業系統,它是乙個完整作業系統核心;虛擬機器的hypervisor層可以簡單理解為乙個硬體虛擬化平台,它在host os是以核心態的驅動存在的。

虛擬機器實現資源隔離的方法是利用獨立的os,並利用hypervisor虛擬化cpu、記憶體、io裝置等實現的。 對比虛擬機器實現資源和環境隔離的方案,docker就顯得簡練很多。

docker engine可以簡單看成對linux的namespace、cgroup、顯像管理檔案系統操作的封裝。

docker並沒有和虛擬機器一樣利用乙個完全獨立的guest os實現環境隔離,它利用的是目前linux核心本身支援的容器方式實現資源和環境隔離。

簡單的說,docker利用namespace實現系統環境的隔離;利用cgroup實現資源限制;利用映象實現根目錄環境的隔離。

Docker學習收藏系列(一) 認識Docker

1 docker 是乙個軟體平台,讓您可以快速構建 測試和部署應用程式。docker 將軟體打包成名為容器的標準化單元,這些單元具有執行軟體所需的所有功能,包括庫 系統工具 和執行時。使用 docker,您可以將應用程式快速部署和擴充套件到任何環境中,並且知道您的 將執行。2 docker工作原理 ...

Ubuntu1804中重新認識docker

這又是一篇充數的筆記 之前在ubuntu中折騰過好幾次了,但是關於他倆之間的故事總是參雜著第三者,不太純粹,這一次只說她兩之間的故事。一 選乙個紅娘 1 點選 軟體和更新 3 在 中國 節點下選擇 mirrors.aliyun.com 點選 選擇伺服器 s 之後點選關閉 軟體和更新 會提示更新 二 ...

Docker系列四 使用UI管理docker容器

一 什麼是portainer?docker pull portainer portainer三 執行portainer portainer執行方式有以下兩種方式 1 單機版執行 如果僅有乙個docker宿主機,則可使用單機版執行,執行以下命令就可以啟動了 docker run d p 9000 90...