Docker概述(1)
阿新 • • 發佈:2021-11-29
Docker
Docker為什麼會出現
一款產品:有開發環境,測試環境,線上環境三種環境
開發環境到線上環境,問題:我在我的電腦上可以執行!你的電腦不能執行!
版本更新,導致了服務不可用。環境配置麻煩,每個機器都要去部署環境(redis,mysql,hadoop,python)耗時耗力。
ps::我曾經就遇到過Jenkins之前不是用docker去部署的,然後Jenkins中的某個外掛更新了,導致缺少了配置項,我排查了很久。如果用docker就不會遇到這個問題
Docker能幹嘛
之前的虛擬機器技術
1個核心,上面安裝各種依賴的,然後才是我們的應用
虛擬機器技術缺點
1.資源佔用多
2.多餘的步驟多
3.啟動慢
容器化技術
1個核心上面可以有多個docker容器,1個容器各自有各自的應用和各自應用所需要的依賴環境
每個容器是相互隔離的,互不影響
Docker介紹
Docker簡介
- Docker 是一個開源的應用容器引擎,基於Go語言
- 可以打包應用以及依賴包到一 個輕量級、可移植的容器中
- Docker 打包好了的容器,可以釋出到任何流行的 Linux 機器上,也可以實現虛擬化
- 容器是完全使用沙箱機制,相互之間不會有任何介面(獨立)
- 容器效能開銷極低
- Docker 使用客戶端-伺服器(C/S)架構模式,使用遠端 API來管理和建立 Docker 容器
- Docker 是實現容器技術的一種工具
- Docker 容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣
工作中應用的場景
- Web 應用的自動化打包和釋出
- 自動化測試和持續整合、釋出
- 組建微服務架構,通過多個容器,一臺機器可以跑多個服務,因此在本機可以模擬出微服務架構
Docker 實現 DevOps(開發、運維)
- 應用更快速的交付和部署(docker:打包映象釋出測試,一鍵執行; 傳統:寫一堆安裝手冊,部署文件,然後安裝)
- 更便捷的升級和擴縮容(部署應用就像搭積木一樣方便,我們把mysql, springbot等各種環境打包成一個映象,只需要更新映象就行; 傳統的:需要對mysql,springbot進行一個個的升級,還可能出現不相容的情況,很麻煩)
- 更簡單的系統運維,開發,測試,線上環境高度一致(不會出現我開發環境是好的,你測試環境不好的這種問題)
- 更高效的計算資源利用,docker是核心級別的虛擬化,可以在一個物理機上執行很多個容器例項,伺服器效能可以被壓榨到極致
Docker名詞解釋
Docker基本組成
上圖解釋
- 在 Docker Client 敲 Docker 命令呼叫 Docker API 來操作 Host 上的 Docker 服務
- Docker 服務可以從倉庫拉映象到本機,也可以用本機映象建立一個容器並執行
倉庫(Registry)
- 集中存放映象檔案的場所
- 每個映象檔案有不同的標籤(不同的版本)
- 最大的開放倉庫是Docker Hub,預設是國外的:https://hub.docker.com/存放了數量龐大的映象供使用者下載
- 國內的公開倉庫包括阿里雲,網易雲等,要配置映象加速
- 倉庫分為公開倉庫( public )和私有倉庫( private )兩種形式
映象(Images)
- 建立容器的模板
- 一個映象可以建立很多容器
容器(Containers)
- Docker 利用容器獨立執行一個或一組應用(服務),通過映象來建立的
- 每個容器之間是相互隔離的
- 它可以被啟用、開始、停止、刪除
主機(HOST)
- 一個物理機或虛擬機器
- 用於執行 Docker 守護程序和多個容器
- 可存放多個映象
- 也稱為宿主機,node節點
Docker 守護程式(docker daemon)
- 監聽 Docker API 請求
- 也會管理 Docker 物件,如:映象、容器、網路、卷
- 守護程式還可以與其他守護程式通訊以管理 Docker 服務
Docker 客戶端(client)
- 客戶端使用 Docker 命令或其他工具呼叫 Docker API
- 當然也可以在 HOST 直接敲 Docker 命令
- 客戶端可以與多個 Docker 守護程式通訊