国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Dockerfile 指令的最佳實踐

這篇具有很好參考價值的文章主要介紹了Dockerfile 指令的最佳實踐。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Dockerfile 指令的最佳實踐,docker,java,開發(fā)語言

這些建議旨在幫助您創(chuàng)建一個高效且可維護(hù)的Dockerfile。

一、FROM

盡可能使用當(dāng)前的官方鏡像作為鏡像的基礎(chǔ)。Docker推薦Alpine鏡像,因為它受到嚴(yán)格控制,體積?。壳安坏? MB),同時仍然是一個完整的Linux發(fā)行版。


FROM [--platform=<platform>] <image> [AS <name>]

or

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

or

FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

FROM指令初始化新的構(gòu)建階段,并為后續(xù)指令設(shè)置基本鏡像。因此,有效的Dockerfile必須以FROM指令開頭。

鏡像可以是任何有效的鏡像——從公共存儲庫中提取鏡像尤其容易:

  • ARG是Dockerfile中FROM之前的唯一指令
  • FROM可以在單個Dockerfile中多次出現(xiàn),以創(chuàng)建多個鏡像,或者將一個構(gòu)建階段用作另一個的依賴項。只需在每條新的FROM指令之前記下提交輸出的最后一個鏡像ID即可。每個FROM指令都會清除先前指令創(chuàng)建的任何狀態(tài)。
  • 可選地,可以通過將AS名稱添加到FROM指令來為新的構(gòu)建階段指定名稱。該名稱可以在隨后的FROM和COPY-FROM=<name>指令中使用,以引用在此階段構(gòu)建的鏡像。
  • 標(biāo)記值或摘要值是可選的。如果省略其中任何一個,則默認(rèn)情況下構(gòu)建器將采用最新的標(biāo)記。如果生成器找不到標(biāo)記值,則返回一個錯誤。

可選的--platform標(biāo)志可用于在FROM引用多平臺映像的情況下指定鏡像的平臺。例如,linux/amd64、linux/arm64或windows/amd64。默認(rèn)情況下,將使用構(gòu)建請求的目標(biāo)平臺。全局構(gòu)建參數(shù)可以用于此標(biāo)志的值,例如,自動平臺ARG允許您將階段強(qiáng)制到本機(jī)構(gòu)建平臺(--platform=$BUILDPORM),并使用它交叉編譯到階段內(nèi)的目標(biāo)平臺。?

二、LABEL

您可以在鏡像中添加標(biāo)簽,以幫助按項目組織鏡像、記錄許可信息、幫助實現(xiàn)自動化或出于其他原因。對于每個標(biāo)簽,添加一行,以label開頭,包含一個或多個鍵值對。以下示例顯示了不同的可接受格式。解釋性意見包括在內(nèi)。
帶空格的字符串必須加引號或轉(zhuǎn)義空格。還必須轉(zhuǎn)義內(nèi)部引號字符(“)。例如:?

# Set one or more individual labels
LABEL com.example.version="0.0.1-beta"
LABEL vendor1="ACME Incorporated"
LABEL vendor2=ZENITH\ Incorporated
LABEL com.example.release-date="2015-02-12"
LABEL com.example.version.is-production=""

一個鏡像可以有多個標(biāo)簽。在Docker 1.10之前,建議將所有標(biāo)簽合并為一個LABEL指令,以防止創(chuàng)建額外的層。這不再是必要的,但仍然支持組合標(biāo)簽。例如:

# Set multiple labels on one line
LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12"

上面的例子也可以寫成:

# Set multiple labels at once, using line-continuation characters to break long lines
LABEL vendor=ACME\ Incorporated \
      com.example.is-beta= \
      com.example.is-production="" \
      com.example.version="0.0.1-beta" \
      com.example.release-date="2015-02-12"

三、RUN

將長的或復(fù)雜的RUN語句拆分到多行,用反斜杠分隔,使Dockerfile更具可讀性、可理解性和可維護(hù)性。

1、apt-get

RUN最常見的用例可能是apt-get的應(yīng)用程序。因為它安裝了軟件包,RUN-apt-get命令有幾個反直覺的行為需要注意。
總是在同一個RUN語句中結(jié)合RUN apt-get-update和apt-get-install。例如:

RUN apt-get update && apt-get install -y \
    package-bar \
    package-baz \
    package-foo  \
    && rm -rf /var/lib/apt/lists/*

在RUN語句中單獨(dú)使用apt-get-update會導(dǎo)致緩存問題和隨后的apt-get-install指令失敗。例如,此問題將出現(xiàn)在以下Dockerfile中:

# syntax=docker/dockerfile:1

FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y curl

構(gòu)建鏡像后,所有層都在Docker緩存中。假設(shè)您稍后通過添加一個額外的包來修改apt-get-install,如以下Dockerfile所示:

# syntax=docker/dockerfile:1

FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y curl nginx

Docker認(rèn)為初始指令和修改后的指令是相同的,并重用前面步驟中的緩存。因此,由于構(gòu)建使用了緩存版本,所以不會執(zhí)行apt-get更新。因為apt-get更新沒有運(yùn)行,所以您的構(gòu)建可能會得到curl和nginx包的過時版本。
使用RUN apt-get-update&&apt-get-install-y確保您的Dockerfile安裝最新的軟件包版本,無需進(jìn)一步編碼或手動干預(yù)。這種技術(shù)被稱為緩存破壞。您還可以通過指定包版本來實現(xiàn)緩存破壞。這就是所謂的版本固定。例如:

RUN apt-get update && apt-get install -y \
    package-bar \
    package-baz \
    package-foo=1.3.*

版本固定強(qiáng)制構(gòu)建檢索特定版本,而不管緩存中有什么。這種技術(shù)還可以減少由于所需軟件包中的意外變化而導(dǎo)致的故障。
下面是一個格式良好的RUN說明,演示了所有的apt-get建議。

RUN apt-get update && apt-get install -y \
    aufs-tools \
    automake \
    build-essential \
    curl \
    dpkg-sig \
    libcap-dev \
    libsqlite3-dev \
    mercurial \
    reprepro \
    ruby1.9.1 \
    ruby1.9.1-dev \
    s3cmd=1.1.* \
 && rm -rf /var/lib/apt/lists/*

s3cmd參數(shù)指定版本1.1.*。如果映像以前使用的是舊版本,則指定新版本會導(dǎo)致apt-get-update的緩存中斷,并確保安裝新版本。在每行列出包也可以防止包重復(fù)中的錯誤。
此外,當(dāng)您通過刪除/var/lib/apt/lists來清理apt緩存時,它會減小鏡像大小,因為apt緩存不是存儲在層中的。由于RUN語句以apt-get-update開始,因此總是在安裝apt-get之前刷新包緩存。文章來源地址http://www.zghlxwxcb.cn/news/detail-776074.html

到了這里,關(guān)于Dockerfile 指令的最佳實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Docker學(xué)習(xí)筆記(三)Dockerfile指令詳解

    Docker學(xué)習(xí)筆記(三)Dockerfile指令詳解

    基礎(chǔ)鏡像是構(gòu)建鏡像的起點(diǎn),定制鏡像都需要以一個鏡像為基礎(chǔ),然后對其進(jìn)行修改,F(xiàn)rom就是用來指定基礎(chǔ)鏡像的,因此Dockerfile中From是必備的指令,而且必須是第一條。 Docker中存在一個特殊鏡像名為 scratch 這個鏡像并不存在,僅表示一個空白的鏡像,下一條指令會作為鏡像

    2024年04月16日
    瀏覽(21)
  • Docker技術(shù)入門| Part03:Dockerfile詳解(Dockerfile概念、Dockerfile 指令、使用Dockerfile構(gòu)建鏡像)

    Docker鏡像原理 Docker鏡像是由特殊的文件系統(tǒng)疊加而成 最底端是bootfs,并使用宿主機(jī)的bootfs 第二層是root文件系統(tǒng)rootfs,稱為base image 然后再往上可以疊加其他的鏡像文件 統(tǒng)文件系統(tǒng)(UnionFile System)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€文件系統(tǒng),為這些層提供了一個統(tǒng)的視角,這樣就隱

    2024年02月09日
    瀏覽(92)
  • 【零基礎(chǔ)入門Docker】Dockerfile中的USER指令以及dockerfile命令詳解

    【零基礎(chǔ)入門Docker】Dockerfile中的USER指令以及dockerfile命令詳解

    ? 面向讀者:所有人 ? 所屬專欄:Docker零基礎(chǔ)入門專欄 目錄 第 1 步:創(chuàng)建 Dockerfile 第 2 步:構(gòu)建 Docker 鏡像 第 3 步:運(yùn)行 Docker 容器 第 4 步:驗證輸出 dockerfile命令詳解 最佳實踐 默認(rèn)情況下,Docker 容器以 Root 用戶身份運(yùn)行。如果您在 Docker 容器內(nèi)大規(guī)模部署應(yīng)用程序,這

    2024年02月05日
    瀏覽(44)
  • Docker的數(shù)據(jù)管理和Dockerfile的指令

    Docker的數(shù)據(jù)管理和Dockerfile的指令

    管理 Docker 容器中數(shù)據(jù)主要有兩種方式: 數(shù)據(jù)卷(Data Volumes)和數(shù)據(jù)卷容器(DataVolumes Containers)。 1、數(shù)據(jù)卷 數(shù)據(jù)卷是一個供容器使用的特殊目錄,位于容器中??蓪⑺拗鳈C(jī)的目錄掛載到數(shù)據(jù)卷上,對數(shù)據(jù)卷的修改操作立刻可見,并且更新數(shù)據(jù)不會影響鏡像,從而實現(xiàn)數(shù)據(jù)在

    2024年02月15日
    瀏覽(19)
  • 玄子Share-自然語言編程(NLP)_Java開發(fā)小白向 ChatGPT 提問的最佳模板

    以下內(nèi)容均為 ChatGPT 回答 玄子: 我向你提問時,問題描述精確的重要性 ChatGPT 3.5 問題描述的精確性非常重要,因為它可以讓回答者更好地理解您的問題,并且更容易提供準(zhǔn)確和有用的解決方案。如果問題描述不夠清晰或不夠詳細(xì),回答者可能會誤解您的問題或者理解不到位

    2023年04月09日
    瀏覽(28)
  • Docker安全最佳實踐

    Docker安全最佳實踐

    目錄 1、探測容器開放端口和服務(wù)漏洞 2、宿主機(jī)、網(wǎng)絡(luò)、鏡像、DockerApi安全 3、更新Docker、日志、事件 4、Docker安全測試 5、Docker安全最佳實踐 使用Nmap掃描Docker容器中的開放端口 使用docker ps命令獲取正在運(yùn)行的容器ID或名稱。 在主機(jī)上安裝Nmap工具。 使用以下命令掃描Docker容

    2024年02月04日
    瀏覽(24)
  • Go語言的安全編程實踐與最佳實踐

    Go語言,也被稱為Golang,是一種現(xiàn)代的編程語言,由Google的Robert Griesemer、Rob Pike和Ken Thompson于2009年開發(fā)。Go語言旨在簡化系統(tǒng)級編程,提供高性能和可擴(kuò)展性。隨著Go語言的發(fā)展,安全編程變得越來越重要。本文旨在探討Go語言的安全編程實踐與最佳實踐,幫助讀者更好地編寫

    2024年02月20日
    瀏覽(44)
  • Docker與DockerCompose最佳實踐

    在本文中,我們將探討Docker和Docker Compose的最佳實踐,涵蓋了從基礎(chǔ)概念到實際應(yīng)用場景的全面討論。我們將深入了解Docker和Docker Compose的核心概念、算法原理、具體操作步驟和數(shù)學(xué)模型公式,并提供詳細(xì)的代碼實例和解釋。此外,我們還將討論實際應(yīng)用場景、工具和資源推薦

    2024年02月19日
    瀏覽(35)
  • Docker與Kubernetes:最佳實踐和最佳組合(DockerandKubernetes:BestPra

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) Docker 和 Kubernetes 是當(dāng)今最流行的容器編排工具,隨著越來越多的企業(yè)采用容器技術(shù),越來越多的人都在思考如何實現(xiàn)容器云平臺的自動化、高可用、可擴(kuò)展等架構(gòu)設(shè)計。而本文將從這兩個開源項目的角度出發(fā),深入探討兩者的最佳實踐和最佳

    2024年02月07日
    瀏覽(35)
  • Docker實戰(zhàn)技巧(一):常用命令與最佳實踐

    一、原理 1、Hypervisor是一種運(yùn)行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可允許多個操作系統(tǒng)和應(yīng)用共享一套基礎(chǔ)物理硬件,它能直接訪問物理設(shè)備,會給每一臺虛擬機(jī)分配內(nèi)存、CPU、網(wǎng)絡(luò)、磁盤等資源,也可以確保虛擬機(jī)對應(yīng)的硬件資源不被其他虛擬機(jī)訪問,是所有虛

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包