Docker學習筆記(一)概念理解

一、什么是docker容器

????????Docker容器是一種輕量級、可移植的軟件封裝技術,它允許開發者將應用程序及其依賴、配置文件、運行環境等打包到一個獨立的、自包含的執行單元中。容器與虛擬機相似,都提供了隔離的運行環境,但容器更加輕量級,因為它不需要像虛擬機那樣為每個應用配備完整的操作系統;而是共享主機的操作系統內核,同時利用資源隔離機制(如cgroups和命名空間)來保證容器間互不影響。

Docker容器的核心優勢包括:

  1. 輕量級:啟動和停止速度極快,資源利用率高,相比傳統虛擬機,容器在內存和CPU使用上更為高效。
  2. 標準化:Docker鏡像提供了一種標準化的軟件打包和交付方式,使得應用程序可以在任何支持Docker的環境中一致地運行,實現了“一次構建,到處運行”。
  3. 隔離性:每個容器都在自己的視圖中運行,擁有獨立的文件系統、網絡配置、進程空間等,與宿主機和其他容器隔離。
  4. 可移植性:Docker容器可以在不同的硬件平臺、操作系統和云環境中無縫遷移。
  5. 可擴展性:易于創建、復制和銷毀容器,便于實現水平擴展和負載均衡。

容器與虛擬機的區別

????????為什么要和虛擬機做比較,用過虛擬機的同學應該知道,虛擬機也是將主機資源分配出一部分,進行隔離,提供另一個系統環境。但是虛擬機是模擬出了一臺完整的電腦,包括它的硬件資源,虛擬機是可以像電腦一樣進入bios中,使用u盤安裝系統的。

容器

????????容器是應用層的抽象,它將代碼和依賴關系打包在一起。多個容器可以在同一臺機器上運行,并與其他容器共享操作系統內核,每個容器在用戶空間中作為獨立進程運行。容器占用的空間比VM少(容器映像的大小通常為幾十MB),可以處理更多的應用程序,并且需要更少的VM和操作系統。

虛擬機

????????虛擬機(VM)是物理硬件的抽象,將一臺服務器轉變為多臺服務器。管理程序允許多臺VM在單臺機器上運行。每個VM都包含操作系統的完整副本,應用程序,必要的二進制文件和庫 - 占用數十GB。虛擬機也可能很慢啟動。

為什么要使用容器?

????????首先建立在我們需要環境隔離的基礎上。
????????根據上面的介紹,可以看出虛擬機,是主機級虛擬化,完整的虛擬出一臺計算機,然后在虛擬出來的機器上安裝操作系統,做到環境隔離。想想我們的服務部署在虛擬機上是什么情況。

????????如上圖所示,在宿主機中安裝了系統,系統中安裝了虛擬機,虛擬機虛擬出一臺計算機,在虛擬計算機中安裝完整的系統,再將服務部署在虛擬系統中。
? ? ? ?部署的服務受虛擬機的內核調度,虛擬機受主機的調度,多層及下主機資源產生了嚴重的浪費。如果要在一臺機器上部署多個服務,還要環境隔離,那就需要有多個虛擬機,所需要的資源也就不言而喻。

如果使用容器是什么樣的呢?

????????容器是在主機的操作系統中,隔離出單獨的用戶空間,每個都是單獨的沙箱,環境互不影響。需要的系統資源也只是服務所需要的資源,減少了虛擬主機的資源開銷。

?二、什么是鏡像

Docker鏡像(Docker Image)是Docker技術中的核心組件之一,它是一個輕量級、可執行的獨立軟件包,充當了創建Docker容器的藍圖或模板。鏡像定義了運行應用程序所需的所有內容,包括代碼、運行時環境(如Python、Node.js等)、庫依賴、環境變量、配置文件以及操作系統的層。每個Docker容器都是從某個鏡像實例化而來的。

Docker鏡像的幾個關鍵特性包括:

  1. 分層結構:Docker鏡像是由多個層(layers)組成的,每一層代表了文件系統的差異變更。這種分層設計使得鏡像的構建、傳輸和存儲更加高效。當一個層被更改或添加,只會保存該層的差異部分,而非整個鏡像,這有助于減小存儲占用和加速鏡像的傳輸過程。

  2. 不可變性:一旦構建完成,鏡像的內容就是靜態的、只讀的。這意味著運行時對容器的修改不會影響到原始鏡像,保證了環境的一致性和可復現性。

  3. 內容尋址:每個鏡像層都有一個唯一的ID,通常是通過SHA256算法計算得出的校驗和,確保了鏡像的唯一性和完整性。當從Docker Hub或其他注冊表下載鏡像時,Docker會檢查本地是否已存在相同的層,從而避免重復下載,提高了效率。

  4. 可移植性:Docker鏡像可以在任何支持Docker的平臺上運行,確保了應用程序在不同環境之間的一致運行,實現了“一次構建,到處運行”的理念。

  5. 創建與管理:用戶可以通過Dockerfile來定義和自動化構建鏡像的過程,也可以基于現有鏡像使用docker commit命令創建新鏡像,或者通過docker pull命令從Docker Hub等鏡像倉庫下載鏡像,使用docker images命令查看本地鏡像列表。

三、什么是倉庫

Docker倉庫(Docker Repository)是集中存儲和分發Docker鏡像的場所,類似于代碼倉庫用于存儲代碼一樣,Docker倉庫用于存放用戶創建或下載的Docker鏡像(可以理解為軟件商店)。倉庫是Docker生態系統中非常關鍵的一部分,它支持Docker鏡像的分享、重用和版本控制。

Docker倉庫可以分為兩大類:

  1. 公共倉庫:最知名的公共倉庫是Docker Hub,這是Docker官方維護的服務,用戶可以免費上傳和下載鏡像。Docker Hub上存有成千上萬的鏡像,包括各種流行的應用、服務以及基礎鏡像,如Ubuntu、Nginx、MySQL等。任何人都可以搜索、下載這些鏡像來使用,也可以上傳自己的鏡像供他人使用。

  2. 私有倉庫:除了公共倉庫,用戶或組織還可以搭建自己的私有倉庫,用于存儲和管理不想公開的鏡像,或滿足企業內部的安全和合規要求。私有倉庫可以使用Docker官方提供的Docker Registry軟件來部署,也可以使用第三方的私有倉庫解決方案,如Harbor、GitLab Container Registry等。

Docker倉庫的工作原理涉及倉庫注冊服務器(Registry),這是一個存儲和分發鏡像的服務端組件。每個倉庫可以包含多個鏡像,每個鏡像又有不同的標簽(tags),標簽用來標記鏡像的版本或變體。當用戶執行docker pulldocker push命令時,實際上是在與倉庫注冊服務器進行通信,以下載或上傳鏡像。

參考文章:Docker容器技術----什么是容器? - 簡書

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39447.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39447.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39447.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何清理電腦內存?讓電腦運行如飛!

電腦內存(RAM)的清理對于維持系統的流暢運行至關重要。隨著使用時間的增加,系統內存會被各種應用程序和后臺進程占用,導致系統響應變慢,甚至出現卡頓現象。通過有效地清理內存,可以提升電腦的性能&#xff…

深入理解如何撤銷 Git 中不想提交的文件

個人名片 🎓作者簡介:java領域優質創作者 🌐個人主頁:碼農阿豪 📞工作室:新空間代碼工作室(提供各種軟件服務) 💌個人郵箱:[2435024119qq.com] &#x1f4f1…

初識 ANTLR4:構建強大解析器的利器

初識 ANTLR4:構建強大解析器的利器 在現代軟件開發中,解析和處理各種形式的文本數據是一個常見而又復雜的任務。無論是編譯器、數據格式轉換工具,還是協議解析器,解析器的作用都至關重要。ANTLR4(ANother Tool for La…

MySQL內存使用率高且不釋放問題排查與總結

背景 生產環境mysql 5.7內存占用超過90%以上,且一直下不來。截圖如下: 原因分析 1、確定mysql具體的占用內存大小,通過命令:cat /proc/Mysql進程ID/status查看 命令執行后的結果比較多(其他參數的含義想了解可參考這…

靜態路由的配置

5.3靜態路由 靜態路由由網絡管理員手動配置,配置方便,對系統要求低,適用于拓撲結構簡單并且穩定的小型網絡。缺點是不能自動適應網絡拓撲的變化,需要人工干預。 5.3.1靜態路由實驗 1、實驗需求 ① 掌握路由表的概念&#xff1…

低代碼開發的終局:數字化應用創新智能平臺

隨著數字化轉型的加速,企業和開發者們面臨著越來越多的壓力來快速交付創新的數字化解決方案。在這樣的背景下,低代碼開發平臺逐漸成為了一種強大的工具,幫助開發者們在不需要深入編碼的情況下快速構建應用程序。 低代碼開發的定義和優勢 低代…

cpp隨筆——如何實現一個簡單的進程心跳功能

什么是進程的心跳 在我們日常后臺服務程序運行中,一般是調度模塊,進程心跳以及進程監控共同工作,進而實現實現服務的穩定運行,在前面我們介紹過如何去實現一個簡單的調度模塊,而今天我們所要介紹的就是如何實現進程的心跳,首先什么是進程的心…

git上傳文件

git init git add . git commit -m " " git remote add origin 倉庫的地址 git push -u origin master 如果出現以下問題 可以用這一句強制上傳 git push -f origin master

Centos下rpm和yum執行卡住問題(已解決)

問題描述 執行rpm和yum卡住, 沒有任何報錯信息,且無法 ctrl c 終止,只能通過后臺 kill -9 殺死。 問題排查: 查看yum日志:yum -vv 軟件包 會發現卡在 loading keyring from rpmdb,即load DB存在問題。 …

C++ QT 全局信號的實現

每次做全局信號都需要重新建立文件&#xff0c;太麻煩了&#xff0c;記錄一下&#xff0c;以后直接復制。 頭文件 globalSignalEmitter.h #pragma once //#ifndef GLOBALSIGNALEITTER_H //#define GLOBALSIGNALEITTER_H#include <QObject>class GlobalSignalEmitter : …

使用 llamaIndex 快速實現智能體

AI 智能體就是可以根據當前環境進行推理&#xff0c;并根據處理結果進行下一步的操作。簡單來說 AI 智能體可以與外界環境進行交互&#xff0c;并根據結果執行更復雜的操作。本文將通過llamaIndex 實現一個簡單的 Agent 實時獲取數據&#xff0c;由于大模型是通過靜態數據進行訓…

收銀系統源碼分享-PHP可二開

千呼新零售2.0系統是零售行業連鎖店一體化收銀系統&#xff0c;包括線下收銀線上商城連鎖店管理ERP管理商品管理供應商管理會員營銷等功能為一體&#xff0c;線上線下數據全部打通。 適用于商超、便利店、水果、生鮮、母嬰、服裝、零食、百貨、寵物等連鎖店使用。 私有化獨立…

游戲工作室如何巧妙應對IP封禁風險?

游戲工作室在使用IP時&#xff0c;面臨著封號的風險&#xff0c;因此需要采取一些防封技巧來保護自己的運營。以下是一些游戲工作室常用的防封技巧。 1. 多IP輪換 游戲工作室可以使用多個代理IP&#xff0c;并定期輪換它們。這樣做可以減少單個IP被頻繁訪問同一游戲服務器而被…

sqlalchemy分頁查詢

sqlalchemy分頁查詢 在SQLAlchemy中,可以使用limit和offset方法實現分頁查詢 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import MyModel # 假設MyModel是你定義的模型# 連接數據庫 engine = create_engine(sqlite:///myd…

C++_03

1、構造函數 1.1 什么是構造函數 類的構造函數是類的一種特殊的成員函數&#xff0c;它會在每次創建類的新對象時執行。 每次構造的是構造成員變量的初始化值&#xff0c;內存空間等。 構造函數的名稱與類的名稱是完全相同的&#xff0c;并且不會返回任何類型&#xff0c;也不…

MODBUS TCP協議簡介

目錄 一、協議概述 二、協議結構 三、功能碼 四、通信過程 五、注意事項 六、應用實例 七、優點 八、缺點 MODBUS TCP協議是一種基于TCP/IP協議的Modbus變種&#xff0c;它允許Modbus協議在以太網網絡上運行&#xff0c;使得設備之間可以通過IP網絡交換數據。以下是MOD…

Windows系統安裝SSH服務結合內網穿透配置公網地址遠程ssh連接

前言 在當今的數字化轉型時代&#xff0c;遠程連接和管理計算機已成為日常工作中不可或缺的一部分。對于 Windows 用戶而言&#xff0c;SSH&#xff08;Secure Shell&#xff09;協議提供了一種安全、高效的遠程訪問和命令執行方式。SSH 不僅提供了加密的通信通道&#xff0c;…

路由的高級用法

多級路由 1.新建一個Mian組件 <template><div> <h1>我是Msg的子組件</h1></div> </template><script> export default {name: "Mian", } </script><style> </style> 2.在router中msg小新建一個路由 imp…

Canvas合集更更更之實現由畫布中心向外隨機不斷發散的粒子效果

實現效果 1.支持顏色設置 2.支持粒子數量設置 3.支持粒子大小設置 寫在最后&#x1f352; 源碼&#xff0c;關注&#x1f365;蘇蘇的bug&#xff0c;&#x1f361;蘇蘇的github&#xff0c;&#x1f36a;蘇蘇的碼云

java中各種數據類型和集合的判空(代碼演示+工具類)

目錄 基本數據類型 對象類型 集合類型 綜合示例 總結 工具類 hutool 基本數據類型 基本數據類型在Java中不能為null&#xff0c;它們有默認值。基本數據類型包括&#xff1a; intfloatdoublecharbooleanbyteshortlong 因此&#xff0c;對基本數據類型不需要進行判空檢…