Dockerfile 里的 COPY ADD RUN CMD ENTRYPOINT

總體來說, COPY,ADD,RUN 都是增加鏡像層(不一定會,要看緩存情況)。

CMD 和ENTRYPOINT 用于配制容器為像一個執(zhí)行文件

COPY & ADD

COPY . /src

新建一個鏡像層,把文件拷貝進去
如果這條命令已經緩存了,Docker 會繼續(xù)查找同樣基于上一層鏡像的執(zhí)行了 COPY . /src 命令的鏡像。
還有 COPY 和 ADD 還會檢查復制的文件 Checksum 值,如果文件發(fā)生了改變也會設置混存無效。

在執(zhí)行 Dockerfile 構建鏡像的過程中一旦某一行命令出現(xiàn)緩存無效,之后的都不使用緩存 所以盡可能將發(fā)生改變的命令放在 Dockerfile 文件下面

ADD <url> <dest>

ADD 可以將 Host 以外的文件,或者 tar 壓縮包(解壓后)當到 容器內。
如果只是拷貝目錄,用 COPY

RUN,CMD 和 ENTRYPOINT

設置容器啟動默認執(zhí)行到動作,或者參數。

RUN ["apt-get", "install", "python3"]
CMD ["/bin/echo", "Hello world"]
ENTRYPOINT ["/bin/echo", "Hello world"]

RUN

創(chuàng)建一個鏡像層

shell 模式顧名思義就是在 shell 里執(zhí)行,exec 模式就是可執(zhí)行文件絕對路徑加參數。

區(qū)別于 CMD 和 ENTRYPOINT RUN命令的作用是增加一個景象層

RUN apt-get update && apt-get install -y \
  bzr \
  cvs \
  git \
  mercurial \
  subversion

把 update 寫在一個RUN里是為了防止命中之前的 RUN apt-get update 緩存,那就不會創(chuàng)建一個新的鏡像層,也就等于沒有執(zhí)行更新動作了。

RUN 運行方式

  • RUN <command> (shell form)

  • RUN ["executable", "param1", "param2"] (exec form)

CMD

  • 定義默認的容器啟動命令,

  • 或者為 exec 模式的 ENTRYPOINT 提供參數

第一點很好理解,docker run -it <image> 會執(zhí)行 Dockerfile 里面的 CMD,

如果給出了command 如 docker run -it <image> <command> Dockerfile 里的CMD命令就會被忽略。

CMD 有三種模式:

CMD ["executable","param1","param2"] (exec form, preferred)
CMD ["param1","param2"] (sets additional default parameters for ENTRYPOINT in exec form)
CMD command param1 param2 (shell form)

ENTRYPOINT

ENTRYPOINT 用來將容器變得像一個可執(zhí)行文件

ENTRYPOINT 兩種運行方式

  • exec 模式的 ENTRYPOINT 跟 CMD 的區(qū)別是它可以接受來自 CMD 傳遞的參數,或者 docker run -it <image> 參數 里的參數。注意 docker run 里的參數會覆蓋CMD里的。
  • Shell 方式會忽略CMD 以及docker run -it <image> 參數 里的參數
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容