【Docker基礎】Dockerfile構建與運行流程完全指南:從原理到實踐優化

目錄

引言

1 docker build命令參數詳解

1.1 命令概述

1.2 常用參數詳解

1.2.1 -t, --tag

1.2.2 -f, --file

1.2.3 --build-arg

1.2.4 --no-cache

1.2.5 --pull

1.3 構建流程圖解

2 構建上下文(Context)優化技巧

2.1 構建上下文定義

2.2 優化策略

2.2.1 使用.dockerignore文件

2.2.2 精簡構建路徑

2.2.3 多階段構建(Multi-Stage Build)

2.3 流程:構建上下文優化

3 鏡像標簽(Tag)的規范使用

3.1 標簽的作用

3.2 標簽規范

3.2.1 語義化版本(Semantic Versioning)

3.2.2 環境標識

3.2.3 時間戳標簽

3.2.4 latest標簽

3.3 標簽管理流程

4 總結


引言

Dockerfile是構建Docker鏡像的核心配置文件,而docker build命令則是將Dockerfile轉化為實際鏡像的關鍵工具。理解構建過程中的關鍵參數、優化技巧和標簽管理方法,對于提高鏡像構建效率和可維護性至關重要。

1 docker build命令參數詳解

1.1 命令概述

  • docker build命令通過讀取Dockerfile和構建上下文(Context)來創建鏡像,其基本語法為:
docker build [OPTIONS] PATH | URL | -

1.2 常用參數詳解

1.2.1 -t, --tag

  • 作用:為構建的鏡像指定名稱和標簽
  • 語法
docker build -t <image_name>:<tag>
  • 示例
docker build -t myapp:1.0 .
  • 說明
  • myapp為鏡像名稱,1.0為標簽
  • 若不指定標簽,默認使用latest

1.2.2 -f, --file

  • 作用:指定非默認路徑的Dockerfile
  • 語法
docker build -f <dockerfile_path>
  • 示例
docker build -f ./docker/Dockerfile.prod -t myapp:prod .
  • 說明
  • 默認情況下,Docker會在構建上下文根目錄查找名為Dockerfile的文件

1.2.3 --build-arg

  • 作用:傳遞構建參數到Dockerfile中的ARG指令
  • 語法
docker build --build-arg <key>=<value>
  • 示例
docker build --build-arg VERSION=2.3.1 -t myapp:2.3.1 .
  • Dockerfile示例
ARG VERSION=1.0
ENV APP_VERSION=${VERSION}

1.2.4 --no-cache

  • 作用:禁用緩存,強制重新構建所有層
  • 語法
docker build --no-cache
  • 示例
docker build --no-cache -t myapp:1.0 .
  • 說明
  • 默認情況下,Docker會緩存已構建的層以加速后續構建
  • 當Dockerfile發生變更或需要強制重新構建時使用

1.2.5 --pull

  • 作用:始終拉取最新版本的基礎鏡像
  • 語法
docker build --pull
  • 示例
docker build --pull -t myapp:1.0 .
  • 說明
  • 默認情況下,Docker會使用本地緩存的基礎鏡像
  • 使用--pull可確保使用倉庫中最新的基礎鏡像

1.3 構建流程圖解

  • 路徑指定:通過-f參數指定Dockerfile路徑,否則默認當前目錄
  • 標簽命名:使用-t為鏡像命名和版本化
  • 參數傳遞:通過--build-arg傳遞構建時參數
  • 緩存控制:通過--no-cache禁用緩存
  • 基礎鏡像更新:使用--pull確保使用最新基礎鏡像

2 構建上下文(Context)優化技巧

2.1 構建上下文定義

構建上下文是docker build命令執行時傳遞給Docker守護進程的文件系統目錄,Docker守護進程在構建過程中只能訪問該上下文內的文件。

2.2 優化策略

2.2.1 使用.dockerignore文件

  • 作用:排除不需要的文件,減少構建上下文的體積
  • 示例
# .dockerignore文件內容
node_modules/
*.log
.git/

2.2.2 精簡構建路徑

  • 技巧:將Dockerfile放在項目根目錄,并僅包含必要文件
  • 錯誤示例
# 在/home/user/project目錄下執行
docker build -t myapp:1.0 /home/user/project
  • 正確示例
cd /home/user/project 
docker build -t myapp:1.0 .

2.2.3 多階段構建(Multi-Stage Build)

  • 作用:分離構建環境和運行環境,減少最終鏡像體積
  • Dockerfile示例
# 構建階段:編譯代碼
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .# 運行階段:輕量級鏡像
FROM alpine:3.16
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
  • 說明
  • AS builder為構建階段命名
  • COPY --from=builder從構建階段復制編譯結果

2.3 流程:構建上下文優化

3 鏡像標簽(Tag)的規范使用

3.1 標簽的作用

鏡像標簽用于標識鏡像版本、用途或環境,便于管理和部署

3.2 標簽規范

3.2.1 語義化版本(Semantic Versioning)

  • 格式:主版本.次版本.修訂號
  • 示例
docker build -t myapp:1.2.3 .
  • 說明
  • 1(主版本):重大功能更新或API變更
  • 2(次版本):新增功能但保持兼容性
  • 3(修訂號):問題修復或優化

3.2.2 環境標識

  • 格式:鏡像名-環境:版本
  • 示例
docker build -t myapp-dev:1.0 . docker build -t myapp-prod:1.0 .
  • 說明
  • dev:開發環境
  • prod:生產環境

3.2.3 時間戳標簽

  • 格式:鏡像名-YYYYMMDD
  • 示例
docker build -t myapp-20250708:1.0 .
  • 適用場景:快速迭代或CI/CD流水線

3.2.4 latest標簽

  • 作用:標識最新穩定版本
  • 示例
docker tag myapp:1.0 myapp:latest
  • 注意:latest標簽不自動更新,需手動維護

3.3 標簽管理流程

標簽策略建議:
  • 生產環境:使用語義化版本(如myapp:2.1.0)
  • 測試環境:使用環境標識(如myapp:2.1.0-test)
  • 臨時鏡像:使用時間戳(如myapp:2.1.0-20250708)

4 總結

  • 掌握docker build命令參數、構建上下文優化技巧和鏡像標簽規范,是高效管理Docker鏡像的基礎
  • 通過合理配置構建參數、減少上下文冗余以及規范標簽使用,可以顯著提升構建效率和鏡像可維護性
  • 實際應用中,建議結合多階段構建和.dockerignore文件,最大化優化構建過程

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

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

相關文章

StarRocks Community Monthly Newsletter (Jun)

版本動態 v3.5.0 存算分離&#xff1a;支持生成列、主鍵表重建索引&#xff1b;大規模導入邏輯優化&#xff0c;降低小文件數量。 數據湖分析&#xff1a;Beta 支持 Iceberg 視圖創建與修改&#xff1b;支持 Iceberg REST Catalog 嵌套命名空間&#xff1b; 性能提升與查詢優…

HDMI接口 vs. DisplayPort接口:電競玩家該如何選擇更優?

在搭建游戲主機或電競PC時&#xff0c;顯示器接口的選擇&#xff08;HDMI vs. DP&#xff09;會直接影響畫質、刷新率和延遲表現。本文將從分辨率、刷新率、可變刷新率&#xff08;VRR&#xff09;、帶寬、兼容性等角度對比&#xff0c;幫你選出最適合游戲的接口。1. 基礎對比&…

論文筆記:Learning Cache Replacement with CACHEUS

2021 USENIX GitHub - sylab/cacheus: The design and algorithms used in Cacheus are described in this USENIX FAST21 paper and talk video: https://www.usenix.org/conference/fast21/presentation/rodriguez Learning Cache Replacement with CACHEUS 1 intro 基于…

極致cms多語言建站|設置主站默認語言與設置后臺固定語言為中文

小記 很長時間沒有建站了,最近有需求所以又回爐了&#xff0c;使用的極致cms 極致cms幫助文檔 | 極致CMS幫助文檔 由于很長時間沒做&#xff0c;又遇到了之前碰到的兩個問題&#xff0c;憑借經驗和記憶還是處理掉了 1.當網站前臺使用?len或?lzh來切換語言時&#xff0c;管…

Linux Vim 編輯器詳解:從入門到進階(含圖示+插件推薦)

前言在 Linux 的世界中&#xff0c;Vim 是一款被無數開發者喜愛和追捧的強大文本編輯器。如果你厭倦了鼠標點來點去&#xff0c;不妨試試 Vim —— 一款專注于高效鍵盤操作的“終極利器”。本文將帶你全面了解 Vim 的基本概念、模式切換、常用命令、窗口管理&#xff0c;并附上…

web前端渡一大師課 01 事件循環

一. 瀏覽器的進程模型 1.何為進程?程序運行需要有它自己專屬的內存空間,可以把這塊內存空間簡單理解為進程 每個應用至少有一個進程,進程之間相互獨立,即使要通信,也需要雙方同意 2.何為線程?有了進程后,就可以運行程序的代碼了,運行代碼的"人",稱之為"線程&…

linux網絡存儲——freeNAS的安裝配置

一、前言 freeNAS 是一款基于 FreeBSD 的開源網絡存儲操作系統&#xff0c;支持文件共享&#xff08;如 SMB/CIFS、NFS、AFP&#xff09;、數據備份、虛擬化存儲等功能。同時FreeNAS開源優勢明顯&#xff0c;代碼開放可自主定制&#xff0c;能滿足多樣需求。支持多種協議…

深度學習圖像分類數據集—七種樹葉識別分類

該數據集為圖像分類數據集&#xff0c;適用于ResNet、VGG等卷積神經網絡&#xff0c;SENet、CBAM等注意力機制相關算法&#xff0c;Vision Transformer等Transformer相關算法。 數據集信息介紹&#xff1a;七種樹葉識別分類&#xff1a;[冬青葉, 楊樹葉, 柳葉, 梧桐葉, 石楠葉,…

c++圖形題練習程序

一.練習題背景 這題是作者再一家公司實習的時候&#xff0c;實習期間的一個考核題目&#xff0c;感覺還是比較有價值的。希望能給還在努力的學弟學妹們一些啟發。 題目大致就是要求用繼承和多態來實現圓、三角形和長方形的面積和周長求解。這步的大致思路是這樣的&#xff0c;你…

【論文閱讀 | PR 2024 |ITFuse:一種用于紅外與可見光圖像融合的交互式 Transformer】

論文閱讀 | PR 2024 |ITFuse&#xff1a;一種用于紅外與可見光圖像融合的交互式 Transformer1.摘要&&引言2.方法2.1 問題表述2.2 框架概述2.3 特征交互模塊2.3.1 共同特征提取分支&#xff08;IcI_{c}Ic? 分支&#xff09;2.3.2 獨特特征提取分支&#xff08;I1I_{1}I…

【Qt】 設計模式

在Qt應用程序開發中&#xff0c;結合數據庫操作、通信、界面邏輯和顯示等功能&#xff0c;以下是常用的設計模式及其典型應用場景&#xff1a; 一、MVC/MVVM&#xff08;模型-視圖-控制器/視圖模型&#xff09; 作用&#xff1a;分離數據&#xff08;模型&#xff09;、界面&am…

【HarmonyOS】ArkUI-X 跨平臺框架入門詳解(一)

【HarmonyOS】ArkUI-X 跨平臺框架入門詳解&#xff08;一&#xff09; 一、前言 1、ArkUI-X框架是什么&#xff1f; ArkUI-X是在ArkUI開發框架的基礎上&#xff0c;進行擴展。支持多個OS平臺&#xff0c;目前支持OpenHarmony、HarmonyOS、Android、 iOS。2、ArkUI-X目前的能力現…

開發者進化論:駕馭AI,開啟軟件工程新紀元

導語&#xff1a;人工智能&#xff08;AI&#xff09;的浪潮&#xff0c;特別是以大型語言模型&#xff08;LLM&#xff09;為代表的生成式AI&#xff0c;正以前所未有的力量&#xff0c;深刻地重塑著軟件開發的傳統疆域。我們正處在一個關鍵的轉折點——產業的重心正從模型的“…

智慧水務平臺,智慧水務,惠及民生,提升水務管理效率與服務質量

平升電子智慧水務平臺支持海量物聯網數據接入實現供水全流程信息化&#xff0c;深度邏輯運算自動控制實現供水調度智慧化&#xff0c;融入管網地理信息系統實現測點數據時空化&#xff0c;數字孿生實現水廠各工藝環節運行情況可視化&#xff0c;多角度統計分析實現水務運營管理…

【Unity基礎】Unity中元素的層級排序

在Unity中&#xff0c;控制元素的層級排序&#xff08;渲染順序&#xff09;是確保場景正確顯示的關鍵。以下是常見的層級排序方式及其適用場景&#xff1a;1. 通過GameObject的層級順序&#xff08;Sorting Layer/Order in Layer&#xff09; 適用對象&#xff1a;2D精靈&…

梁的振動特征函數分析2

問題7&#xff1a;左端固定、右端自由梁的振動分析 考慮梁的振動方程&#xff1a; uttKuxxxx0,0<x<l,K>0 u_{tt} K u_{xxxx} 0, \quad 0 < x < l, \quad K > 0 utt?Kuxxxx?0,0<x<l,K>0 邊界條件&#xff1a; 左端固定&#xff08;位移和斜率為零…

AI問答-Token:在人工智能領域,Token 是模型處理文本的核心單元 / 最小可處理片段

一、在人工智能領域&#xff0c;Token 是模型處理文本的核心單元&#xff0c;可理解為文本的“最小可處理片段”二、表格理解類別詳細說明基本定義Token 是模型處理文本的最小語義或語法單位&#xff0c;可以是單詞、子詞、字符、標點符號或特殊符號。例如&#xff1a;- 單詞級…

讀取ubuntu的磁盤分區表與超級塊

1.讀取磁盤分區表sudo fdisk -l /dev/sda2.計算偏移量分區起始偏移 4096 512 2097152 字節 超級塊位置 2097152 1024 2098176字節3.快速驗證&#xff08;直接檢查魔數 53 &#xff09;# 檢查偏移 2,098,176 處是否有 EXT4 魔數 sudo dd if/dev/sda bs1 count2 skip$((209…

科技馴服烈日狂沙:中東沙漠農場的光儲革命

作者 | 小葳 阿布扎比郊外的午后&#xff0c;沙漠灼熱、干旱難耐。 然而一座農場內&#xff0c;景象截然不同&#xff1a;蔬菜生機盎然&#xff0c;果實掛滿枝頭。農戶輕點手機&#xff0c;遠程調控著大棚內溫濕度&#xff1b;灌溉與施肥&#xff0c;則由系統自動精準執行。 這…

基于Chinese-CLIP與ChromaDB的中文圖像檢索功能實現

本文按“原理 → 代碼 → 講解”三層展開&#xff0c;讀者只需具備 Python 基礎即可跟隨完成一個可落地的以文搜圖應用。 一、整體思路 把圖片和文字都轉成固定長度的向量&#xff08;768 維&#xff09;。把圖片向量提前存入向量數據庫。查詢時把文字轉成向量&#xff0c;再找…