Dockerfile中的RUN指令將在當前圖像頂部的新層中執行任何命令,并提交結果。生成的提交圖像將用于中的下一步Dockerfile。
語法格式
RUN command(shell形式,命令在shell中運行,默認情況下/bin/sh -c在Linux或cmd /S /CWindows上運行)
RUN ["executable", "param1", "param2"]
分層RUN指令和生成提交符合Docker的核心概念,在Docker上提交是廉價的,并且可以從映像歷史記錄的任何位置創建容器,就像源代碼控制一樣。
在shell形式中,可以使用\(反斜杠)將一條RUN指令繼續到下一行。例如,考慮以下兩行:
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
它們在一起等效于以下這一行:
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
要使用'/ bin / sh'以外的其他shell,請使用exec形式傳入所需的shell。例如:
RUN ["/bin/bash", "-c", "echo hello"]
提示:在EXEC形式被解析為一個JSON陣列,這意味著必須使用雙引號“
與shell表單不同,exec表單不會調用命令shell。這意味著不會進行常規的外殼處理。例如, RUN [ "echo", "$HOME" ]將不會對進行變量替換$HOME。如果要進行shell處理,則可以使用shell形式或直接執行shell,例如:RUN [ "sh", "-c", "echo $HOME" ]。當使用exec表單并直接執行shell時(例如在shell表單中),是由shell進行環境變量擴展,而不是docker。
RUN下一次構建期間,指令緩存不會自動失效。類似指令的緩存 RUN apt-get dist-upgrade -y將在下一個構建中重用。RUN指令的緩存可以通過使用--no-cache 標志來使無效,例如docker build --no-cache。








