Docker 入門教程(二):Docker 的基本原理

文章目錄

  • 🐳 Docker 入門教程(二):Docker 的基本原理
    • 1. Docker 架構總覽:三大核心角色
    • 2. 鏡像與容器的關系
    • 3. 容器啟動流程:`docker run` 背后發生了什么?

🐳 Docker 入門教程(二):Docker 的基本原理

在學習鏡像與容器的命令操作之前,我們必須弄清楚:Docker 是如何運作的?容器和鏡像到底是什么關系?docker run 背后到底做了什么?
這一節我們通過結構圖 + 原理分析,建立起對 Docker 系統性理解的底層認知。


1. Docker 架構總覽:三大核心角色

Docker 采用經典的客戶端 - 服務端架構(C/S 架構),它主要由以下三部分組成:

在這里插入圖片描述

1.1 Client(客戶端)

客戶端就是我們日常使用的命令行工具,例如:

docker build
docker pull
docker run

這些命令本質上不會直接操作容器或鏡像,而是通過 HTTP API 請求把意圖發送給 Docker 服務端。

1.2 Docker Daemon(服務端)

也稱為 dockerd,是 Docker 的守護進程,負責實際執行一切命令,包括:

  • 拉取鏡像
  • 構建鏡像
  • 創建 / 啟動容器
  • 管理網絡、掛載、資源等

它同時維護兩個最核心的資源:

  • Images(鏡像):只讀模板,用于創建容器
  • Containers(容器):基于鏡像運行出來的隔離進程

1.3 Registry(鏡像倉庫)

這是 Docker 鏡像的集中分發平臺,默認是 Docker Hub,也可以是私有倉庫(如 Harbor)。

Docker Daemon 會在執行 docker pulldocker run 時自動從 Registry 拉取鏡像。


圖解架構流程

+---------+           HTTP API         +-------------------------+
|  Client | ─────────────?──────────? |     Docker Daemon       |
|         |                            | (dockerd)               |
| docker  |                            |                         |
| build   |                            |   +------------+        |
| pull    |                            |   |  Images    |?───────┐
| run     |                            |   +------------+        |
+---------+                            |   | Containers |        ||   +------------+        |+-------------------------+▲│pull/push│+-------------------------------+|           Registry            ||     (Docker Hub or custom)   |+-------------------------------+

2. 鏡像與容器的關系

Docker 中,鏡像(Image)和容器(Container)的關系可以從兩個角度來類比理解:

類比一:類 vs 實例

  • 鏡像 就像一個類(Class)
    它定義了對象的結構、行為和屬性,但不能直接運行。

  • 容器 就是類創建出來的實例(Instance)
    每個容器基于鏡像創建,可以獨立運行、修改、銷毀,彼此互不影響。

類比二:安裝包 vs 軟件

  • 鏡像 像是一個軟件安裝包,里面包含程序代碼和運行環境。它本身是靜態的、不能直接運行。

  • 容器 就是你在電腦上安裝并運行起來的軟件,它有自己的配置、運行數據和狀態。你可以同時運行多個程序實例,它們都來源于同一個安裝包。


3. 容器啟動流程:docker run 背后發生了什么?

當你運行:

docker run redis

Docker 表面上只做了一件事:運行了一個 Redis 容器。
但實際上,它在背后做了一系列工作,整個過程可以拆成幾個簡單的步驟:

第一步:找鏡像

Docker 會先檢查你本地有沒有 redis 鏡像。

  • 有就直接用
  • 沒有就從 Docker Hub 下載

第二步:創建容器

基于鏡像,Docker 創建一個容器。就像“解壓安裝包、準備好環境”。

這一步會:準備一個獨立的運行環境p;分配一個容器 ID;設置網絡和存儲

第三步:啟動容器

Docker 會執行容器里的默認啟動命令(比如 Redis 的服務器進程),讓它真正“跑起來”。

此時容器就進入了運行狀態(Running)。

第四步:資源隔離 & 控制(Docker 背后自動做的)

雖然我們看不見,但 Docker 還會在后臺做幾件重要的事:

  • 資源隔離:讓容器擁有自己獨立的文件系統、網絡、進程空間等
  • 資源限制:防止某個容器用光 CPU 或內存
  • 文件系統掛載:用一種叫 Overlay 的方式疊加鏡像和容器的文件系統,便于讀寫分離

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

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

相關文章

21.安卓逆向2-frida hook技術-HookOkHttp的攔截器

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 內容參考于:圖靈Python學院 工具下載: 鏈接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

小程序入門:swpier 和 swpier-item 的基本使用

在前端開發中,創建交互式的用戶界面組件是至關重要的。今天,我們將深入探討 swpier 和 swpier-item 的基本使用方法,這兩個組件在構建輪播圖等滑動效果的場景中非常實用。 一、swpier 組件概述 swpier 組件是實現滑動效果的核心容器。它負責…

SQL學習筆記4

約束 1、約束 約束,是指作用在表中字段上的規則,用于限制字段輸入的數據,使得表格式統一,數據內容正確。同一個字段的約束可以有多個 約束包括: 非空約束,限制表中的值不為null:not null 唯一約束&…

力扣刷題(第七十天)

靈感來源 - 保持更新,努力學習 - python腳本學習 比特位計數 解題思路 對于任意整數 x,其 1 的個數等于 x // 2 的 1 的個數加上 x % 2。狀態轉移方程:dp[x] dp[x // 2] (x % 2)。 class Solution:def countBits(self, n: int) ->…

鴻蒙網絡編程系列56-倉頡版通過數據包結束標志解決TCP粘包問題

1. TCP粘包問題解決思路 在本系列的上一篇文章演示了TCP數據粘包的原因以及可能的解決方法,本文將通過其中的添加數據包結束標志的方法來解決這個問題。我們知道,數據粘包的原因是因為發送的時候沒有標明數據包的邊界,那么,我們人…

Redis網絡通信模塊深度解析:單線程Reactor到多線程IO的架構演進

一、核心架構:單線程Reactor模型 Redis網絡模塊采用經典Reactor模式,核心流程如下: void aeMain(aeEventLoop *eventLoop) {while (!eventLoop->stop) {// 前置鉤子(集群心跳/數據持久化)if (eventLoop->befor…

PILCO: 基于模型的高效策略搜索方法原理解析

PILCO: 基于模型的高效策略搜索方法原理解析 PILCO (Probabilistic Inference for Learning Control) 是一種基于模型的強化學習算法,由Marc Deisenroth和Carl Rasmussen于2011年提出。該算法在數據效率方面表現出色,能夠以極少的樣本數據實現有效學習。…

大語言模型訓練中的自監督學習和其他訓練方式

大語言模型訓練中的自監督學習和其他訓練方式。 自監督學習(Self-Supervised Learning) 1. 什么是自監督學習? 自監督學習是一種不需要人工標注數據的訓練方式,模型從數據本身學習特征和模式。 在語言模型中的具體實現&#x…

[mcp-servers] 工具與資源 | 模型上下文協議MCP | 錨點分類

第三章:工具與資源 歡迎回來! 在之前的旅程中,我們認識了客戶端(第一章:客戶端)——AI的信使組件 以及MCP服務器(第二章:MCP服務器)——接收請求并具備執行能力的智能助…

2025年06月27日Github流行趨勢

項目名稱:edit 項目地址 url:https://github.com/microsoft/edit項目語言:Rust歷史 star 數:10807今日 star 數:411項目維護者:lhecker, DHowett, b6k-dev, rhysd, MingcongBai項目簡介:我們都編…

Camera Api 2 和 OPEN GL ES 使用(顯示濾鏡效果)

Camera Api 2 和 OPEN GL ES 使用&#xff08;顯示濾鏡效果&#xff09; 相機預覽和open GL 使用實現濾鏡效果 代碼 https://github.com/loggerBill/camera 相機預覽 1.相機動態權限 <uses-permission android:name"android.permission.CAMERA" /><uses-f…

CAS教務系統單點登錄分析

1. 核心 URL 結構 GET /authserver/login?servicehttp%3A%2F%2F192.168.254.188%2Fjsxsd%2Fframework%2FxsMainV.htmlx認證服務器&#xff1a;authserver.XXXX.edu.cn&#xff08;典型 CAS 系統&#xff09;目標服務&#xff1a;http://192.168.254.188/jsxsd/framework/xsMa…

利用云霧自動化在智能無人水面航行器中實現自主碰撞檢測和分類

大家覺得有讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; 抽象 工業信息物理系統 &#xff08;ICPS&#xff09; 技術是推動海上自主化的基礎&#xff0c;尤其是對于無人水面航行器 &#xff08;USV&#xff09;。然而&#xff0c;船上計算限制和通信延遲…

AI+物聯網:從萬物互聯到萬物智聯

AI物聯網&#xff1a;從萬物互聯到萬物智聯的范式革命 當農田傳感器自主決策灌溉時機&#xff0c;當咖啡機根據睡眠數據調節濃度&#xff0c;當城市交通系統在擁堵發生前主動干預——這些場景不再是科幻想象&#xff0c;而是2025年AIoT&#xff08;人工智能物聯網&#xff09;…

Python爬蟲實戰:研究Levenshtein庫相關技術

1. 引言 1.1 研究背景與意義 隨著電子商務的快速發展,網絡上積累了海量的產品數據。這些數據來自不同的電商平臺、賣家,存在著產品名稱不統一、規格描述差異大等問題,給數據整合、價格比較、競品分析等應用帶來了極大挑戰。傳統的精確匹配方法無法處理產品名稱中的拼寫錯誤…

MySQL 總是差八個小時,如何破?

MySQL 總是差八個小時&#xff0c;如何破&#xff1f;_mysql__江南一點雨-Byzer 白澤 解決 SpringBoot 應用中 MySQL 時區配置引起的時間不一致問題 - 路有所思 - 博客園

iOS 為圖片添加水印

(instancetype)waterMarkWithImage:(UIImage *)image andMarkImageName:(NSString *)markName{ UIImage *watermarkImage [UIImage imageNamed:markName]; if (!watermarkImage) { NSLog("水印圖片加載失敗: %", markName); return image; } // 獲取原圖尺寸和方向 …

藍牙工作頻段與跳頻擴頻技術(FHSS)詳解:面試高頻考點與真題解析

藍牙技術憑借其低功耗、短距離通信的特性,已成為物聯網、智能穿戴等領域的核心技術之一。其核心競爭力在于對 2.4GHz ISM 頻段的高效利用與跳頻擴頻技術(FHSS)的創新應用。本文將系統梳理藍牙工作頻段與 FHSS 的高頻考點,并結合歷年真題與解析,快速掌握核心知識,輕松應對…

ArkTS與倉頡開發語言:鴻蒙編程的雙子星

前言 鴻蒙是多語言生態&#xff0c;ArkTS、倉頡和 C/C充分互補。ArkTS 是動態類型編程語言&#xff0c;主打易學易用、生態豐富、極簡開發、持續創新四大特征&#xff1b;倉頡是靜態類型編程語言&#xff0c;主打高性能、強安全、跨平臺、智能化等特性。為滿足不同業務場景訴求…

怎么把本地倉庫push 到gitlab 上

1. 首先 我們需要再gitlab 上建立一個group &#xff0c; &#xff08;group 可也設定是public 還是private&#xff09;&#xff0c;public 可以不用用戶密碼用 https 下載 2. 再gitlab 的group 下 建立一個倉庫 &#xff08;pulbic/private) 如何刪除 一個倉庫&#xff08;…