Dockerfile ADD指令 語法解析

2021-10-10 08:59:07 字數 4372 閱讀 3987

add 語法

add [--chown=:] ... add [--chown=:] ["",... ""]
add 語義·第二種形式需要路徑包含空格。

·--chown僅支援dockerfile構建linux容器,windows容器並不適用。由於linuxwindows中的使用者和使用者組不同,因此使用/etc/passwd/etc/group將使用者和組名稱轉換為id時限制了此功能僅適用於基於linux作業系統的容器。

·add指令從複製檔案、目錄以及遠端檔案到映象檔案系統的。

·可以指定多個資源,但如果它們是檔案或目錄,則它們的路徑被解釋為相對於構建上下文的源。

·每個可以包含萬用字元,匹配將使用go語言的filepath.match規則進行。例如:

1)*配合任意多個任意字元,匹配hom開頭的任意檔案。

add hom* /mydir/
2)?用於匹配單個字元,匹配home.txthoms.txt等等檔案。

add hom?.txt /mydir/
·是乙個絕對路徑或者相對於workdir的路徑,將被複製到目標容器中。例如:

1)的值是:/relativedir/

copy test.txt relativedir/
2)的值是:絕對路徑/absolutedir/

copy test.txt /absolutedir/
·除非可選的--chown標誌指定給定的使用者名稱、組名或uid/gid組合來請求複製內容的特定所有權,否則所有新檔案和目錄都將使用uidgid為0建立。--chown標誌的格式允許usernamegroupname字串,也可以是任意組合的整數uidgid。提供沒有groupname的使用者名稱或沒有giduid將使用與gid相同的數字uid。如果提供了使用者名稱或組名,容器root檔案系統的/etc/passwd/etc/group檔案將分別用於執行從名稱到整數uidgid的轉換。

add --chown=55:mygroup files* /somedir/

add --chown=bin files* /somedir/

add --chown=1 files* /somedir/

add --chown=10:11 files* /somedir/

·如果容器root檔案系統不包含/etc/passwd/etc/group檔案,並且--chown標誌中使用了使用者名稱或組名,則~操作將失敗。使用數字標識不需要查詢,也不依賴於容器根檔案系統內容。

·add遵循以下規則:

1)路徑必須在構建的上下文中;不能複製../something/something,因為docker構建的第一步是將上下文目錄(和子目錄)傳送到docker守護程序。

4)如果是乙個目錄,複製目錄的整個內容,包括檔案系統元資料。目錄本身不被複製,只複製其內容。

5)如果是使用可識別的壓縮格式(identity、gzip、bzip2或xz)的本地tar歸檔檔案,則將其解壓為乙個目錄。來自遠端url的資源不會解壓縮。當目錄被複製或解包時,它的行為與tar -x相同,結果是:

① 目的地路徑上存在的任何東西。

② 源目錄樹的內容,以「2」為單位解決衝突。

③ 檔案是否被標識為可識別的壓縮格式完全取決於檔案的內容,而不是檔案的名稱。例如,如果乙個空檔案碰巧以結尾.tar.gz這將不會被識別為壓縮檔案,也不會生成任何型別的解壓縮錯誤訊息,而是將檔案簡單地複製到目標。

6)如果是任何其他型別的檔案,則單獨複製它及其元資料。在這種情況下,如果以乙個斜槓/結尾,它將被視為乙個目錄,的內容將寫入/base()。

7)如果直接或由於使用萬用字元指定了多個資源,則必須是乙個目錄,並且必須以斜槓/結尾。

8)如果沒有以尾隨斜槓結尾,它將被視為常規檔案,的內容將寫入。

9)如果不存在,則會連同路徑中所有丟失的目錄一起建立。

add 示例

·指定為帶萬用字元檔案,指定絕對目錄。

1)進入/securitit/dockerfile/add目錄(根據個人選擇,這是本文使用的目錄),新增demo.png和test.png,用於dockferfile

2)進入/securitit/dockerfile/目錄,建立dockerfile檔案。

from nginx

maintainer securitit

add /add/*.png /securitit/

cmd /bin/bash

3)執行如下的構建命令,基於dockerfile構建映象。

4)檢視映象資訊。

5)指定通過dockerfile生成的映象啟動容器。

docker run --name securitit-nginx-add -it -d -p 80:80 securitit-nginx-add:1.0.0.1
6)檢視容器資訊。

docker ps -a
7)進入容器,確認檔案是否已新增到容器內/securitit/目錄下。

從結果可見,demo.pngtest.png已從宿主機的/securitit/dockerfile/add/目錄下複製到了容器/securitit/目錄下。

總結

若文中存在錯誤和不足,歡迎指正!

arm指令 ldr指令

ldr指令ldr作為指令 偽指令在arm彙編中。ldr指令格式 ldr 目的暫存器,儲存器位址 ldr r0,r1 將儲存器位址為r1的字資料讀入暫存器r0。ldr r0,r1,r2 將儲存器位址為r1 r2的字資料讀入暫存器r0。ldr r0,r1,8 將儲存器位址為r1 8的字資料讀入暫存器r0...

vim指令,linux指令

在normal模式 也就是按了esc 下 u 撤銷上一次操作 0 到本行的開頭 到本行第乙個字元的開頭 到本行的結尾 w 到下乙個單詞的開頭 e 到下乙個單詞的結尾 zz wq 儲存並退出 gg 到文章的開頭 3g 到文章的第三行 g 到文章的結尾 abc 在游標以後的位置找到abc這個字元。此時按...

jsp指令的include指令

include指令為檔案載入指令。被載入的檔案可以是文字檔案,html檔案,jsp檔案。myjsp1.jsp檔案中的 page contenttype text html charset gb2312 include file a.txt a.txt中的 hello txt 2 在myjsp2.js...