002-Dockerfile-RUN
構文
構文1
RUN(shellフォーム形式、このコマンドはshellで実行され、デフォルトではLinuxでは:/bin/sh-c、Windowsでは:cmd/S/C)
構文2
さぎょう
RUN命令は、現在のミラーの上の新しいレイヤで任意の任命を実行し、結果を送信する.生成されたコミットミラーは、次のDockerfileに使用されます.
階層化RUN命令と生成コミットはDockerの核心概念に合致し、コミット操作は安価であり、ソースコード制御のようにミラー履歴の任意の点からコンテナを作成することができる.
EXEC形式はshellがアドレスを書き換えることを避けることができ、RUNは指定されたshellコマンドを含まないミラーを使用することができる.
SHELLコマンドを使用してshellフォームのデフォルトshellを変更できます.
shell形式では、(スラッシュ)を使用して単一RUNコマンドを次の行に続行できます.
例
例1-shell形式使用単一RUN命令を次の行に続行
この2つの書く形式は等価である.
に注意
注意1
「/bin/sh」とは異なるshellを使用するには、必要なshellをインポートするexecフォームを使用します.例:RUN["/bin/bash","-c","echo hello"]
注意2
execフォームはJSON配列として解析されます.これは、単一引用符ではなく単語の周りに二重引用符(")を使用する必要があることを意味します.
注意3
shellフォームとは異なり、execフォームはshellを呼び出しません.これは、正常なshell処理が発生しないことを意味します.例えば、RUN[echo]、「HOM E」は変数を置換しないHOME「変数を置換しないHOME」は変数を置換しない.shell処理が必要な場合は、shellフォームを使用するか、RUN[「sh」、「-c」、「echo$HOME」などのshellを直接実行します.EXecフォームを使用してshellを直接実行する場合(shellフォームの場合など)、dockerではなく環境変数拡張shellを実行します.
注意4
JSONフォームでは、バックスラッシュをエスケープする必要があります.これは、バーがパス区切り記号であるWindowsで特に重要です.有効なJSONではないため、1行はshell表現と見なされ、予期せぬ方法で失敗します.RUN["c:windowssystem 32tasklist.exe"]この例の正しい構文は、RUN["c:windowssystem 32tasklist.exe"]です.
注意5
RUNは次の構築中に命令のキャッシュが自動的に無効になることはない.同様の命令のキャッシュRUN apt-get dist-upgrade-yは、次の構築中に再利用されます.例えば、RUNは、--no-cacheフラグを使用することによって、命令のキャッシュを無効にするdocker build--no-cach
注意6
ADDコマンドはRUNコマンドの通知キャッシュを無効にすることができますので、ADDを参照してください
構文1
RUN(shellフォーム形式、このコマンドはshellで実行され、デフォルトではLinuxでは:/bin/sh-c、Windowsでは:cmd/S/C)
構文2
RUN ["executable", "param1", "param2"] (EXEC )
さぎょう
RUN命令は、現在のミラーの上の新しいレイヤで任意の任命を実行し、結果を送信する.生成されたコミットミラーは、次のDockerfileに使用されます.
階層化RUN命令と生成コミットはDockerの核心概念に合致し、コミット操作は安価であり、ソースコード制御のようにミラー履歴の任意の点からコンテナを作成することができる.
EXEC形式はshellがアドレスを書き換えることを避けることができ、RUNは指定されたshellコマンドを含まないミラーを使用することができる.
SHELLコマンドを使用してshellフォームのデフォルトshellを変更できます.
shell形式では、(スラッシュ)を使用して単一RUNコマンドを次の行に続行できます.
例
例1-shell形式使用単一RUN命令を次の行に続行
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
この2つの書く形式は等価である.
に注意
注意1
「/bin/sh」とは異なるshellを使用するには、必要なshellをインポートするexecフォームを使用します.例:RUN["/bin/bash","-c","echo hello"]
注意2
execフォームはJSON配列として解析されます.これは、単一引用符ではなく単語の周りに二重引用符(")を使用する必要があることを意味します.
注意3
shellフォームとは異なり、execフォームはshellを呼び出しません.これは、正常なshell処理が発生しないことを意味します.例えば、RUN[echo]、「HOM E」は変数を置換しないHOME「変数を置換しないHOME」は変数を置換しない.shell処理が必要な場合は、shellフォームを使用するか、RUN[「sh」、「-c」、「echo$HOME」などのshellを直接実行します.EXecフォームを使用してshellを直接実行する場合(shellフォームの場合など)、dockerではなく環境変数拡張shellを実行します.
注意4
JSONフォームでは、バックスラッシュをエスケープする必要があります.これは、バーがパス区切り記号であるWindowsで特に重要です.有効なJSONではないため、1行はshell表現と見なされ、予期せぬ方法で失敗します.RUN["c:windowssystem 32tasklist.exe"]この例の正しい構文は、RUN["c:windowssystem 32tasklist.exe"]です.
注意5
RUNは次の構築中に命令のキャッシュが自動的に無効になることはない.同様の命令のキャッシュRUN apt-get dist-upgrade-yは、次の構築中に再利用されます.例えば、RUNは、--no-cacheフラグを使用することによって、命令のキャッシュを無効にするdocker build--no-cach
注意6
ADDコマンドはRUNコマンドの通知キャッシュを無効にすることができますので、ADDを参照してください