私のDockerfileで、後でDockerfileで使用できる変数を定義したいと思います。
ENV
指示は承知していますが、これらの変数を環境変数にしたくありません。
Dockerfileスコープで変数を宣言する方法はありますか?
私のDockerfileで、後でDockerfileで使用できる変数を定義したいと思います。
ENV
指示は承知していますが、これらの変数を環境変数にしたくありません。
Dockerfileスコープで変数を宣言する方法はありますか?
回答:
使用できます-https://docs.docker.com/engine/reference/builder/#argをARG
参照してください
この
ARG
命令は、ユーザーがビルド時にフラグdocker build
を使用するコマンドを使用 してビルダーに渡すことができる変数を定義します--build-arg <varname>=<value>
。Dockerfileで定義されていないビルド引数をユーザーが指定した場合、ビルドはエラーを出力します。
私の知る限りENV
、「環境の置換」で述べたように、それだけを許可します
(
ENV
ステートメントで宣言された)環境変数は、Dockerfileによって解釈される変数として特定の命令で使用することもできます。
によってDockerfileの各行に対して作成された新しいコンテナごとに再宣言されるためには、これらは環境変数である必要がありますdocker build
。
つまり、これらの変数はDockerfileで直接解釈されるのではなく、Dockerfile行用に作成されたコンテナーで解釈されるため、環境変数が使用されます。
この日、私はARG
(docker 1.10+およびdocker build --build-arg var=value
)との両方を使用しますENV
。単独で
使用ARG
すると、変数は実行時ではなくビルド時に表示されます。
私のDockerfileは通常以下を持っています:
ARG var
ENV var=${var}
あなたの場合ARG
は十分です:私は通常、http_proxy変数を設定するために使用します。Dockerビルドは、ビルド時にインターネットにアクセスするために必要です。
変数が同じRUN
命令内で再利用される場合、シェル変数を設定するだけで済みます。私は彼らが公式のRuby Dockerfileでこれにどのように取り組んだかを本当に気に入っています。
RUN foo=$(date) && echo $foo
を使用できARG variable defaultValue
、runコマンドの実行中に、を使用してこの値を更新することもできます--build-arg variable=value
。これらの変数をdockerファイルで使用するには$variable
、runコマンドのように参照できます。
注:これらの変数は、Linuxコマンドなどで使用できRUN echo $variable
、イメージ内に保持されません。