久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

docker中Dockerfile注意事項(xiàng)有哪些

共計(jì) 3847 個(gè)字符,預(yù)計(jì)需要花費(fèi) 10 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 docker 中 Dockerfile 注意事項(xiàng)有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

準(zhǔn)則

盡量將 Dockerfile 放在空目錄中,如果目錄中必須有其他文件,則使用.dockerignore 文件。

避免安裝不必須的包。

每個(gè)容器應(yīng)該只關(guān)注一個(gè)功能點(diǎn)。

最小化鏡像的層數(shù)。

多行參數(shù)時(shí)應(yīng)該分類。這樣更清晰直白,便于閱讀和 review,另外,在每個(gè)換行符 \ 前都增加一個(gè)空格。

對(duì)構(gòu)建緩存要有清楚的認(rèn)識(shí)。

指令注意事項(xiàng) FROM

Dockerfile reference for the FROM instruction 任何時(shí)候,盡量使用官方鏡像源作為你鏡像的基礎(chǔ)鏡像。我們建議使用 Debian Image,因?yàn)槠浔缓芎玫毓芾碇⑶易鳛橐粋€(gè)完整的發(fā)布包,但體積卻保持著最小化(當(dāng)前不足 150MB)。
1. FROM 必須是除了注釋以外的第一行;
2. 可以有多個(gè) FROM 語(yǔ)句,來創(chuàng)建多個(gè) image;
3.

LABEL

Dockerfile reference for the LABEL instruction

RUN

Dockerfile reference for the RUN instruction
RUN 語(yǔ)句有兩種格式:
1. RUN command (the command is run in a shell – /bin/sh -c – shell form)
2. RUN [executable , param1 , param2] (exec form)

apt-get

盡量避免使用 RUN apt-get upgrade 或者 dist-upgrade,因?yàn)榛A(chǔ)鏡像的很多核心包不會(huì)再未授權(quán)的容器中升級(jí)。
要結(jié)合 RUN apt-get update 和 apt-get install 在同一個(gè) RUN 語(yǔ)句下一起使用。如:

 RUN apt-get update   apt-get install -y \
 package-bar \
 package-baz \
 package-foo

如果將 update 和 install 分開使用,執(zhí)行多個(gè) Dockerfile 時(shí),會(huì)引起緩存問題,導(dǎo)致后面執(zhí)行的 install 語(yǔ)句會(huì)失敗。
另外,執(zhí)行完 apt-get 語(yǔ)句后,最后最好加上刪除安裝包的語(yǔ)句,以減小鏡像的體積。如:

RUN apt-get update   apt-get install -y \
 aufs-tools \
 automake \
 build-essential \
   rm -rf /var/lib/apt/lists/*

注意:官方的 Debian 和 Ubuntu 鏡像會(huì)自動(dòng)執(zhí)行“RUN apt-get clean”,所以不需要明確地刪除指令。

管道使用

很多 RUN 命令都需要使用到管道,如:

RUN wget -O - https://some.site | wc -l   /number

Docker 使用 /bin/sh - c 解釋器來執(zhí)行這些命令,該解釋器只評(píng)估管道最后一個(gè)操作的返回值來判斷整個(gè)命令是否成功。在上面的例子中,只要 wc - l 命令成功了,即使 wget 命令失敗了,也會(huì)創(chuàng)建一個(gè)新鏡像。為了避免上述情況,可以在語(yǔ)句首部加上 set -o pipefail。比如:

RUN set -o pipefail   wget -O - https://some.site | wc -l   /number

注意:并非所有的 shell 都支持 -o pipefail 選項(xiàng),比如說基于 Debian 的鏡像下的模式 shell:dash shell。這種情況下,我們可以使用 exec 格式的 RUN 命令來顯示地選擇 shell 來支持 pipefail 選項(xiàng)。如:

RUN [/bin/bash ,  -c ,  set -o pipefail   wget -O - https://some.site | wc -l   /number]

CMD

Dockerfile reference for the CMD instruction
CMD 語(yǔ)句與 RUN 不同,RUN 是在 build 鏡像的時(shí)候運(yùn)行,而 CMD 語(yǔ)句是在 build 結(jié)束后運(yùn)行。一個(gè) Dockerfile 鐘可以有多個(gè) RUN 語(yǔ)句,雖然也可以有多個(gè) CMD 語(yǔ)句,但是卻只有最后一條 CMD 語(yǔ)句會(huì)執(zhí)行。CMD 語(yǔ)句格式為:

CMD [“executable”, “param1”, “param2”…]

EXPOSE

Dockerfile reference for the EXPOSE instruction
EXPOSE 指令指明容器會(huì)監(jiān)聽鏈接的端口。因此,最好使用常用的、傳統(tǒng)的應(yīng)用端口。比如,Apache web 服務(wù)器使用 EXPOSE 80 等。
為了給外部鏈接使用,你需要使用 docker run 命令來制定容器端口和 host 端口的映射。

ENV

Dockerfile reference for the ENV instruction
用于設(shè)置環(huán)境變量,設(shè)置后,后面的 RUM 指令就可以使用之前的環(huán)境變量了。同時(shí),還可以通過 docker run –env key=value,在容器啟動(dòng)時(shí)設(shè)置環(huán)境變量。如:

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress   …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD 和 COPY

Dockerfile reference for the ADD instruction
Dockerfile reference for the COPY instruction
雖然 ADD 和 COPY 功能相似,但一般來講,更建議使用 COPY。因?yàn)?COPY 比 ADD 更透明,COPY 只支持從本地文件到容器的拷貝,但是 ADD 還有一些其他不明顯的特性(比如本地 tar 包解壓縮和遠(yuǎn)程 URL 支持)。因此,ADD 的最優(yōu)用處是本地 tar 包自動(dòng)解壓縮到鏡像中。如:ADD rootfs.tar.xz /。
如果有多個(gè) Dockerfile 步驟用于處理不同的文件,建議分開 COPY 它們,而不是一次性拷貝。這可以保證每個(gè)步驟的 build 緩存只在對(duì)應(yīng)的文件改變時(shí)才無(wú)效。比如:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

鏡像的大小很重要,因此不鼓勵(lì)使用 ADD 從遠(yuǎn)端 URL 獲取包;可以使用 curl 或者 wget 來代替。這種方式你可以刪除不再需要的文件,如解壓縮后的 tar 包,從而不需要再添加額外的 layer 到鏡像中。比如,你應(yīng)該避免這樣使用:

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

而應(yīng)該如此:

RUN mkdir -p /usr/src/things \
   curl -SL http://example.com/big.tar.xz \
 | tar -xJC /usr/src/things \
   make -C /usr/src/things all

對(duì)于不需要使用 ADD 命令 tar 包自動(dòng)解壓縮功能的文件和目錄,你應(yīng)該總是使用 COPY。

ENTRYPOINT

Dockerfile reference for the ENTRYPOINT instruction
使用 ENTRYPOINT 來設(shè)置鏡像的主命令,就像這個(gè)鏡像運(yùn)行時(shí)就是這條命令一樣(然后再使用 CMD 作為默認(rèn)的 flag)。
我們使用 s3cmd 命令作為鏡像的主命令。

ENTRYPOINT [s3cmd]
CMD [--help]

VOLUME

Dockerfile reference for the VOLUME instruction
VOLUME 指令一般用于數(shù)據(jù)庫(kù)的存儲(chǔ)區(qū)域,配置存儲(chǔ),或者 docker 容器創(chuàng)建的文件和目錄。

USER

Dockerfile reference for the USER instruction
如果服務(wù)可以在不需要特權(quán)的情況下運(yùn)行,那么就應(yīng)該使用 USER 來切換用戶至非 root 用戶。可以用 RUN 命令創(chuàng)建用戶組和用戶如:

RUN groupadd -r postgres   useradd -r -g postgres postgres

應(yīng)該避免安裝和使用 sudo,因?yàn)樗胁豢深A(yù)知的 TTY 和信號(hào)轉(zhuǎn)移特性,會(huì)產(chǎn)生很多問題。如果的確一定要使用類似 sudo 的功能(如 root 下初始化 daemon,非 root 下運(yùn)行),可以使用“gosu”。

WORKDIR[Dockerfile reference for the WORKDIR instruction](https://docs.docker.com/engine/reference/builder /#workdir)
為了 Dockerfile 內(nèi)容更加清晰和可靠,最好總是使用絕對(duì)路徑。同樣地,應(yīng)該使用 WORKDIR,而不是使用類似“cd … do-something”這樣的指令,因?yàn)槟菢訒?huì)導(dǎo)致難以閱讀、查找錯(cuò)誤和維護(hù)。

看完了這篇文章,相信你對(duì)“docker 中 Dockerfile 注意事項(xiàng)有哪些”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計(jì)3847字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 聂拉木县| 海安县| 乐清市| 青川县| 嘉兴市| 绍兴市| 左权县| 育儿| 建德市| 且末县| 甘肃省| 武鸣县| 磐石市| 略阳县| 湘潭市| 沙田区| 武宣县| 阿克陶县| 长武县| 额尔古纳市| 德格县| 左云县| 马山县| 澄江县| 张掖市| 青铜峡市| 绥芬河市| 定远县| 金乡县| 阳东县| 南岸区| 余干县| 瑞安市| 宁晋县| 台湾省| 萍乡市| 丹东市| 山阳县| 延津县| 淮安市| 贵州省|