1. 程式人生 > 其它 >Docker概述(1)

Docker概述(1)

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 守護程式通訊

官方介紹文件

https://docs.docker.com/get-started/overview/