Docker鏡像基本概念與構建指南

Docker鏡像基本概念與構建指南

一、Docker鏡像基本概念

Docker鏡像是容器運行的基礎,包含應用程序及其運行所需的文件系統、依賴庫、環境變量和配置。其核心特性包括:

  1. 只讀性:鏡像本身不可修改,容器運行時在鏡像層之上創建可寫層。
  2. 分層存儲:由多個只讀層(Layer)疊加組成,每層對應Dockerfile中的一個指令。
  3. 可移植性:鏡像通過注冊中心(如Docker?Hub)實現跨環境部署。

二、鏡像的分層結構

1. 分層機制原理

  • 聯合文件系統(UnionFS):將多個目錄(層)掛載到同一虛擬目錄,上層文件覆蓋下層同名文件。
  • 層復用性:相同層的鏡像可共享存儲,減少磁盤占用。例如,基于ubuntu:22.04的多個鏡像共享基礎層。
  • 寫時復制(Copy-on-Write):容器修改文件時,僅復制目標層到可寫層,不影響原始鏡像。

2. 典型分層示例


FROM?ubuntu:22.04 ????????# 基礎鏡像層(Layer 1)

RUN?apt-get?update ???????# 軟件源更新層(Layer 2)

COPY?app /opt/app ????????# 文件復制層(Layer 3)

CMD?["/opt/app/start.sh"] # 啟動命令層(Layer 4)

每層生成唯一哈希值,修改任意指令會重建后續所有層。

三、構建鏡像的詳細步驟

1. 編寫Dockerfile


# 指定基礎鏡像

FROM?python:3.9-slim

# 設置工作目錄

WORKDIR?/app

# 安裝依賴

COPY?requirements.txt .

RUN?pip?install --no-cache-dir?-r?requirements.txt

# 復制應用代碼

COPY?. .

# 暴露端口

EXPOSE?8000

# 啟動命令

CMD?["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]

2. 構建鏡像


# -t指定鏡像標簽,.表示構建上下文路徑

docker?build -t?myapp:v1 .

# 查看構建過程日志(顯示分層詳情)

docker?build --progress=plain -t?myapp:v1 .

3. 驗證與優化

  • 檢查分層結構

  1. ?history myapp:v1
  • 多階段構建(減少鏡像體積):

  • 構建階段

    FROM?golang:1.20 AS?builder

    WORKDIR?/src

    COPY?. .

    RUN?go?build -o?/app

    運行階段

    FROM?alpine:3.18

    COPY?--from=builder?/app /app

    CMD?["/app"]

四、最佳實踐

  1. 精簡基礎鏡像:優先選擇Alpine、Distroless等輕量鏡像。
  2. 合并指令:減少層數,例如將多個RUN合并:

  1. ?apt-get?update &&?\

    ????apt-get install -y curl && \

    ????rm -rf /var/lib/apt/lists/*
  1. 使用.dockerignore:排除無關文件(如node_modules、.git)。
  2. 定期清理:刪除無用鏡像和中間層:

  1. ?system prune -a

五、常見問題

緩存失效:Dockerfile中指令順序變化會導致后續層緩存失效。

層大小控制:COPY/ADD指令會生成新層,大文件建議通過卷(Volume)掛載。

安全掃描:使用docker scan檢測鏡像漏洞。

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

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

相關文章

如何避免 CDN 緩存泄漏用戶隱私數據

CDN 通過將內容緩存到全球各地的邊緣服務器上,顯著縮短了數據傳輸的物理距離,從而加速了內容的交付。然而,這一技術在提升性能的同時,也悄然埋下了一顆隱私隱患的種子——緩存數據可能被不當訪問或泄漏,進而暴露用戶的敏感信息。 目錄 禁用對用戶個人信息的緩存 僅緩存…

軟考中級數據庫系統工程師學習資料分享

軟考中級數據庫系統工程師考試對于很多 IT 從業者和計算機專業的大學生來說,是一個重要的職業資格認證。它不僅能夠提升個人的專業技能,還能為職業發展增添有力的砝碼。今天,我將為大家分享一套全面且實用的學習資料,幫助大家更好…

數據處理: 均值漂移聚類(Mean Shift)

一、 基本原理 Mean Shift是一種基于密度的非參數聚類算法,不需要預先指定簇的數量,而是通過尋找數據空間中密度最大的區域來自動確定聚類中心, 適合圖像分割和目標跟蹤等。 算法步驟 初始化:對每個數據點作為起點。 迭代:計算…

辛格迪客戶案例 | 蘇州富士萊醫藥GMP培訓管理(TMS)項目

一、案例概述 富士萊醫藥股份有限公司位于美麗的江南水鄉常熟,前身為常熟富士萊醫藥化工有限公司,從建廠初期面積僅有10余畝,逐步擴展到100余畝。近年來公司飛速發展,以黑馬姿態發展成為中國專業生產硫辛酸系列產品、肌肽系列產品…

SQL注入相關知識

一、布爾盲注 1、布爾盲簡介 布爾盲注是一種SQL注入攻擊技術,用于在無法直接獲取數據庫查詢結果的情況下,通過頁面的響應來判斷注入語句的真假,從而獲取數據庫中的敏感信息 2、布爾盲注工作原理 布爾盲注的核心在于利用SQL語句的布爾邏輯…

Linux基礎學習--linux的文件權限與目錄配置

linux的文件權限與目錄配置 1.用戶與用戶組 在Linux中,每個文件都有相當多的屬性和權限,其中最重要的概念就是文件的擁有者。 1.1 文件擁有者 Linux是一個多人多任務的系統,常常有多人共用一臺主機的情況出現,因此在系統中可以…

【數據可視化-19】智能手機用戶行為可視化分析

?? 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個…

vue項目通過GetCapabilities獲取wmts服務元數據信息并在openlayers進行疊加顯示

vue項目通過openlayers加載wmts服務示例&#xff1a; <template><div id"map" ref"mapContainer"></div> </template><script> import ol/ol.css; import Map from ol/Map; import View from ol/View; import TileLayer fr…

JavaWeb學習打卡-Day1-分層解耦、Spring IOC、DI

三層架構 Controller&#xff08;控制層&#xff09;&#xff1a;接收前端發送的請求&#xff0c;對請求進行處理&#xff0c;并響應數據。Service&#xff08;業務邏輯層&#xff09;&#xff1a;處理具體的業務邏輯。DAO&#xff08;數據訪問層/持久層&#xff09;&#xff…

【含文檔+PPT+源碼】基于Python爬蟲二手房價格預測與可視化系統的設計與實現

項目介紹 本課程演示的是一款基于Python爬蟲二手房價格預測與可視化系統&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 帶你從零開始部署運行本套系統 該項…

游戲引擎學習第229天

倉庫:https://gitee.com/mrxiao_com/2d_game_5 回顧上次內容并介紹今天的主題 上次留下的是一個非常簡單的任務&#xff0c;至少第一步是非常簡單的。我們需要在渲染器中加入排序功能&#xff0c;這樣我們的精靈&#xff08;sprites&#xff09;才能以正確的順序顯示。為此我…

【“星瑞” O6 評測】—NPU 部署 face parser 模型

前言 瑞莎星睿 O6 (Radxa Orion O6) 擁有高達 28.8TOPs NPU (Neural Processing Unit) 算力&#xff0c;支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 類型的加速。這里通過通過官方的工具鏈進行FaceParsingBiSeNet的部署 1. FaceParsingBiSeNet onnx 推理 首先從百度網盤…

單例模式的使用場景 以及 餓漢式寫法(智能指針)

單例模式的使用場景 以及 餓漢式寫法&#xff08;智能指針&#xff09; 餓漢式&#xff1a;創建類時就已經創建好了類的實例&#xff08;用智能指針實現&#xff09;什么時候用單例模式&#xff1a;1. 全局配置管理2. 日志系統3. 資源管理器4. 硬件設備訪問總結 餓漢式&#xf…

微信小程序的全局變量(quanjubianliang)

在微信小程序開發中&#xff0c;管理和使用全局變量是一種常見的需求。例如&#xff0c;可以通過小程序的App實例和globalData對象來實現全局變量的存儲和共享。以下是詳細說明&#xff1a; 1. 全局變量的定義 微信小程序提供了 App() 函數&#xff0c;其中可以定義一個 global…

Latex科研入門教程

Introduction 這篇文章適合有markdown基礎的人看,不會的人可以先去學一下markdown. 僅適用于科研入門. 本文使用的latex環境為overleaf Latex概況 文件格式 以.tex為結尾的文件可能有多個.tex文件最終只編譯一個文件,相當于一個文件控制其他子文件. Latex 代碼分為三種&…

FastGPT Docker Compose本地部署與硅基流動免費AI接口集成指南

本文參考&#xff1a;https://doc.tryfastgpt.ai/docs/development/ 一、背景與技術優勢 FastGPT是基于LLM的知識庫問答系統&#xff0c;支持自定義數據訓練與多模型接入。硅基流動&#xff08;SiliconFlow&#xff09;作為AI基礎設施平臺&#xff0c;提供高性能大模型推理引…

19_大模型微調和訓練之-基于LLamaFactory+LoRA微調LLama3

基于LLamaFactory微調_LLama3的LoRA微調 1. 基本概念1.1. LoRA微調的基本原理1.2. LoRA與QLoRA1.3. 什么是 GGUF 2.LLaMA-Factory介紹3. 實操3.1 實驗環境3.2 基座模型3.3 安裝 LLaMA-Factory 框架3.3.1 前置條件 3.4 數據準備3.5 微調和訓練模型torch.cuda.OutOfMemoryError: …

Linux Wlan-四次握手(eapol)框架流程

協議基礎 基于 IEEE 802.1X 標準實現的協議 抓包基礎 使用上一章文章的TPLINK wn722n v1網卡在2.4G 頻段抓包&#xff08;v2、v3是不支持混雜模式的&#xff09; eapol的四個交互流程 根據不同的認證模式不同&#xff0c;兩者的Auth流程有所不同&#xff0c;但是握手流程基…

基于亞馬遜云科技 Amazon Bedrock Tool Use 實現 Generative UI

背景 在當前 AI 應用開發浪潮中&#xff0c;越來越多的開發者專注于構建基于大語言模型&#xff08;LLM&#xff09;的 chatbot 和 AI Agent。然而&#xff0c;傳統的純文本對話形式存在局限性&#xff0c;無法為用戶提供足夠直觀和豐富的交互體驗。為了增強用戶體驗&#xff…

第 2 篇:初探時間序列 - 可視化與基本概念

第 2 篇&#xff1a;初探時間序列 - 可視化與基本概念 (圖片來源: Luke Chesser on Unsplash) 在上一篇《你好&#xff0c;時間序列&#xff01;》中&#xff0c;我們了解了什么是時間序列數據以及學習它的重要性。現在&#xff0c;是時候卷起袖子&#xff0c;真正開始接觸和探…