" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

1、CMD 指令

CMD在容器運(yùn)行的時(shí)候提供一些命令及參數(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)

第一種用法:運(yùn)行一個(gè)可執(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后運(yùn)行(假設(shè)鏡像名為ec):

docker run ec

就會(huì)輸出:

this is a echo test

是不是感覺很像開機(jī)啟動(dòng)項(xiàng),你可以暫時(shí)這樣理解。

注意點(diǎn):

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

同樣是上面的ec鏡像啟動(dòng):

docker run ec /bin/bash

就不會(huì)輸出: 因?yàn)镃MD命令被”/bin/bash”覆蓋了。

this is a echo test

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

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

2、ENTRYPOINT 指令

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

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

直接給個(gè)例子好說話:使用下面的ENTRYPOINT構(gòu)造鏡像:

ENTRYPOINT ["/bin/echo"]

那么docker build出來(lái)的鏡像以后的容器功能就像一個(gè)/bin/echo程序:

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

docker  run  -it  imageecho  “this is a test”

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

例子:

ENTRYPOINT ["/bin/cat"]

構(gòu)造出來(lái)的鏡像你可以這樣運(yùn)行(假設(shè)名為st):這樣相當(dāng): /bin/cat /etc/fstab 這個(gè)命令的作用。運(yùn)行之后就輸出/etc/fstab里的內(nèi)容。

ENTRYPOINT有兩種寫法:

寫法一:

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

寫法二:

ENTRYPOINT command param1 param2 (shell form)

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

下面是我把ENTRYPOINT設(shè)為[“/bin/sh -c”]時(shí)候運(yùn)行的情況:

  • # 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的進(jìn)程運(yùn)行的是sh,而bash只是sh的一個(gè)子進(jìn)程,/bin/bash只是作為 /bin/sh -c后面的參數(shù)。

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

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

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

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

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

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

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

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

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

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

總的來(lái)說,CMD用于指定容器啟動(dòng)時(shí)要執(zhí)行的命令參數(shù),而ENTRYPOINT用于指定容器啟動(dòng)時(shí)要執(zhí)行的可執(zhí)行文件??梢詫NTRYPOINT看作是容器的入口點(diǎn),而CMD則是對(duì)ENTRYPOINT指定的可執(zhí)行文件的參數(shù)進(jìn)行補(bǔ)充。

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

相關(guān)文章

  • 開發(fā)者必備Docker命令小結(jié)

    開發(fā)者必備Docker命令小結(jié)

    本文主要講解Docker環(huán)境的安裝以及Docker常用命令的使用,掌握這些對(duì)Docker環(huán)境下應(yīng)用的部署具有很大幫助,感興趣的可以了解一下
    2021-12-12
  • docker?掛載MySQL實(shí)現(xiàn)數(shù)據(jù)持久化的實(shí)現(xiàn)

    docker?掛載MySQL實(shí)現(xiàn)數(shù)據(jù)持久化的實(shí)現(xiàn)

    本文主要介紹了docker?掛載MySQL實(shí)現(xiàn)數(shù)據(jù)持久化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Docker網(wǎng)絡(luò)如何配置dns

    Docker網(wǎng)絡(luò)如何配置dns

    這篇文章主要介紹了Docker網(wǎng)絡(luò)如何配置dns問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Mac下部署springBoot項(xiàng)目到Docker中(demo)

    Mac下部署springBoot項(xiàng)目到Docker中(demo)

    本文通過一個(gè)簡(jiǎn)單的demo給大家分享Mac下部署springBoot項(xiàng)目到Docker的方法,感興趣的朋友一起看看吧
    2018-01-01
  • docker轉(zhuǎn)移鏡像的實(shí)現(xiàn)步驟

    docker轉(zhuǎn)移鏡像的實(shí)現(xiàn)步驟

    本文主要介紹了docker轉(zhuǎn)移鏡像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • 一次Docker中Redis連接暴增的問題排查實(shí)戰(zhàn)記錄

    一次Docker中Redis連接暴增的問題排查實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了一次Docker中Redis連接暴增的問題排查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)詳細(xì)解析

    Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)詳細(xì)解析

    一般使用自定義網(wǎng)絡(luò),自定義網(wǎng)絡(luò)使用network創(chuàng)建,創(chuàng)建時(shí)可以指定子網(wǎng)網(wǎng)段及網(wǎng)關(guān)等信息,在創(chuàng)建并啟動(dòng)容器時(shí)指定使用的網(wǎng)絡(luò),今天通過本文給大家介紹Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-05-05
  • Docker拉鏡像報(bào)錯(cuò)error pulling image configuration: unknown blob

    Docker拉鏡像報(bào)錯(cuò)error pulling image configuration:

    這篇文章主要介紹了Docker拉鏡像報(bào)錯(cuò)error pulling image configuration: unknown blob的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • docker安裝nginx并配置ssl證書的方法步驟

    docker安裝nginx并配置ssl證書的方法步驟

    本文主要介紹了docker安裝nginx并配置ssl證書的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 深入理解docker的四種網(wǎng)絡(luò)方式

    深入理解docker的四種網(wǎng)絡(luò)方式

    本篇文章主要介紹了深入理解docker的四種網(wǎng)絡(luò)方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-02-02

最新評(píng)論