私のDockerfileの中で、私は変数を定義するできること--- Dockerfileの中で後で使うしたいと思います。
ENV
命令を知っていますが、これらの変数を環境変数にしたくありません。
Dockerfileスコープで変数を宣言するする方法はありますか?
ARG
を使用できます - https://docs.docker.com/engine/reference/builder/#arg を参照してください
ARG
命令は、ユーザーがdocker build
フラグを使用して--build-arg <varname>=<value>
コマンドを使用してビルド時にビルダーに渡すことができる変数を定義します。 Dockerfileで定義されていないビルド引数をユーザーが指定した場合、ビルドはエラーを出力します。
私の知る限りでは、 " 環境の置き換え "で述べたように、ENV
だけがそれを許可しています
環境変数(
ENV
ステートメントで宣言)は、Dockerfileによって解釈される変数として特定の命令で使用することもできます。
docker build
によってDockerfileの各行用に作成されたそれぞれの新しいコンテナで再宣言されるために、それらは環境変数である必要があります。
言い換えれば、これらの変数はDockerfile内で直接解釈されるのではなく、Dockerfile行用に作成されたコンテナ内で解釈されるため、環境変数が使用されます。
今日は、 ARG
( docker 1.10+、およびdocker build --build-arg var=value
)と ENV
の両方を使用しています。ARG
を単独で使用すると、変数はビルド時に表示され、実行時にはnotになります。
私のDockerfileには通常以下のものがあります。
ARG var
ENV var=${var}
あなたの場合はARG
で十分です:私は通常http_proxy変数を設定するためにそれを使います、そのdockerビルドはビルド時にインターネットにアクセスするために必要です。
あなたの質問に答えるには:
私のDockerfileでは、後でDockerfileで使用できる変数を定義したいと思います。
変数を定義することができます:
ARG myvalue=3
等号を囲むスペースは使用できません。
そして後でそれを使う
RUN echo $myvalue > /test
変数が同じRUN
命令内で再使用される場合は、単にシェル変数を設定することができます。私は彼らが 公式のRuby Dockerfile でこれに近づいた方法が本当に好きです。