日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Dockerfile優(yōu)化推薦功能

更新時(shí)間:

容器鏡像服務(wù)ACR針對(duì)企業(yè)版實(shí)例運(yùn)行的構(gòu)建任務(wù),提供了Dockerfile優(yōu)化推薦功能,可以幫助您找出Dockerfile中的潛在問題,以提高容器鏡像的質(zhì)量。該功能不會(huì)對(duì)鏡像構(gòu)建功能產(chǎn)生任何影響,并且您無需進(jìn)行任何操作,就可以在構(gòu)建日志中查看優(yōu)化推薦的結(jié)果。本文介紹如何根據(jù)Dockerfile優(yōu)化推薦的結(jié)果找出Dockerfile中的潛在問題,以進(jìn)一步提高容器鏡像的質(zhì)量,滿足企業(yè)級(jí)應(yīng)用的需求。

背景信息

使用企業(yè)版構(gòu)建服務(wù),容器鏡像服務(wù)可以在鏡像構(gòu)建前自動(dòng)對(duì)構(gòu)建的Dockerfile進(jìn)行優(yōu)化推薦。優(yōu)化推薦功能會(huì)根據(jù)語法規(guī)則以及最優(yōu)實(shí)踐規(guī)則進(jìn)行分析,最后輸出分析結(jié)果。關(guān)于語法規(guī)則的更多內(nèi)容,請(qǐng)參見官方語法規(guī)則

分析結(jié)果分為Error和Warning兩種等級(jí):

  • Error:Dockerfile中存在語法錯(cuò)誤或容器鏡像服務(wù)不支持的構(gòu)建參數(shù),此類問題將導(dǎo)致鏡像構(gòu)建出錯(cuò),需要進(jìn)行改正。

  • Warning:Dockerfile中存在潛在問題,可能導(dǎo)致構(gòu)建產(chǎn)生非預(yù)期的結(jié)果或者鏡像存在冗余數(shù)據(jù)。

分析結(jié)果格式

語法檢測結(jié)果

[Error] <Error message> at line <line number>: <Specific instruction content>
[Warning] <Warning message> at line <line number>: <Specific instruction content>
[Error] [Rule <Rule id>] <Error message> at line <line number>: <Specific instruction content>
[Warning] [Rule <Rule id>] <Warning message> at line <line number>: <Specific instruction content>

示例1

存在語法錯(cuò)誤的Dockerfile。

# FROM指令使用了不支持的架構(gòu)的基礎(chǔ)鏡像,并且沒有指定多階段構(gòu)建的名稱
FROM --platform=windows alpine as
# RUN指令使用了不支持的運(yùn)行參數(shù)
RUN --security=insecure cat /proc/self/status | grep CapEff
# ADD指令缺少目的路徑
ADD https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz
# COPY指令不支持拷貝遠(yuǎn)程文件
COPY https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz linux-0.01.tag.gz
# COPY/ADD拷貝的源文件路徑在構(gòu)建路徑下不存在
COPY  <不存在的路徑> /somedir/
# 錯(cuò)誤的指令名稱
CPY /foo /bar

語法檢測結(jié)果輸出。

[parse stage begin.]
[Error] Unsupported target architecture at line 2: windows.
[Error] Lack of stage name at line 2.
[Error] Unsupported security mode at line 4: insecure.
[Error] Lack of dest at line 6.
[Error] COPY does not support remote links. Please use the ADD instruction at line 8: https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz.
[Error] Source path is not exist at line 10: <不存在的路徑>.
[Error] Unknown instruction at line 12: CPY.
[Warning] No tag specified at line 2: from ["--platform=windows"] "alpine" "as".
[parse successfully, takes 0s.]

示例2

違背了最優(yōu)實(shí)踐規(guī)則的Dockerfile。

# 未指定鏡像版本
FROM alpine AS a
# 安裝軟件包后未清除緩存
RUN apk add gcc
# 未指定鏡像版本,使用了已有的階段名
from ubuntu as a
# 安裝軟件包后未清除緩存,未使用--no-install-recommends避免下載不必要的軟件包
RUN apt-get install -y gcc

語法檢測結(jié)果輸出。

[parse stage begin.]
[Warning] [Rule1003]When installing software with apt-get, it is recommended to include the --no-install-recommends parameter at line 8: RUN apt-get install -y gcc .
[Warning] No tag specified at line 2: FROM alpine AS a .
[Warning] No tag specified at line 6: from ubuntu as a .
[Warning] [Rule1001]Using a base image with a specific tag instead of the latest image.
[Error] Duplicate stage names with line 2: a at line 6: from ubuntu as a .
[Error] [Rule1014]Do not use duplicate stage names.
[parse successfully, takes 0s.]

檢測規(guī)則

最優(yōu)實(shí)踐規(guī)則

規(guī)則編號(hào)

提示等級(jí)

構(gòu)建規(guī)則

推薦操作

R1001

Warning

基礎(chǔ)鏡像避免使用Latest標(biāo)簽鏡像。

為您的基礎(chǔ)鏡像指定特定版本的鏡像。

R1002

Warning

避免將apt-get update, apt-get upgradeapt-get install指令分散在不同指令中。

apt-get update, apt-get upgradeapt-get install指令合并在同一條RUN指令中進(jìn)行。

R1003

Warning

使用apt-get下載軟件時(shí),添加--no-install-recommends避免下載不必要的軟件包。

apt-get install指令中添加--no-install-recommends指令。

R1004

Warning

下載安裝包后清空緩存,可以縮小鏡像體積。

  • apt-get指令后添加apt-get cleanrm -rf /var/lib/apt/lists/*指令。

  • apk指令后添加rm -rf /var/cache/apk/*指令。

  • apk add指令中添加--no-cache參數(shù)。

  • yum指令后添加yum clean指令。

R1005

Warning

使用多階段構(gòu)建處理編譯命令,可以縮小鏡像體積。

對(duì)于make、go build等指令,將其放入單獨(dú)的階段進(jìn)行編譯,將編譯結(jié)果拷貝進(jìn)入業(yè)務(wù)鏡像,如:

FROM alpine:3.17 as complie
COPY <source code> code/
RUN make
FROM alpine:3.17
COPY --from=compile /code/bin bin/

R1006

Warning

WORKDIR指定工作目錄時(shí),使用相對(duì)路徑可能會(huì)導(dǎo)致使用的路徑與預(yù)期不一致。

將相對(duì)路徑改為絕對(duì)路徑。

R1007

Error

在構(gòu)建過程中使用Kill、Shutdown等指令會(huì)導(dǎo)致安全及穩(wěn)定性問題。

去除相關(guān)指令。

R1008

Warning

在構(gòu)建中使用Root用戶,會(huì)導(dǎo)致容器在運(yùn)行時(shí)存在安全性問題。

避免使用Root用戶。

R1009

Warning

在構(gòu)建中使用CD指令指定工作目錄不會(huì)在容器運(yùn)行時(shí)生效。

使用WORKDIR指令代替CD命令。

R1010

Error

在構(gòu)建中使用Sudo命令是無效的。

去除sudo指令。

R1011

Error

使用EXPOSE暴露端口時(shí),端口范圍應(yīng)在0~65535,協(xié)議為TCP或UDP。

使用合法的EXPOSE參數(shù),如:8080,8081/tcp,8082/udp。

R1012

Error

使用COPY指令拷貝多個(gè)源文件時(shí),目的路徑應(yīng)為目錄。

確保目的路徑格式為目錄地址。

R1013

Error

使用COPY指令從其他構(gòu)建階段拷貝文件時(shí),需要使用正確的階段名。

確保階段名是之前定義的階段。

R1014

Error

使用多階段構(gòu)建時(shí),階段名不能重復(fù)。

避免使用重復(fù)的階段名。

R1015

Error

Dockerfile中的首條指令應(yīng)為FROM或ARG指令。

確保首條指令為FROM或ARG指令。

R1016

Warning

使用多條CMD指令時(shí)只有最后一條CMD指令會(huì)生效。

確保最后一條CMD指令為預(yù)期使用的指令。

R1017

Warning

使用多條ENTRYPOINT指令時(shí)只有最后一條ENTRYPOINT指令會(huì)生效。

確保最后一條ENTRYPOINT指令為預(yù)期使用的指令。

R1018

Error

使用ADD指令拷貝多個(gè)源文件時(shí),目的路徑格式應(yīng)為目錄地址。

確保目的路徑格式為目錄地址。

R1019

Warning

在解壓之后刪除壓縮包,可縮小鏡像體積。

將下載壓縮包、解壓壓縮包和刪除壓縮包指令合并在同一條RUN指令中執(zhí)行。