" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Dockerfile中 CMD和ENTRYPOINT的區(qū)別小結

 更新時間:2025年09月21日 09:48:49   作者:wx5bcd2f496a1cf  
本文主要介紹了Dockerfile中 CMD和ENTRYPOINT的區(qū)別小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 Dockerfile 中,CMD 和 ENTRYPOINT 都用于指定容器啟動時要執(zhí)行的命令。它們之間的主要區(qū)別是:

- CMD 用于定義容器啟動時要執(zhí)行的命令和參數(shù),它設置的值可以被 Dockerfile 中的后續(xù)指令覆蓋,包括在運行容器時傳遞的參數(shù)。如果在 Dockerfile 中沒有指定 CMD,那么 Docker 將使用容器啟動時所提供的默認命令。

1、CMD 指令

CMD在容器運行的時候提供一些命令及參數(shù),用法如下:

  • CMD ["executable","param1","param2"] (exec form, this is the preferred form)
  • CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
  • CMD command param1 param2 (shell form)

第一種用法:運行一個可執(zhí)行的文件并提供參數(shù)。(可執(zhí)行程序+參數(shù))

第二種用法:為ENTRYPOINT指定參數(shù)。(cmd指定參數(shù))

第三種用法(shell form):是以”/bin/sh -c”的方法執(zhí)行的命令。(執(zhí)行shell命令)

如你指定:

CMD [“/bin/echo”, “this is a echo test ”]

build后運行(假設鏡像名為ec):

docker run ec

就會輸出:

this is a echo test

是不是感覺很像開機啟動項,你可以暫時這樣理解。

注意點:

docker run命令如果指定了參數(shù)會把CMD里的參數(shù)覆蓋: (這里說明一下,如:docker run -it ubuntu /bin/bash 命令的參數(shù)是指/bin/bash 而非 -it ,-it只是docker 的參數(shù),而不是容器的參數(shù),以下所說參數(shù)均如此。)

同樣是上面的ec鏡像啟動:

docker run ec /bin/bash

就不會輸出: 因為CMD命令被”/bin/bash”覆蓋了。

this is a echo test

- ENTRYPOINT 也用于定義容器啟動時要執(zhí)行的命令,但不像 CMD,它的值不會被 Dockerfile 中的后續(xù)指令覆蓋,只能在運行容器時添加參數(shù)來覆蓋它。也就是說,ENTRYPOINT 設置的命令一般是容器鏡像所要執(zhí)行的主要命令,CMD 則是選項和參數(shù)。

換句話說,CMD 是為 ENTRYPOINT 提供默認選項,ENTRYPOINT 則是容器鏡像中主要執(zhí)行的命令。在 Dockerfile 中定義 ENTRYPOINT 可以使您的鏡像更像一個可執(zhí)行文件,而在運行容器時傳遞參數(shù)可以以更靈活的方式執(zhí)行此命令。

2、ENTRYPOINT 指令

字面意思是進入點,而它的功能也恰如其意。它可以讓你的容器功能表現(xiàn)得像一個可執(zhí)行程序一樣。

容器功能表現(xiàn)得像一個可執(zhí)行程序一樣,這是什么意思呢?

直接給個例子好說話:使用下面的ENTRYPOINT構造鏡像:

ENTRYPOINT ["/bin/echo"]

那么docker build出來的鏡像以后的容器功能就像一個/bin/echo程序:

比如我build出來的鏡像名稱叫imageecho,那么我可以這樣用它:

docker  run  -it  imageecho  “this is a test”

這里就會輸出”this is a test”這串字符,而這個imageecho鏡像對應的容器表現(xiàn)出來的功能就像一個echo程序一樣。 你添加的參數(shù)“this is a test”會添加到ENTRYPOINT后面,就成了這樣 /bin/echo “this is a test” ?,F(xiàn)在你應該明白進入點的意思了吧。

例子:

ENTRYPOINT ["/bin/cat"]

構造出來的鏡像你可以這樣運行(假設名為st):這樣相當: /bin/cat /etc/fstab 這個命令的作用。運行之后就輸出/etc/fstab里的內容。

ENTRYPOINT有兩種寫法:

寫法一:

ENTRYPOINT ["executable", "param1", "param2"] (the preferred exec form)

寫法二:

ENTRYPOINT command param1 param2 (shell form)

你也可以在docker run 命令時使用–entrypoint指定(但是只能用寫法一)。

下面是我把ENTRYPOINT設為[“/bin/sh -c”]時候運行的情況:

  • # docker run -it t2 /bin/bash
  • root@4c8549e7ce3e:/# ps
  • PID TTY TIME CMD
  • 1 ? 00:00:00  sh
  • 9 ? 00:00:00  bash
  • 19 ? 00:00:00  ps

可以看到PID為1的進程運行的是sh,而bash只是sh的一個子進程,/bin/bash只是作為 /bin/sh -c后面的參數(shù)。

CMD可以為ENTRYPOINT提供參數(shù),ENTRYPOINT本身也可以包含參數(shù),但是你可以把那些可能需要變動的參數(shù)寫到CMD里而把那些不需要變動的參數(shù)寫到ENTRYPOINT里面例如:

FROM  ubuntu:14.10
ENTRYPOINT  ["top", "-b"]
CMD  ["-c"]

把可能需要變動的參數(shù)寫到CMD里面。然后你可以在docker run里指定參數(shù),這樣CMD里的參數(shù)(這里是-c)就會被覆蓋掉而ENTRYPOINT里的不被覆蓋。

在Docker中,CMD和ENTRYPOINT都是用于指定容器啟動時要執(zhí)行的命令或腳本。它們之間的區(qū)別如下:

CMD用于指定容器啟動時要執(zhí)行的命令。它可以有三種不同的形式:

  • CMD ["executable","param1","param2"](使用JSON數(shù)組形式):推薦使用這種形式,它會直接執(zhí)行指定的可執(zhí)行文件,并傳遞參數(shù)。
  • CMD command param1 param2(使用命令形式):這種形式會將命令傳遞給shell進行解釋執(zhí)行。
  • CMD ["param1","param2"](使用JSON數(shù)組形式):這種形式會將指定的參數(shù)傳遞給ENTRYPOINT指定的可執(zhí)行文件。

在Dockerfile中,可以使用多個CMD指令,但只有最后一個CMD指令會生效。如果容器啟動時沒有指定要執(zhí)行的命令,將會執(zhí)行最后一個CMD指令中指定的命令。

ENTRYPOINT:ENTRYPOINT用于指定容器啟動時要執(zhí)行的可執(zhí)行文件。它可以有兩種不同的形式:

  • ENTRYPOINT ["executable", "param1", "param2"](使用JSON數(shù)組形式):推薦使用這種形式,它會直接執(zhí)行指定的可執(zhí)行文件,并傳遞參數(shù)。
  • ENTRYPOINT command param1 param2(使用命令形式):這種形式會將命令傳遞給shell進行解釋執(zhí)行。

在Dockerfile中,只能使用一個ENTRYPOINT指令。如果同時存在CMD指令,CMD中的參數(shù)將會作為ENTRYPOINT指定的可執(zhí)行文件的參數(shù)進行傳遞。

總的來說,CMD用于指定容器啟動時要執(zhí)行的命令參數(shù),而ENTRYPOINT用于指定容器啟動時要執(zhí)行的可執(zhí)行文件??梢詫NTRYPOINT看作是容器的入口點,而CMD則是對ENTRYPOINT指定的可執(zhí)行文件的參數(shù)進行補充。

到此這篇關于Dockerfile中 CMD和ENTRYPOINT的區(qū)別小結的文章就介紹到這了,更多相關Dockerfile中 CMD和ENTRYPOINT 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Docker部署Nginx設置環(huán)境變量的實現(xiàn)步驟

    Docker部署Nginx設置環(huán)境變量的實現(xiàn)步驟

    本文主要介紹了Docker部署Nginx設置環(huán)境變量的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 使用docker搭建jenkins自動化工具的實現(xiàn)

    使用docker搭建jenkins自動化工具的實現(xiàn)

    大家在工作中,應該都有使用過jenkins 自動化打包或發(fā)布,本文主要介紹了使用docker搭建jenkins自動化工具的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • docker-compose如何單獨更新某個服務

    docker-compose如何單獨更新某個服務

    這篇文章主要介紹了docker-compose如何單獨更新某個服務問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Docker多階段鏡像構建的實現(xiàn)

    Docker多階段鏡像構建的實現(xiàn)

    本篇文章主要介紹了Docker多階段鏡像構建的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境

    詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境

    這篇文章主要介紹了詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-07-07
  • 兩小時入門Docker教程實踐

    兩小時入門Docker教程實踐

    這篇文章主要介紹了兩小時入門Docker教程實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Docker容器使用jenkins部署web項目(總結)

    Docker容器使用jenkins部署web項目(總結)

    這篇文章主要介紹了Docker容器使用jenkins部署web項目(總結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • docker中的jenkins配置sonarQube的過程

    docker中的jenkins配置sonarQube的過程

    SonarQube是一個開源的代碼分析平臺,用來持續(xù)分析和評測項目源代碼的質量,通過SonarQube可以檢測出項目中重復代碼,潛在bug,?代碼規(guī)范,安全性漏洞等問題,并通過SonarQube?web?UI展示出來,這篇文章主要介紹了docker中的jenkins配置sonarQube,需要的朋友可以參考下
    2023-08-08
  • Linux環(huán)境docker部署Firefox結合內網(wǎng)穿透遠程使用瀏覽器測試的示例詳解

    Linux環(huán)境docker部署Firefox結合內網(wǎng)穿透遠程使用瀏覽器測試的示例詳解

    在Docker中打開Firefox意味著我們將在一個Docker容器中運行Firefox瀏覽器,這對于一些特殊的測試場景非常有用,例如需要在不同版本的瀏覽器中進行測試,下面是一個簡單的示例,演示如何在Docker中打開Firefox,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • nginx在docker容器中自動生成配置文件

    nginx在docker容器中自動生成配置文件

    這篇文章主要介紹了nginx在docker容器中自動生成配置文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06

最新評論

武安市| 楚雄市| 揭西县| 深圳市| 凤凰县| 廊坊市| 沙洋县| 利津县| 炎陵县| 恩施市| 正阳县| 蓝山县| 西贡区| 黔西| 杂多县| 嘉善县| 巩留县| 新巴尔虎左旗| 岳阳县| 同德县| 长岛县| 资兴市| 自贡市| 无极县| 保康县| 富锦市| 菏泽市| 丹棱县| 凤山市| 黄大仙区| 都江堰市| 于都县| 宜宾县| 岚皋县| 迁安市| 北京市| 赞皇县| 体育| 温州市| 隆回县| 浦城县|