Docker學習(一):容器介紹

来源:https://www.cnblogs.com/supersnowyao/archive/2019/07/22/11223419.html
-Advertisement-
Play Games

一、什麼是容器 1、容器是一種輕量級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式運行。開發人員在自己的筆記本上創建並測試好的容器,無需任何修改就能夠在生產系統的虛擬機、或物理伺服器、或公有雲主機上運行。 2、容器與虛擬機的異同: 容器與虛擬機都是為應用提供封裝和隔離。 容 ...


一、什麼是容器

  1、容器是一種輕量級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式運行。開發人員在自己的筆記本上創建並測試好的容器,無需任何修改就能夠在生產系統的虛擬機、或物理伺服器、或公有雲主機上運行。

  2、容器與虛擬機的異同:

    容器與虛擬機都是為應用提供封裝和隔離。

    容器由兩部分組成:

    1)應用程式本身;

    2)依賴部分,如應用程式需要的組件庫或其他軟體;

    容器在宿主操作系統的用戶空間中運行,與操作系統的其他進程隔離,這一點顯著區別於虛擬機。

    傳統的虛擬化技術,比如VMWare、KVM,目標均是創建完整的虛擬機。為了運行應用程式,除了部署應用自身及其依賴,還需要安裝整個操作系統。

    兩者區別如下圖所示:

    

    由圖中對比可知,由於所有的容器共用一個宿主操作系統,這使得容器在體積上要比虛擬機小很多。另外,啟動容器不需要啟動整個操作系統,所以容器部署和啟動速度更快,開銷也更小,也更容易遷移。

 二、為什麼使用容器

  在談論為什麼使用容器之前,先看一下之前為什麼用不著容器。之前的系統,幾乎所有的系統均採用三層架構就可以很好的解決使用需求。而當今的系統,需要使用更多的服務,比如MQ、緩存、資料庫來構建和組裝應用。而且應用程式很可能被部署到不同的環境,比如虛擬伺服器、私有雲、公有雲上。

  所以,對於當今系統一方面應用中包含了多種服務,這些服務有自己所依賴的組件庫或軟體包;另一方面存在多種部署環境,應用在運行時可能需要動態遷移到不同的環境中,如何保證各個服務能夠在各種環境中正常運行就是一個很難解決的問題。

  藉助於運輸行業集裝箱的啟發,Docker將集裝箱思想運用到軟體打包上,為代碼提供了一個基於容器的標準化運輸系統。Docker可以將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器,容器可以運行在任何操作系統上。

  由此可知,使用容器的原因就是:容器使軟體具備了超強的可移植能力。從Docker的標誌性圖片中,也很形象的表達Docker的思想,像集裝箱一樣可以方便的運送貨物。

   

三、容器的特性 

 

  對於開發人員而言,容器意味著環境隔離和可重覆性,開發人員只需為應用創建一次運行環境,然後打包成容器便可以在其他機器上運行。另外,容器環境與所在的宿主系統環境是隔離的,就像虛擬機一樣,但是比虛擬機更快更簡單。真正實現了Build Once,Run Anywhere(一次運行,到處運行)

  對於運維人員而言,只需要配置好標準的運行環境,伺服器就可以運行任何容器。這使得運維人員的工作效率更高,同時也使工作也變得一致和可重覆。由此可見,容器消除了開發、測試、生產環境的不一致性。

四、容器生態系統

  一談到容器,大家都會想到Docker,Docker幾乎是容器的代名詞。確實,是Docker將容器技術發揚光大,同時圍繞Docker還有一個生態系統。

  容器生態系統包括如下幾部分:

  1、容器核心技術,就是能夠讓Container(容器)在宿主系統上運行起來的技術,包括:

    1)容器規範

      除了Docker之外,還有其他容器,如HeroKu、NodeJitsu。為了保障容器之間可以相容,Docker、CoreOS、Google等公司成立了OCI組織(Open Container Initiative),制定開放的容器規範。

      目前有兩種規範:a)Runtime Spec;b)Image Format Spec;這兩種規範讓不同組織和廠商開發的容器能夠在不同的容器Runtime上運行,保證了容器的可移植性和互操作性。

    2)容器Runtime

      容器Runtime是容器真正可以運行的地方,Runtime需要和操作系統kernel緊密協作,為容器提供運行環境。

      目前主流的容器Runtime有:

      a)lxc:運行於Linux上的容器Runtime,可以運行Docker;

      b)runc:是Docker開發的容器Runtime,是現在Docker預設的Runtime;

      c)rkt:是CoreOS開發的容器Runtime,可以運行Docker;

    3)容器管理工具

      容器管理工具對內與Runtime交互,對外為用戶提供Interface,比如CLI,可以使用戶有工具來管理容器,相關工具有:

      a)lxd是lxc對應的管理工具;

      b)docker engine是對runc的管理工具,該工具包括Deamon和Cli兩個部分。對於通常說的Docker,一般指docker engine。

      c)rkt cli是rkt的管理工具;

    4)容器定義工具

      容器定義工具的作用是允許用戶定義容器的內容和屬性,這樣容器就能夠被保存,共用和重建。相關工具有:

      a)docker image是docker容器的模板,容器runtime依據docker image創建容器;

      b)docker file是包含若幹命令的文本文件,用於創建出docker image;

      c)ACI(App Container Image)與docker image類似,它是由CoreOS開發的rkt容器的image格式;

    5)Registry

      容器是通過image(鏡像)創建的,需要有一個倉庫來統一存放image,這些倉庫就是Registry。

      a)Docker Registry,可以利用Docker Registry構建私有的Registry;

      b)Docker Hub:https://hub.docker.com/ 是Docker為公眾提供的托管Registry,上面有許多現成的Image;

      c)Quay.io:https://quay.io 提供與Docker Hub類似的服務;

    6)容器OS

      容器OS是專門運行容器的操作系統,與常規OS相比,容器OS通常體積更小,啟動更快。因為是為容器定製的OS,通常它們運行容器的效率會更高。

      a)CoreOS;

      b)atomic;

      c)ubuntu core;

  2、容器平臺技術,能夠讓容器作為集群在分散式環境中運行

    1)容器編排引擎,基於容器的應用一般會採用微服務架構,在這種架構下,不同應用被劃分成不同的服務容器集群,集群中的容器會根據業務需要被動態的創建、遷移和銷毀。

      所謂容器編排,通常包括容器管理、高度、集群定義和服務發現等。通過容器編排引擎,容器被有機的組合成微服務應用,實現業務需求。編排引擎分為:

      a)swarm:是Docker開發的容器編排引擎;

      b)k8s:google開發的開源容器編排引擎,支持Docker和CoreOS;

      c)mesos+marathon:mesos是一個通用的集群資源調度平臺;兩者一起提供容器編排引擎功能;

    2)容器管理平臺,是在容器編排引擎之上的一個更為通用的平臺,通常容器管理平臺支持多種編排引擎,抽象了編排引擎的底層實現細節,為用戶提供更方便的功能。

      a)Rancher

      b)ContainerShip;

    3)基於容器的Paas,它為微服務應用開發人員提供了開發、部署和管理應用的平臺,用戶不必關心底層基礎設施而專註於應用的開發。

      a)Deis;

      b)Flynn;

      c)Dokku;     

  3、容器支持技術 

    1)容器網路

      容器的出現使網路拓撲變得更加動態和複雜,用戶需要專門的解決方案來管理容器與容器、容器與其他實體之間的連通性和隔離性。

      a)Docker Network;

      b)Flannel;

      c)Weave;

      d)Calico;

    2)服務發現

      在微服務應用中,集群會根據負載的強弱對容器進行動態增減,或者根據宿主資源的不同進行動態遷移,容器的IP和埠也會發生變化。服務發現就是提供一種讓客戶端能夠知道如何訪問容器提供的服務的機制。服務發現會保存容器集群中所有微服務最新的信息,如IP和埠,以向外提供API。

      a)etcd;

      b)consul;

      c)zookeeper;

    3)監控

      a)docker ps/top/stats;

      b)docker stats API;

      c)sysdig;

      d)cAdvisor/Heapster;

      e)Weave Scope;

    4)數據管理

      容器經常在不同的宿主之間遷移,需要保證持久化數據也能夠動態遷移。

      a)Flocker;

    5)日誌管理

      日誌為問題排查和事件管理提供了重要依據。

      a)docker logs:Docker原生的日誌工具;

      b)logspout:對日誌提供了路由功能,它可以收集不同容器的日誌並轉發給其他工具後進行處理;

    6)安全性

      a)OpenSCAP:它能夠對容器鏡像進行掃描,發現潛在的漏洞;

 

  大家可關註我的公眾號  

    

   知識學習來源:CloudMan:《每天5分鐘玩轉Docker容器技術》  


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

-Advertisement-
Play Games
更多相關文章
  • 大體思路 後端書寫REST api時,有一些api是非常敏感的,比如獲取用戶個人信息,查看所有用戶列表,修改密碼等。如果不對這些api進行保護,那麼別人就可以很容易地獲取並調用這些 api 進行操作。 所以對於一些api,在調用之前,我們在服務端必須先對操作者進行“身份認證”,這就是所謂的鑒權。 J ...
  • title: 基於SpringBoot+Redis的Session共用與單點登錄 date: 2019 07 23 02:55:52 categories: 架構 author: mrzhou tags: SpringBoot redis session 單點登錄 基於SpringBoot+Redi ...
  • 語音直播房間項目文章彙總。當時對標的競品是音遇、撕歌。2個主力後端研發,3個月,1500+ commit,996、007,紀念那段充滿福報的經歷😂。 系統設計 SD項目架構圖 SD項目:基於狀態機和MQ的語音游戲方案 設計模式系列:狀態模式 狀態機框架選型簡單比較 stateless4j踩坑經歷 ...
  • 架構雜談《六》 超時處理模式 在服務化或者微服務架構里,傳統的整體應用拆分成多個職責單一的微服務,微服務之間通過某種網路通信協議互相通信和交互,完成特定的功能,然而由於網路通信的不穩定,在設計系統時必須考慮到對網路通信的容錯,特別是對調用超時問題的處理。 一、微服務的交互模式 1、同步調用模式 在同 ...
  • 今天,越來越多的用戶被馬蜂窩持續積累的筆記、攻略、嗡嗡等優質的分享內容所吸引,在這裡激發了去旅行的熱情,同時也拉動了馬蜂窩交易的增長。在幫助用戶做出旅行決策、完成交易的過程中,IM 系統起到了重要的作用。 IM 系統為用戶與商家建立了直接溝通的渠道,幫助用戶解答購買旅行產品中的問題,既促成了訂單交易 ...
  • 影響抖音推薦機制的有以下因素。 ①愛心數量就是我們看到抖音視頻,右側有個愛心,愛心越多,越有利於熱門。 ②觀看時長如果用戶只看了2秒就刷到下一個視頻,說明我們的視頻內容質量不怎麼樣,也就是不能受到用戶的喜歡,平臺自然不會給你熱門,給你太多的推薦。 抖音聯盟內部教程 ③評論數量多看同行視頻的評論,你就 ...
  • 大家在玩抖音的過程中是不是會遇到下麵的問題呢,是否玩了很長時間的抖音,並且花了很多原創的心血,作品卻依然沒有上熱門是否感覺明明已經非常努力了,而熱門與你還是擦肩而過是否發現看到別人的視頻在某平臺上見過,卻在這裡上了熱門。 其實,對於80%的抖音用戶來說,這些問題都在困惑著大家,實際上做成功的僅僅只有 ...
  • "1. 為什麼要分散式" "2. 分散式架構帶來的挑戰" "3. 提高可靠性的設計" "3.1 監控設計" "3.2 一致性設計" "3.3 重試設計" "3.4 熔斷設計" "3.5 限流設計" "3.6 降級設計" "4. 提高性能的設計" "4.1 緩存設計" "4.2 非同步設計" "4.3 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...