Docker筆記(一) 什麼是Docker

2022-07-04 04:03:09 字數 1924 閱讀 5817

接觸docker也有兩年多了,斷斷續續玩過一些應用場景,如安裝一些常用工具服務,部署業務專案,基於gitlab+jenkins pipeline+docker的ci/cd實現等。了解其基本知識與操作,但不能說深度掌握,故藉此系列進行梳理與學習,也希望對有意學習docker的人提供參考。

docker最初是dotcloud公司(後來也改名為docker)的乙個內部專案,於2023年3月開源。docker使用google推出的go語言實現,基於linux核心的cgroup、namespace、union fs等技術(先不用急著了解這些都是啥),對程序進行隔離,是作業系統層面的虛擬化技術。相對於傳統的硬體層面的虛擬化技術(虛擬機器),docker顯得更為輕量化。下圖為傳統虛擬機器與docker的結構對比

由上圖可看出傳統虛擬機器技術是在硬體層面虛擬出一套硬體(cpu、記憶體、磁碟、網絡卡等)後,在其上執行乙個完整的作業系統,再在作業系統上執行應用程序;而docker的應用程序是直接執行在宿主機的核心上,也不需要進行硬體虛擬,因此,docker要比傳統虛擬機器更為輕便。

總結docker相對傳統虛擬化技術的優勢如下:

更高的資源利用率:docker不需要硬體虛擬與執行完整作業系統的開銷,所以資源利用率更高,同樣配置的主機,採用docker往往可以執行更多數量的應用。

更高效的使用體驗:在作業系統上安裝一些常用軟體,如mysql,redis等,往往需要折騰好一陣,有些還要手動安裝各種依賴,而採用docker,可能幾行命令就可以讓乙個服務快速執行起來。

一致的執行環境:docker映象功能可以把程式執行需要的環境進行封裝,確保程式在開發、測試、生產環境都能保持一致性,避免因環境不一致導致程式執行異常。

ci/cd支援:使用docker可以定製映象來實現持續整合、持續部署,如基於gitlab + jenkins pipeline + docker的自動化部署。

更輕鬆的維護:因為docker保證了執行環境的一致性,因此應用的遷移或縮放將變得很容易;docker的分層儲存與映象技術,也使得應用重複部分的復用變得更簡單,基於基礎映象可以進一步擴充套件定義自己的映象,也可以直接使用官方映象來使用。

docker的基本架構圖如下

主要包括幾部分:

docker daemon(docker守護程序dockerd):docker的執行引擎,負責監聽處理docker客戶端請求與管理docker相關物件,如映象、容器、網路、資料卷等。乙個docker守護程序可與其它docker守護程序進行通訊,作為docker服務進行管理。

docker client(docker客戶端docker):docker客戶端(dockercli命令)是大多數使用者用來與docker守護程序互動的方式,比如你在命令列執行docker run,docker客戶端將傳送該命令請求到docker守護程序,由守護程序執行。docker客戶端可通過rest api, unix socket或網路介面來與docker守護程序進行通訊,並且可與多個docker守護程序進行通訊。

docker objects:docker管理的物件,主要包括映象、容器、網路、資料卷等。

根據第二部分docker的優勢及筆者的經驗來看,目前docker主要用於

常用軟體服務的搭建執行,如mysql、redis、nginx等

業務服務的發布部署,尤其是基於springboot的微服務

ci/cd實現,結合gitlab的webhook,jenkins的pipeline,實現自動化整合與部署

快速的彈性伸縮,在容器集群化管理的場景中,如swarm、k8s解決方案中,可基於容器對服務進行快速的彈性伸縮來應對業務量的突發情況

執行環境封裝,如一些深度學習框架模型,打成docker映象的方式進行發布,可以快速在不同的環境中執行起來

docker 一 什麼是docker

docker 是乙個開源專案,誕生於 2013 年初,初是 dotcloud 公司內部的乙個業餘專案。它基於 google 公司推 出的 go 語言實現。專案後來加入了 linux 會,遵從了 apache 2.0 協議,專案 在 github 上進行維護。docker 自開源後受到廣泛的關注和討論...

Docker學習(一) 什麼是Docker?

docker 是乙個基於go語言實現的開源應用容器專案,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的 linux機器上,也可以實現虛擬化。docker的構想是要實現對應用元件級別的 一次封裝 到處執行 這裡的應用元件,既可以是乙個web應用 乙個編譯環境,也可以是一...

關於Docker你不知道的事 什麼是Docker

之前談虛擬化歷史就說過,docker實際是源自於dotcloud的乙個專案,在2013年開源後就飛速發展。我們今天要談的是,什麼是docker?通常我們提docker的時候,都指的是docker engine,docker engine就是執行在主機上的乙個守護程序,類似於於hyper v的管理程式...