如果你還想從頭學起 Docker,可以看看這個系列的文章哦!
https://www.cnblogs.com/poloyy/category/1690628.html
備註
這裡的概念直接引用官方的,我們們提取關鍵字資訊來熟記即可
學習 Docker 前的必備知識
環境配置的煩惱
- 軟體開發最大的麻煩事之一,就是環境配置
- 相信每位程式設計初學者都會在環境配置上倒騰很久,而作為老師也會因為不同機器出現五花八門的環境配置問題而煩惱
- 想要軟體正常執行,那麼系統的設定和各種庫、元件正確的安裝才能如期執行
- 舉例來說,安裝一個 Python 應用,計算機必須有 Python 引擎,還必須有各種依賴,可能還要配置環境變數
- 當你需要換機器的時候,你之前所配置的環境又要重頭來一遍,非常麻煩
很久以前的應用部署方式
介紹
在一個物理伺服器上面安裝系統,直接部署應用
缺點
- 部署非常慢
- 成本非常高
- 資源浪費:部署的應用並不會佔滿伺服器資源,會有大部分的空閒資源
- 難於遷移和擴充套件:像上面說到的,換臺伺服器,環境又要重新配
- 可能會被限定硬體廠商:底層系統架構不同
虛擬化技術出現後的應用部署方式
虛擬化介紹
- 一個主機部署多個虛擬機器,每個虛擬機器可以部署多個應用
- 比如在 Windows 系統裡面執行 Linux 系統的 VM
- 對於底層系統(主機)來說,虛擬機器就是一個普通檔案,不需要就刪掉,對主機沒有影響
虛擬化優點
- 資源池:一個物理機的資源分配到了不同的虛擬機器
- 易擴充套件:新增物理主機或虛擬機器
- 易雲化:阿里雲、AWS 提供虛擬化技術
虛擬化侷限性
- 資源佔用多:每一個虛擬機器都是一個完整的作業系統,要給其分配資源,當虛擬機器數量增多時,物理主機本身消耗的資源勢必增多
- 冗餘步驟多:虛擬機器是完整的作業系統,一些系統級別的操作步驟,往往無法跳過,比如使用者登入
- 啟動慢:啟動作業系統需要多久,啟動虛擬機器就需要多久。可能要等幾分鐘,應用程式才能真正執行
容器的基礎知識
容器為什麼會出現
- 上面也講述了單機部署應用和虛擬機器技術的侷限性
- 容器的誕生就是為了解決這些侷限性的
什麼是容器
- 對應用軟體和其依賴的包進行標準化打包
- 應用之間相互隔離
- 共享同一個 OSKernel
- 可以執行在很多主流作業系統上
- 可以理解成:標準化軟體單元
容器解決了什麼問題
- 解決了開發和運維之間的矛盾
- 在開發和運維之間搭建了一個橋樑,是實現 devops 的最佳解決方案
容器和虛擬機器的區別
容器和虛擬機器都具有相似的資源隔離和分配特點,但是功能不同,因為容器虛擬化了作業系統,而不是硬體,所以更加便攜和高效
容器 | VM |
應用程式層的抽象,將程式碼和依賴項打包在一起【容器是應用層面的隔離】 | 將一臺伺服器轉變為多臺伺服器的物理硬體的抽象【虛擬化是物理資源層面的隔離】 |
多個容器可以在同一臺計算機上執行,並與其他容器共享OS核心 |
也允許多個VM在單臺計算機上執行,但需要啟動單獨的虛擬機器 OS |
僅有一個物理機的OS,多個容器共享物理機的資源 |
多個OS(物理機一個OS,每個 VM 一個 OS),均獨享資源 |
一臺物理機可以執行數百個容器 | 一臺物理機最多可以執行十來個虛擬機器 |
容器映象的大小通常為幾十 MB | 包含作業系統、二進位制檔案、庫,至少也要幾個 GB |
可以在數秒內完成啟動 | 和物理機啟動時間一樣慢,可能要幾分鐘 |
可以處理更多的應用程式,消耗的資源比 VM 少 | |
每個容器在使用者空間中作為隔離的程式執行 |
虛擬化 + 容器
- 其實就是 一臺物理機上部署多個 VM,每個 VM 上又可以有多個容器
- 容器和 VM 一起結合使用,在部署和管理應用程式時提供了很大的靈活性
Docker 的詳細介紹
Docker 簡介
- Docker 是一個開源的應用容器引擎,基於 Go 語言
- 可以打包應用以及依賴包到一 個輕量級、可移植的容器中
- Docker 打包好了的容器,可以釋出到任何流行的 Linux 機器上,也可以實現虛擬化
- 容器是完全使用沙箱機制,相互之間不會有任何介面(獨立)
- 容器效能開銷極低
- Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端 API 來管理和建立 Docker 容器
- Docker 是實現容器技術的一種工具
- Docker 容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣
工作中的應用場景
- Web 應用的自動化打包和釋出
- 自動化測試和持續整合、釋出(我們的重點)
- 組建微服務架構,通過多個容器,一臺機器可以跑多個服務,因此在本機可以模擬出微服務架構
將軟體打包到容器中,以進行開發,運輸和部署
- 容器是打包程式碼及其所有依賴項的軟體的標準單元,所以該軟體可以從一個計算機環境快速可靠地在另一個計算機環境進行執行
- Docker 容器映象是一個輕量級、獨立的、可執行的軟體包,它包含執行應用程式所需的一切:執行環境、系統工具、系統庫、配置
- 容器映象在執行時成為容器
- 容器化軟體都可用於基於 Linux 和 Windows 的應用程式,始終執行相同
- 容器將軟體與其環境隔離開來,即使存在差異,但軟體仍然可以執行
在 Docker 映象上執行的 Docker 容器的優勢
- 標準:Docker 建立了容器的行業標準,因此它們可以在任何地方移植
- 輕巧:容器共享機器的作業系統核心,因此不需要每個應用程式都用作業系統,從而提高了伺服器效率,並降低了伺服器資源的消耗
- 安全:容器中的應用程式更安全,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 服務端(daemon)
Docker 守護程式,執行 Docker 容器
Docker 客戶端(client)
- 客戶端使用 Docker 命令或其他工具呼叫 Docker API
- 當然也可以在 HOST 直接敲 Docker 命令