【Docker基礎】Dockerfile指令速覽:文件與目錄操作指令詳解

目錄

引言

1 ADD:高級文件復制與解壓

1.1 指令簡介

1.2 語法

1.3 功能詳解

1.4 使用場景

1.5 執行流程

1.6 示例

1.7 注意事項

2 WORKDIR:設置工作目錄

2.1 指令簡介

2.2 語法

2.3 使用場景

2.4 創建流程

2.5 示例

2.6 注意事項

3 VOLUME:管理數據卷

3.1 指令簡介

3.2 語法

3.3 使用場景

3.4 掛載流程

3.5 示例

3.6 注意事項

4 總結


引言

在構建Docker鏡像的過程中,文件與目錄的操作是至關重要的環節,合理地使用這些指令可以有效地管理鏡像中的文件結構、設置工作目錄以及管理數據卷。本文將探討Dockerfile中用于文件與目錄操作的三個關鍵指令:
  • ADD
  • WORKDIR
  • VOLUME

1 ADD:高級文件復制與解壓

1.1 指令簡介

ADD指令用于將文件、目錄或遠程文件復制到鏡像中,與COPY指令相比,ADD提供了額外的功能,如自動解壓本地壓縮文件和從遠程URL獲取文件。

1.2 語法

ADD <src>... <dest> ADD ["<src>",... "<dest>"]
  • :源路徑,可以是本地文件、目錄或遠程URL
  • :目標路徑,在鏡像中的絕對路徑或相對于WORKDIR的路徑

1.3 功能詳解

  • 復制本地文件/目錄:將本地文件或目錄復制到鏡像中
  • 自動解壓壓縮文件:如果是本地壓縮文件(如tar, gzip, bzip2等),ADD會自動解壓到
  • 從遠程URL獲取文件:可以從指定的URL下載文件并復制到鏡像中

1.4 使用場景

  • 復制并解壓應用代碼:將壓縮的應用代碼復制到鏡像中并自動解壓
  • 下載外部資源:從互聯網下載必要的資源文件

1.5 執行流程

  • 使用ADD指令:在Dockerfile中使用ADD指令進行文件操作
  • 源類型?:判斷源的類型是本地文件/目錄、壓縮文件還是遠程URL
  • 復制到鏡像:如果是本地文件或目錄,直接復制到鏡像中
  • 復制并解壓:如果是壓縮文件,復制并自動解壓到目標路徑
  • 下載并復制:如果是遠程URL,下載文件并復制到鏡像中
  • 指定目標路徑:指定文件在鏡像中的目標路徑
  • 應用在容器中使用文件:應用在容器中讀取和使用復制的文件

1.6 示例

ADD app.tar.gz /app 
ADD https://example.com/file.zip /app/

1.7 注意事項

  • 自動解壓:如果不需要自動解壓功能,建議使用COPY指令
  • 遠程URL:從遠程URL獲取文件時,Docker會下載文件并將其存儲在鏡像中,這可能會增加鏡像體積

2 WORKDIR:設置工作目錄

2.1 指令簡介

WORKDIR指令用于設置工作目錄,如果指定的目錄不存在,WORKDIR會創建該目錄,后續的指令(如RUN, CMD, ENTRYPOINT, COPY, ADD等)都會相對于這個工作目錄執行。

2.2 語法

WORKDIR /workdir/path

2.3 使用場景

  • 設置應用的工作目錄:為應用指定一個固定的工作目錄,方便后續操作
  • 組織Dockerfile結構:通過設置不同的工作目錄,組織Dockerfile中的指令,提高可讀性

2.4 創建流程

  • 設置工作目錄:使用WORKDIR指令設置工作目錄
  • 目錄是否存在?:判斷指定的目錄是否已經存在
  • 切換到該目錄:如果目錄存在,切換到該目錄
  • 創建并切換到該目錄:如果目錄不存在,創建該目錄并切換到該目錄
  • 后續指令基于該目錄執行:所有后續指令都會相對于這個工作目錄執行

2.5 示例

WORKDIR /app
RUN pwd
# 輸出: /appWORKDIR /app/data
RUN pwd
# 輸出: /app/data

2.6 注意事項

  • 相對路徑:如果WORKDIR使用的是相對路徑,它會相對于前一個WORKDIR指令的路徑
  • 影響后續指令:所有后續的RUN, CMD, ENTRYPOINT, COPY, ADD等指令都會基于WORKDIR執行

3 VOLUME:管理數據卷

3.1 指令簡介

VOLUME指令用于創建掛載點,用于持久化數據或共享數據,數據卷可以用于在容器之間共享數據,或者將數據持久化到主機文件系統。

3.2 語法

VOLUME ["/data"] VOLUME /data1 /data2

3.3 使用場景

  • 數據持久化:將容器內的數據持久化到主機文件系統,防止數據丟失
  • 數據共享:在多個容器之間共享數據
  • 分離數據與容器:將數據與容器分離,方便數據管理和備份

3.4 掛載流程

  • 聲明數據卷:使用VOLUME指令聲明數據卷
  • 掛載類型?:判斷是匿名掛載還是命名掛載
  • 匿名掛載:如果使用匿名掛載,Docker會自動管理數據卷
  • 命名掛載:如果使用命名掛載,用戶可以指定數據卷的名稱
  • 在docker run中掛載主機目錄:在docker run命令中使用-v或--mount參數掛載主機目錄
  • 應用在容器中使用數據卷:應用在容器中讀取和使用數據卷中的數據

3.5 示例

VOLUME /app/data

3.6 注意事項

  • 數據卷生命周期:數據卷的生命周期獨立于容器,刪除容器時數據卷不會被刪除,除非使用docker volume rm命令
  • 性能考慮:數據卷的性能可能會受到主機文件系統的影響,特別是在使用網絡文件系統時

4 總結

ADD、WORKDIR和VOLUME是Dockerfile中用于文件與目錄操作的關鍵指令,掌握這些指令的使用方法和最佳實踐,可以幫助我們構建更加高效、可維護和安全的Docker鏡像。通過合理的指令組合和優化,可以顯著提升鏡像的構建效率和運行性能。

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

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

相關文章

Python 程序設計講義(2):Python 概述

Python 程序設計講義&#xff08;2&#xff09;&#xff1a;Python 概述 一、Python 語言的發展史 Python 語言誕生于 1990 年。 2002 年 10 月&#xff0c;Python2.0 正式發布。 2008 年 12 月&#xff0c;Python3.0 正式發布。 Python3.0 在語法層面和解釋器內部做了很多重大…

多租戶SaaS系統中設計安全便捷的跨租戶流程共享

四維協同架構??,結合動態授權、加密傳輸、行為審計和智能策略 一、??權限控制體系?? 1. ??動態權限模型? ? 2. ??授權策略實現?? ??RBAC+ABAC混合模型?? 在流程表增加shared_tenants字段存儲授權信息,結合屬性動態校驗: CREATE TABLE workflow_process…

Spring Ioc Bean 到底是什么

Bean 到底是什么&#xff1f; 簡單來說&#xff0c;Spring Bean 就是一個由 Spring IoC 容器負責創建、管理和裝配的 Java 對象。 它不是一種新的技術&#xff0c;它本質上還是一個普普通通的 Java 對象&#xff08;POJO - Plain Old Java Object&#xff09;&#xff0c;但它的…

【PCIe 總線及設備入門學習專欄 5.1.1 -- PCIe PERST# 信號的作用】

文章目錄 PCIe PERSTN#PERST# 信號作用概述簡要定義PERST# 的關鍵功能PERST# 的時序圖示意Synopsys PCIe EP IP 中 PERST# 的作用關鍵信號接口典型復位流程示例代碼(Verilog for Synopsys PCIe)PERST# 使用場景舉例(Synopsys PCIe EP)1. 系統上電初始化2. 熱復位特定設備3.…

使用python的pillow模塊將圖片轉化為灰度圖,獲取值和修改值

使用python的pillow模塊可以將圖片轉化為灰度圖&#xff0c; 可以獲取灰度圖的特定點值&#xff0c;區域值&#xff0c; 修改值并保存到圖片 圖片轉換為灰度圖 from PIL import Image# 打開圖片 image Image.open("d://python//2//1.jpg")gray_image image.convert…

記憶力訓練day41

通常是一個地點記2組詞 數字和人體記憶宮殿更注重 即時性&#xff1b;地點記憶宮殿是長久性

自動微分模塊

一.前言本章節我們是要學習梯隊計算&#xff0c;?動微分&#xff08;Autograd&#xff09;模塊對張量做了進?步的封裝&#xff0c;具有?動求導功能。?動微分模塊是構成神經?絡 訓練的必要模塊&#xff0c;在神經?絡的反向傳播過程中&#xff0c;Autograd 模塊基于正向計算…

深度學習·目標檢測和語義分割基礎

邊緣框 不是標準的x&#xff0c;y坐標軸。邊緣框三種表示&#xff1a;左上右下下坐標&#xff0c;左上坐標長寬&#xff0c;中心坐標長寬 COCO 目標檢測數據集的格式&#xff1a;注意一個圖片有多個物體&#xff0c;使用csv或者文件夾結構的格式不可取。 錨框算法 生成很多…

ffmpeg音視頻處理大綱

FFmpeg 是一個功能強大的開源音視頻處理工具集&#xff0c;其核心代碼以 C 語言實現。下面從源碼角度分析 FFmpeg 如何實現轉碼、壓縮、提取、截取、拼接、合并和錄屏等功能&#xff1a; 一、FFmpeg 核心架構與數據結構 FFmpeg 的源碼結構圍繞以下核心組件展開&#xff1a; lib…

網絡安全小練習

一、docker搭建 1.安裝 2.改變鏡像源&#xff08;推薦國內鏡像源&#xff1a;阿里云鏡像源&#xff09; 登錄阿里云容器鏡像源服務&#xff08; 阿里云登錄 - 歡迎登錄阿里云&#xff0c;安全穩定的云計算服務平臺 &#xff09; 復制系統分配的專屬地址 配置 sudo mkdir …

數據結構——順序表的相關操作

一、順序表基礎認知?1.順序表的定義與特點?順序表是數據結構中一種線性存儲結構&#xff0c;它將數據元素按照邏輯順序依次存儲在一片連續的物理內存空間中。簡單來說&#xff0c;就是用一段地址連續的存儲單元依次存放線性表的元素&#xff0c;且元素之間的邏輯關系通過物理…

2025最新國產用例管理工具評測:Gitee Test、禪道、藍凌測試、TestOps 哪家更懂研發協同?

在快節奏的 DevOps 時代&#xff0c;測試用例管理已不再是 QA 的獨角戲&#xff0c;而是穿透需求—開發—測試—交付全流程的核心樞紐。想象一下&#xff0c;如果用例結構混亂&#xff0c;覆蓋不全&#xff0c;甚至丟失版本變更歷史&#xff0c;不僅協作亂&#xff0c;還影響交…

在線評測系統開發交流

https://space.bilibili.com/700332132?spm_id_from333.788.0.0 實驗內容爬蟲Web系統設計數據分析實驗指導爬蟲Web系統設計自然語言處理與信息檢索數據可視化評分標準FAQ實驗二&#xff1a;在線評測系統實驗概述實驗內容Step1&#xff1a;題目管理Step2&#xff1a;題目評測S…

Linux操作系統從入門到實戰(十)Linux開發工具(下)make/Makefile的推導過程與擴展語法

Linux操作系統從入門到實戰&#xff08;十&#xff09;Linux開發工具&#xff08;下&#xff09;make/Makefile的推導過程與擴展語法前言一、 make/Makefile的推導過程1. 先看一個完整的Makefile示例2. make的工作流程&#xff08;1&#xff09;尋找Makefile文件&#xff08;2&…

NFS磁盤共享

步驟&#xff1a;注意事項?&#xff1a;確保服務端防火墻關閉&#xff0c;或者允許2049端口通信&#xff0c;客戶端需具備讀寫權限。服務器端安裝NFS服務器&#xff1a;sudo apt-get install nfs-kernel-server # Debian/Ubuntu sudo yum install nfs-utils # Ce…

ORA-06413: 連接未打開

System.Data.OracleClient.OracleException:ORA-06413: 連接未打開 oracle 報錯 ORA-06413: 連接未打開 db.Open();的報錯鏈接未打開&#xff0c;System.Data.OracleClient.OracleException HResult0x80131938 MessageORA-06413: 連接未打開 關于ORA-06413錯誤&#xff08;…

【PCIe 總線及設備入門學習專欄 5.1.2 -- PCIe EP core_rst_n 與 app_rst_n】

文章目錄 app_rst_n 和 core_rst_n 的作用1. core_rst_n — PCIe 控制器內部邏輯復位作用控制方式2. app_rst_n — 應用層/用戶邏輯復位作用特點兩者關系圖示:示例流程(Synopsys EP)rst_sync[3] 的作用詳解(復位同步邏輯)為什么使用 rst_sync[3]?圖示說明Synopsys 官方手…

Python初學者筆記第二十期 -- (文件IO)

第29節課 文件IO 在編程中&#xff0c;文件 I/O&#xff08;輸入/輸出&#xff09;允許程序與外部文件進行數據交互。Python 提供了豐富且易用的文件 I/O 操作方法&#xff0c;能讓開發者輕松實現文件的讀取、寫入和修改等操作。 IO交互方向 從硬盤文件 -> 讀取數據 -> 內…

Java JUC包概述

Java 的 java.util.concurrent&#xff08;簡稱 JUC&#xff09;包是 JDK 5 及以后引入的并發編程工具包&#xff0c;旨在解決傳統線程模型&#xff08;如 synchronized、wait/notify&#xff09;的局限性&#xff0c;提供更靈活、高效、可擴展的并發編程組件。它極大簡化了多線…

LeetCode--44.通配符匹配

前言&#xff1a;不知不覺又斷更一天了&#xff0c;其實昨天就把這道題寫得差不多了&#xff0c;只是剛好在力扣里面看見了一種新的解法&#xff0c;本來想寫出來的&#xff0c;但是我把它推到今天了&#xff0c;因為太晚了&#xff0c;但是今天又睡懶覺了&#xff0c;所以我直…