docker-1 初識docker

来源:http://www.cnblogs.com/kafeikele/archive/2016/10/27/6002471.html
-Advertisement-
Play Games

五分鐘認識docker 什麼是docker? 把他想象成一個用了一種新穎方式實現的超輕量虛擬機,在大概效果上也是正確的。當然在實現的原理和應用上還是和VM有巨大差別的,並且專業的叫法是應用容器(Application Container)。 為啥要用docker? 那麼應用容器長什麼樣子呢,一個做好 ...


五分鐘認識docker

什麼是docker?

把他想象成一個用了一種新穎方式實現的超輕量虛擬機,在大概效果上也是正確的。當然在實現的原理和應用上還是和VM有巨大差別的,並且專業的叫法是應用容器(Application Container)。

 

為啥要用docker?

那麼應用容器長什麼樣子呢,一個做好的應用容器長得就好像一個裝好了一組特定應用的虛擬機一樣。比如我現在想用MySQL那我就找個裝好MySQL的容器,運行起來,那麼我就可以使用 MySQL了。

那麼我直接裝個 MySQL不就好了,何必還需要這個容器這麼詭異的概念?話是這麼說,可是你要真裝MySQL的話可能要再裝一堆依賴庫,根據你的操作系統平臺和版本進行設置,有時候還要從源代碼編譯報出一堆莫名其妙的錯誤,可不是這麼好裝。而且萬一你機器掛了,所有的東西都要重新來,可能還要把配置在重新弄一遍。但是有了容器,你就相當於有了一個可以運行起來的虛擬機,只要你能運行容器,MySQL的配置就全省了。而且一旦你想換台機器,直接把這個容器端起來,再放到另一個機器就好了。硬體,操作系統,運行環境什麼的都不需要考慮了。

在公司中的一個很大的用途就是可以保證線下的開發環境、測試環境和線上的生產環境一致。當年在***經常碰到這樣的事情,開發把東西做好了給測試去測,一般會給一坨代碼和一個介紹上線步驟的上線單。結果代碼在測試機跑不起來,開發就跑來跑去看問題,一會兒啊這個配置文件忘了提交了,一會兒啊這個上線命令寫錯了。找到了一個 bug 提上去,開發一看,啊我怎麼又忘了把這個命令寫在上線單上了。類似的事情在上線的時候還會發生,變成啊你這個軟體的版本和我機器上的不一樣……在 ***的時候,由於一個開發直接擔任上述三個職位,而且有一套自動化部署的機制所以問題會少一點,但是上線的時候大家還是膽戰心驚。

若果利用容器的話,那麼開發直接在容器里開發,提測的時候把整個容器給測試,測好了把改動改在容器里再上線就好了。通過容器,整個開發、測試和生產環境可以保持高度的一致。

此外容器也和VM一樣具有著一定的隔離性,各個容器之間的數據和記憶體空間相互隔離,可以保證一定的安全性。

docker在很大程度上可以解決的問題

  • 軟體更新發佈低效
  • 業務無法敏捷
  • 環境一致性,難於保證
  • 不同環境之間遷移成本太高
  • 軟體開發商,交付實施周期長—-成本高

那為啥不用VM?

那麼既然容器和 VM 這麼類似為啥不直接用 VM 還要整齣個容器這麼個概念來呢?Docker 容器相對於 VM 有以下幾個優點:

  • 啟動速度快,容器通常在一秒內可以啟動,而 VM 通常要更久
  • 資源利用率高,一臺普通 PC 可以跑上千個容器,你跑上千個 VM 試試
  • 性能開銷小, VM 通常需要額外的 CPU 和記憶體來完成 OS 的功能,這一部分占據了額外的資源

為啥相似的功能在性能上會有如此巨大的差距呢,其實這和他們的設計的理念是相關的。 VM 的設計圖如下: 

VM 的 Hypervisor 需要實現對硬體的虛擬化,並且還要搭載自己的操作系統,自然在啟動速度和資源利用率以及性能上有比較大的開銷。而 Docker 的設計圖是這樣的: 

 

Docker 幾乎就沒有什麼虛擬化的東西,並且直接復用了 Host 主機的 OS,在 Docker Engine 層面實現了調度和隔離重量一下子就降低了好幾個檔次。 Docker 的容器利用了 lxc,管理利用了 namespaces 來做許可權的控制和隔離,  cgroups 來進行資源的配置,並且還通過  aufs 來進一步提高文件系統的資源利用率。

其中的 aufs 是個很有意思的東西,是  UnionFS 的一種。他的思想和 git 有些類似,可以把對文件系統的改動當成一次 commit 一層層的疊加。這樣的話多個容器之間就可以共用他們的文件系統層次,每個容器下麵都是共用的文件系統層次,上面再是各自對文件系統改動的層次,這樣的話極大的節省了對存儲的需求,並且也能加速容器的啟動。

2016.10.27 00:20

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以下方法均是個人,僅供參考 //添加一個FileHelper的依賴註入(依賴註入的實現類一定要寫構造方法) //該方法是單例模式 在startup中加入 新建一個UploadController 專門處理上傳 以上方法僅供參考 ...
  • 需要用到的Nuget包 "MailKit": "1.8.1", 方法 以上的這個方法可以發Html的文本並附帶附件 ...
  • 通過前面二十幾個章節的學習,我們知道了什麼是WCF;WCF中的A、B、C;WCF的傳輸模式;WCF的寄宿方式;WCF的異常處理。本文綜合應用以上知識點,一步一步寫一個小的WCF應用程式——書籍管理系統(BookMgr)。 這個示例就是一個非常簡單的書籍管理系統,功能有:查詢、修改、新增... ...
  • "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0", 這裡需要用到的是這個nuget包 在startup.cs中加入 這裡解釋一下 AuthenticationScheme 對應cookie的名字 LoginPath 如果沒有登陸,登陸頁面的 ...
  • 昨晚把家裡的電腦重新部署.NET開發環境。從晚上21點安裝到今天凌晨3點多才完成,還算順利,但是耗時最漫長莫過於在安裝Visual Studio 2015 Update3...... 第一,全新安裝Windows 10。 第二,安裝.NET Framework 3.5和4.6。 第三,安裝IIS。 ...
  • 1、確認本機sshd的配置文件(需要root許可權) $ gedit /etc/ssh/sshd_config 找到以下內容,並去掉註釋符”#“ RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authori ...
  • 查看當前系統版本是否支持 當前,nginx發佈包支持以下Linux操作系統版本: RHEL/CentOS: Debian: Ubuntu: SLES: 我們可以在命令行輸入命令 "cat /etc/os-release" 查看當前操作系統版本,如下所示: 可見,操作系統屬於RHEL7.X,符合要求。 ...
  • docker鏡像、容器、倉庫的基本概念 鏡像 Docker 鏡像就是一個只讀的模板。例如:一個鏡像可以包含一個完整的 CentOS 操作系統環境,裡面僅安裝了 httpd或用戶需要的其它應用程式。 鏡像可以用來創建 Docker 容器。 Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...