文理生活圈

 找回密码
 立即注册

快捷登录

搜索
热搜: 活动 交友 discuz
查看: 47|回复: 0

確定影像的血統

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2024-4-17 11:34:39 | 显示全部楼层 |阅读模式
提出此建議的原因有二。首先,一些使用者擔心 Docker 在建置映像時使用的緩存,這可能無法為每次執行時可能產生新結果的 Dockerfile 語句提供預期的好處。這種說法是可以理解的,但往往並不是特別重要,因為創作過程不一定會經常進行,也不會花費特別長的時間。第二個原因是,出於調試目的,稍後創建完全相同的映像可能會很有用 - 但如果每次建置運行都可能使用略有不同的套件版本,則這是不可能的。我建議根據您自己的優先順序評估這些方面,類似於我之前描述的父映像注意事項。 當然,您也可以使用類似更新軟體包的命令來安裝其他軟體。對於 Alpine,可以使用 apk add package完成此操作;對於 Debian,可以使用 apt-get install -y package完成此操作。我建議在一個命令中安裝所有必需的套件,並在必要時使用 && 連結多個相關命令



透過這樣做,您可以為 Docker 提供優化建置流程的機會。 基本上,過程的複雜 沙烏地阿拉伯 電話號碼 性沒有限制。但是,您應該制定一致性計劃並進行長期思考。例如,如果您打算修改容器中服務的原始設定文件,理論上您可以使用 diff 甚至使用 sed 來修補該文件。然而,這可能容易出錯,並且如果幾個月後圖像的新版本突然停止執行其應該執行的操作,則可能很難準確記住導致特定 sed 腳本的情況,例如它首先被創建並領導。在這種情況下,我的建議是在外部保留和維護設定檔的副本。然後可以透過 COPY 將其傳輸到映像,甚至可以簡單地在外部使用(使用 docker run 的 -v 選項)。 透過多個建置步驟提高效率 對於複雜的構建,還有另一個細節需要考慮:構建過程中生成的所有資料仍然存儲在映像中。透過刪除臨時檔案來保持較小的影像體積是值得的。





在某些情況下,您可以為此目的簡單地刪除特定檔案或目錄此範例中,我使用語法擴充作為建構器為父 debian 指派名稱。如上所述,接下來是安裝說明 - 這意味著 C 編譯器可用。我建立一個目錄並將原始碼檔案複製到圖像中。我調用編譯器並為 C 程式創建二進位。 現在到了令人驚奇的部分:第二部分以新的 FROM 語句開始。出於演示目的,我現在使用 Alpine 映像(對於開發人員:這就是為什麼我還將 -static 傳遞給編譯器,以便二進位檔案在新環境中運行) - 當然,我也可以使用與父級相同的映像第二次。 COPY 語句現在將編譯的二進位檔案從建置的第一步複製到第二個映像中的目標目錄。您可以看到我如何使用 –from=builder 選項來指定來源步驟的名稱。 這種方法可用於非常複雜的操作,並為 Docker 開啟了許多新的用例。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|在线考试

GMT+8, 2024-12-28 08:15 , Processed in 0.068124 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表