Dockerfile中容易混淆的命令詳解

RUNCMDENTRYPOINT

命令解釋

  • RUN 執行命令並建立新的Image Layer
  • CMD 設置容器啓動後默認執行的命令和參數
  • ENTRYPOINT 設置容器啓動時運行的命令

執行方式

  • EXECdocker

    FROM debian
    RUN ['apt-get','install','-y','vim']
    CMD ['/bin/echo','hello world!!']
    ENTRYPOINT ['/bin/echo','hello world!!']
  • SHELLshell

    FROM debian
     RUN apt-get install -y vim
     CMD echo 'hello world!!'
     ENTRYPOINT echo 'hello world!!'

注意事項

  • 使用run命令構建鏡像時apt-get update && apt-get install -y須要放在同一個RUN命令中,不然apt-get install會從緩存中安裝軟件,致使apt-get update執行毫無心義
  • apt-get install 的軟件儘可能一個一行而且按照字母順序排列,這樣能夠避免安裝重複的命令
  • apt-get install安裝軟件時能夠爲軟件指定特定的版本apt-get install -y aufs-tools s3cmd=1.1.*

命令差別

  • CMDvim

    • 容器啓動時默認執行的命令
    • docker run 指定了其餘命令,CMD會被忽略
    • 若是定義了多個CMD,只有最後一個會執行
  • ENTRYPOINT緩存

    • 讓容器以運用程序或者服務的形式運行
    • 不會被忽略,必定會執行
    • 最佳實踐,寫一個shell腳本做爲entrypoint
    COPY ./script/test.sh /usr/local/bin
    ENTRYPOINT ['test.sh']
相關文章
相關標籤/搜索