【转】Docker 容器化核心概念
VM vs Docker
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
示例一:部署 MySQL 服務
首先以一個在 Linux 部署 MySQL 服務器為例,相信每個開發或運維人員都有個這個經歷,平均消耗時間應該至少在2個小時以上。而如果使用 docker 來實現,只需要5分鐘,兩個步驟:
- 在linux上安裝docker環境
- 運行命令:docker run -d --name mysql -p 3306:3306 -v /home/freeman/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pwd mysql:5.7.14
示例二:部署公司項目
以往的流程:開發人員開發并測試完成,再交給運維人員部署,配置文件復雜似的在配置過程中耗費了太多的時間和精力。而如果使用新的開發部署模式,開發人員將配置作為項目的構成部分集成到產品中去,不需要運維人員關心具體的配置。
核心概念
-
LXC Linux Container的簡寫, 提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。LXC在資源管理方面依賴于Linux內核的cgroups 子系統,LXC在隔離控制方面依賴于Linux內核的namespace 特性.
-
cgroup Control Groups的縮寫,是Linux內核提供的一種可以限制、記錄、隔離進程組(process groups)所使用的物理資源(如:cpu,memory, io 等等)的機制。最初由google的工程師提出,后來被整合進Linux內核。Cgroups也是LXC為實現虛擬化所使用的資源管理手段,可以說沒有cgroups就沒有LXC。
-
namespaces 提供一種資源隔離方案。PID,IPC,Network等系統資源不再是全局性的,而是屬于特定的 Namespace。每個 Namespace 里面的資源對其他 Namespace 都是透明的。要創建新的Namespace,只需要在調用 clone 時指定相應的flag。Linux Namespaces 機制為實現基于容器的虛擬化技術提供了很好的基礎,LXC就是利用這一特性實現了資源的隔離。不同 container 內的進程屬于不同的 Namespace,彼此透明,互不干擾。
-
Docker
一個實現容器化的平臺,它提供一整套工具(docker-engine, docker-compose等等)讓容器化變得異常簡單。
解決的問題
簡化配置
這是 Docker 公司宣傳的 Docker 的主要使用場景。虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平臺(軟件、系統),Docker 在降低額外開銷的情況下提供了同樣的功能。它能讓你將運行環境和配置放在代碼中然后部署,同一個 Docker 的配置可以在不同的環境中使用,這樣就降低了硬件要求和應用環境之間耦合度。
代碼流水線(Code Pipeline)管理
前一個場景對于管理代碼的流水線起到了很大的幫助。代碼從開發者的機器到最終在生產環境上的部署,需要經過很多的中間環境。而每一個中間環境都有自己微小的差別,Docker 給應用提供了一個從開發到上線均一致的環境,讓代碼的流水線變得簡單不少。
提高開發效率
這就帶來了一些額外的好處:Docker 能提升開發者的開發效率。不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境盡量貼近生產環境,二是我們想快速搭建開發環境。理想狀態中,要達到第一個目標,我們需要將每一個服務都跑在獨立的虛擬機中以便監控生產環境中服務的運行狀態。然而,我們卻不想每次都需要網絡連接,每次重新編譯的時候遠程連接上去特別麻煩。這就是 Docker 做的特別好的地方,開發環境的機器通常內存比較小,之前使用虛擬的時候,我們經常需要為開發環境的機器加內存,而現在 Docker 可以輕易的讓幾十個服務在 Docker 中跑起來。
隔離應用
有很多種原因會讓你選擇在一個機器上運行不同的應用,比如之前提到的提高開發效率的場景等。我們經常需要考慮兩點,一是因為要降低成本而進行服務器整合,二是將一個整體式的應用拆分成松耦合的單個服務。
整合服務器
正如通過虛擬機來整合多個應用,Docker 隔離應用的能力使得 Docker 可以整合多個服務器以降低成本。由于沒有多個操作系統的內存占用,以及能在多個實例之間共享沒有使用的內存,Docker 可以比虛擬機提供更好的服務器整合解決方案。
調試能力
Docker 提供了很多的工具,這些工具不一定只是針對容器,但是卻適用于容器。它們提供了很多的功能,包括可以為容器設置檢查點、設置版本和查看兩個容器之間的差別,這些特性可以幫助調試 Bug。
多租戶環境
另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關于這個場景的例子是為IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼非常復雜,很難處理,重新規劃這樣一個應用不但消耗時間,也浪費金錢。使用Docker,可以為每一個租戶的應用層的多個實例創建隔離的環境,這不僅簡單而且成本低廉,當然這一切得益于Docker環境的啟動速度和其高效的diff命令。
快速部署
在虛擬機之前,引入新的硬件資源需要消耗幾天的時間。Docker的虛擬化技術將這個時間降到了幾分鐘,Docker只是創建一個容器進程而無需啟動操作系統,這個過程只需要秒級的時間。
常用命令
進入容器交互模式 docker exec -it container-name /bin/bash
強制刪除所有容器(包括當前正在運行的容器) docker rm -f $(docker ps -a -q)
作者:我是柯南
鏈接:https://www.jianshu.com/p/297395270278
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
轉載于:https://www.cnblogs.com/Danny-test/p/9132120.html
總結
以上是生活随笔為你收集整理的【转】Docker 容器化核心概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屁颠虫能在电脑上用吗(屁颠虫使用说明)
- 下一篇: 团队作业_1_博客1(分工理解)