Dockerflie指令總結(jié)

[TOC]

RUN 執(zhí)行命令:

  • shell 格式:RUN <命令>,就像直接在命令行中輸入的命令一樣

    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    
  • exec 格式:RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"],這更像是函數(shù)調(diào)用中的格式。

COPY 復(fù)制文件:

  • shell模式 COPY [--chown=<user>:<group>] <源路徑>... <目標(biāo)路徑>
  • 函數(shù)調(diào)用式 COPY [--chown=<user>:<group>] ["<源路徑1>",... "<目標(biāo)路徑>"]

COPY 指令將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置。

COPY package.json /usr/src/app/

<源路徑> 可以是多個(gè),甚至可以是通配符,其通配符規(guī)則要滿足 Go 的 filepath.Match 規(guī)則,如:

COPY hom* /mydir/
COPY hom?.txt /mydir/

<目標(biāo)路徑> 可以是容器內(nèi)的絕對路徑,也可以是相對于工作目錄的相對路徑(工作目錄可以用 WORKDIR指令來指定)。目標(biāo)路徑不需要事先創(chuàng)建,如果目錄不存在會(huì)在復(fù)制文件前先行創(chuàng)建缺失目錄。

此外,還需要注意一點(diǎn),使用 COPY 指令,源文件的各種元數(shù)據(jù)都會(huì)保留。比如讀、寫、執(zhí)行權(quán)限、文件變更時(shí)間等。這個(gè)特性對于鏡像定制很有用。特別是構(gòu)建相關(guān)文件都在使用 Git 進(jìn)行管理的時(shí)候。

在使用該指令的時(shí)候還可以加上 --chown=<user>:<group> 選項(xiàng)來改變文件的所屬用戶及所屬組。

COPY --chown=55:mygroup files* /mydir/
COPY --chown=bin files* /mydir/
COPY --chown=1 files* /mydir/
COPY --chown=10:11 files* /mydir/

ADD 更高級的復(fù)制文件:

  • shell模式 ADD [--chown=<user>:<group>] <源路徑>... <目標(biāo)路徑>
  • 函數(shù)調(diào)用式 ADD [--chown=<user>:<group>] ["<源路徑1>",... "<目標(biāo)路徑>"]

源路徑> 可以是一個(gè) URL,這種情況下,Docker 引擎會(huì)試圖去下載這個(gè)鏈接的文件放到 <目標(biāo)路徑> 去。下載后的文件權(quán)限自動(dòng)設(shè)置為 600,如果這并不是想要的權(quán)限,那么還需要增加額外的一層 RUN進(jìn)行權(quán)限調(diào)整,另外,如果下載的是個(gè)壓縮包,需要解壓縮,也一樣還需要額外的一層 RUN 指令進(jìn)行解壓縮。所以不如直接使用 RUN 指令,然后使用 wget 或者 curl 工具下載,處理權(quán)限、解壓縮、然后清理無用文件更合理。

<源路徑> 為一個(gè) tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,ADD 指令將會(huì)自動(dòng)解壓縮這個(gè)壓縮文件到 <目標(biāo)路徑> 去。

--chown=<user>:<group> 選項(xiàng)來改變文件的所屬用戶及所屬組。

ADD --chown=55:mygroup files* /mydir/
ADD --chown=bin files* /mydir/
ADD --chown=1 files* /mydir/
ADD --chown=10:11 files* /mydir/
############## ps:

COPY` 和 `ADD` 指令中選擇的時(shí)候,可以遵循這樣的原則,所有的文件復(fù)制均使用 `COPY` 指令,僅在需要自動(dòng)解壓縮的場合使用 `ADD`

CMD 容器啟動(dòng)命令:

  • shell 格式:CMD <命令>
  • exec 格式:CMD ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"...]
  • 參數(shù)列表格式:CMD ["參數(shù)1", "參數(shù)2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具體的參數(shù)。

CMD 指令就是用于指定默認(rèn)的容器主進(jìn)程的啟動(dòng)命令的。

啟動(dòng)容器實(shí)際上就是 啟動(dòng)容器進(jìn)程,當(dāng)容器主進(jìn)程結(jié)束時(shí),容器也就退出了,所以,在容器中啟動(dòng)的程序應(yīng)當(dāng)跑在前臺,而不是后臺。

# 錯(cuò)誤命令
CMD service nginx start
# 容器執(zhí)行后就立即退出了

# 正確的做法是直接執(zhí)行 nginx 可執(zhí)行文件,并且要求以前臺形式運(yùn)行
CMD ["nginx", "-g", "daemon off;"]

ENTRYPOINT 入口點(diǎn):z

**ENV **設(shè)置環(huán)境變量:

ARG 構(gòu)建參數(shù):

VOLUME 定義匿名卷:

EXPOSE 暴露端口:

WORKDIR 指定工作目錄:

USER 指定當(dāng)前用戶:

HEALTHCHECK 健康檢查:

ONBUILD 為他人作嫁衣:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考 嗶哩嗶哩 官方電子書 環(huán)境 Centos 7.6 #未安裝Centos7,可以參考這篇文章 Docker 1...
    假裝我不帥閱讀 893評論 2 0
  • 縱有千金何道富,不如復(fù)載五車書 Dockerfile文件由一些列的指令組成,它是用來構(gòu)建docker鏡像的,類似于...
    olaH閱讀 1,295評論 2 5
  • 列出docker鏡像 docker image ls docker images docker image ls ...
    daqiaowijiu閱讀 1,112評論 0 7
  • 一、Docker創(chuàng)建鏡像的方式有兩種: 一種通過commit的方式:把做了一系列操作的容器關(guān)閉,然后利用docke...
    jie0112閱讀 3,914評論 0 3
  • 鮑照 雞鳴關(guān)吏起。伐鼓早通晨。 嚴(yán)車臨逈陌。延瞰歷城闉。 蔓草緣高隅。脩楊?yuàn)A廣津。 迅風(fēng)首旦發(fā)。平路塞飛塵。 擾擾...
    古風(fēng)長歌閱讀 410評論 1 3

友情鏈接更多精彩內(nèi)容