Docker中CMD,ENTRYPOINT命令區別_shell和Exec格式


本人實踐:

# 下面這種寫法會將變量值$MAIN_DLL當成字符串處理
ENTRYPOINT  ["/usr/bin/dotnet","/app/$MAIN_DLL"]
# 下面這種寫法會把"/usr/bin/dotnet","/app/$MAIN_DLL"分開執行,且變量值$MAIN_DLL結果為空
ENTRYPOINT  ["sh", "-c","/usr/bin/dotnet","/app/$MAIN_DLL"]
# 正確寫法1-多個腳本不使用環境變量:(結論:ENV環境變量只會在Shell腳本的首次執行起作用,多條腳本分開后面的命令會取不到環境變量)
ENTRYPOINT  ["/usr/bin/dotnet","/app/WebApplication.dll"]
# 正確寫法2-單個腳本使用環境變量:(結論:ENV環境變量只會在Shell腳本的首次執行起作用,多條腳本分開后面的命令會取不到環境變量)
ENTRYPOINT  ["sh", "-c","/usr/bin/dotnet /app/${MAIN_DLL}"]

 

A-CMD,ENTRYPOINT命令區別

CMD:  啟動容器后,提供默認命令及參數 (不一定會執行,只是默認) 會docker run 后面參數替換
 
ENTRYPOINT: 啟動容器時執行(一定會執行)  
/* 例如: Dockerfile 中:
 FROM centos             //必須現有base鏡像,否則Error:No build stage in current context
 RUN touch ceshi_cmd         //run創建新鏡像層,安裝軟件包
 CMD echo "hello with cmd"
 ENTRYPOINT echo "hello with entrypoint" 
*/
 
 docker run -it  this //運行 顯示 ENTRYPOINT的內容
                      // ENTRYPOINT一定會執行,沒有enrtypoint則會執行 cmd的內容
                      //cmd 作為默認選項 ,如果run it 帶參數,則cmd不會執行

 

B-CMD的使用

CMD 指令允許用戶指定容器的默認執行的命令。 
    三種格式:
Excel:   CMD ["executable","param1","param2"]
ExceL參數:CMD ["param1","param2"]  //用來為ENTRYPOINT 提供參數,此時entrypoint必須用Exce
Shell:   CMD command param1 param2 
例:  
/*
    CMD echo "Hello world" 
   // docker run  -it [image] 輸出: Hello World 
   // docker run -it  [image] /bin/bash  此時會進入 /bin/bash命令,忽視cmd
   // docker run -it  [image]  “param" 加參數會出現錯誤 
*/

 圖例:

 

 

 C-ENTRYPOINT的使用:

ENTRYPOINT :
Exec格式 用使用CMD的參數,run [image] 會替代CMD參數,會使用 run 中的多個參數
例:
/*  
    ENTRYPOINT ["/bin/echo", "Hello"]   
    CMD ["world"]    //表示默認參數,沒提供參數,則使用此參數
          
    docker run -it [image] 輸出:Hello world 
    docker run -it [image] "hanke"  輸出 Hello hanke  ,不使用默認參數
    docker run -it [image] "hanke" "hujing"  輸出 Hello hankd hujing 使用多個提供參數
    
*/
 
Shell格式 :不會使用 CMD參數,run [image] 參數

圖例:

//entrypoint 使用參數   

 

 

//entrypoint不使用cmd參數和[image]參數

 

 

 

shell和Exec格式 

Shell格式Example:                                            Exec格式Example:
 
RUN apt-get install python3                      RUN ["apt-get", "install", "python3"] 
CMD echo "Hello world"                           CMD ["/bin/echo", "Hello world"]   
ENTRYPOINT echo "Hello world"                    ENTRYPOINT ["/bin/echo", "Hello world"] 
 
Sheel格式中的命令會直接被sheel解析:
而Exec格式不會直接解析,需要加參數
 
例:
ENV name Cloud Man   
ENTRYPOINT ["/bin/echo", "Hello, $name"]   //輸出 Hello,Cloud Man 
 
ENV name Cloud Man   
ENTRYPOINT ["/bin/sh","echo Hello, $name"]  //輸出 Hello,$name 
["/bin/sh","-c","echo Hello, $name"] //輸出  /bin/sh:Hello,Cloud Man Command not found
 
Warming:
CMDENTRYPOINT 推薦使用 Exec 格式,因為指令可讀性更強,更容易理解
RUN 則兩種格式都可以。

 

感謝:https://blog.csdn.net/weixin_42971363/article/details/91506844


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM