Dockerfile編寫個人理解
阿新 • • 發佈:2019-04-04
Dockerfile常用命令
(1) FROM: 製作image時依據的基本image (2) RUN:製作image時執行的命令,一般在Dockerfile中多次出現 (3) CMD:啟動docker時執行的命令,在Dockerfile中只出現一次 (4) ENV:設定環境變數 (5) COPY:製作image時,將檔案系統中的檔案複製到Docker映象中 (6) WORKDIR:設定工作目錄 (7) EXPOSE:設定向外暴露的埠 (8) VOLUME:設定容器與外界對映的目錄
CMD三種語法: CMD ["param1","param2"] #提供給ENTRYPOINT預設引數。 CMD command param1 param2 #提供給需要互動的應用。 CMD ["executable","param1","param2"]#exec執行,這種格式會被解析為JSON陣列.因此必須雙引號,推薦使用 1.如果在Dockerfile中作為 CMD ["echo","b"] 會被解釋為:echo 為命令 b為引數物件。所以列印b /bin/echo "b" sh -c "/bin/echo "b"" 2.如果在Dockerfile中 CMD ["echo_b"] 會將'echo_b'作為一個命令執行,而'echo b'本身不是一個命令所以會報錯。 /bin/echo_b sh -c "/bin/echo_b" 3.如果在Dockerfile中CMD ["sh", "-c","echo b","ef","echo c"]最終會解釋為: sh -c "echo b" "ef" "echo c" sh -c 只能接受一個命令所以無論後面接多少命令引數都無法解析執行。 所以結果為b 4.如果在Dockerfile中寫成以shell格式執行 CMD echo "b" "c" 最終正常shell:echo "b" "c"結果為b c CMD echo "b" "c" = sh -c "echo "b" "c"" 個人理解: CMD 命令 引數 #正常shell執行方式;想怎麼寫就怎麼寫-------簡單 CMD [命令,引數,引數] #第一個必須是命令實體如:CMD ["echo b","echo c","c"]就會報錯。CMD ["echo","echo c","c"]結果為:echo c c------容易混淆 CMD ["sh","-c","命令","引數","引數"]#最終會被解釋為:sh -c "命令",後面的再多的引數都不會被執行。 如果可以一條命令解決問題:那麼可以選擇exec方式如:CMD["sh","-c","cat /etc/passwd;echo b"]這種方式也是官方推薦的。--------簡單 CMD:執行容器時後接的命令會覆蓋掉構建映象時CMD命令。且以CMD ["sh","-c","命令"]執行 ENTRYPOINT:執行容器時後接的命令不會覆蓋掉ENTRYPOINT,而是會將該命令作為ENTRYPOINT的引數被執行。