Traffine I/O

日本語

2022-06-11

Dockerにおけるビルド引数

Dockerにおけるビルド引数

DockerfileのARG命令を使用することで、イメージビルドプロセス中に使用できる変数を定義できます。これらの変数はビルド引数と呼ばれ、ビルドプロセスをカスタマイズし、より動的で柔軟なものにすることができます。

ビルド引数を定義するには、Dockerfile内でARG命令を使用します。

Dockerfile
ARG MY_VARIABLE=default_value

その後、ビルド引数はDockerfile内のさまざまな命令で使用できます。

Dockerfile
FROM node:14
ARG MY_VARIABLE
RUN echo "The value of MY_VARIABLE is: $MY_VARIABLE"

ビルドプロセス中にビルド引数の値を渡すには、docker buildコマンドで--build-argフラグを使用します。

bash
$ docker build --build-arg MY_VARIABLE=my_value -t my_image .

ENV vs. ARG

ARG命令とENV命令は、Dockerfile内で変数を定義するために使用されます。しかし、それらの間にはいくつかの重要な違いがあります。

  • ARG変数はビルドプロセス中にのみ使用可能であり、ENV変数は結果として生成されるイメージに残り、コンテナの実行時に使用できます。
  • ARG変数は、ビルドプロセス中に--build-argフラグを使用して上書きすることができますが、ENV変数は-eフラグまたは環境ファイルを介してコンテナの実行時に上書きすることができます。

Dockerビルドのパラメータ化

ビルド引数は、Dockerビルドをパラメータ化する効率的な方法を提供します。これは、異なる構成でイメージをビルドする必要がある場合や、Dockerfile内に値をハードコードしたくない場合に特に有用です。

例えば、ベースイメージのバージョンや追加パッケージのインストールをパラメータ化することができます。

Dockerfile
ARG BASE_IMAGE_VERSION=latest
FROM node:${BASE_IMAGE_VERSION}

ARG ADDITIONAL_PACKAGES=""
RUN apt-get update && apt-get install -y $ADDITIONAL_PACKAGES

ビルド引数を使用したマルチステージビルド

マルチステージビルドを使用すると、別々のビルドステージを使用して最終的な最小限のイメージを生成することで、Dockerイメージを最適化することができます。ビルド引数は、異なるステージ間で使用してビルドプロセスをカスタマイズするために使用することができます。

ビルド引数を使用したマルチステージビルドの例を以下に示します。

Dockerfile
ARG BASE_IMAGE_VERSION=latest
FROM node:${BASE_IMAGE_VERSION} as build
ARG MY_VARIABLE
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM node:${BASE_IMAGE_VERSION}-slim as production
ARG MY_VARIABLE
WORKDIR /app
COPY --from=build /app/dist /app/dist
RUN echo "The value of MY_VARIABLE in the production stage is: $MY_VARIABLE"
CMD ["npm", "start"]

この例では、MY_VARIABLEビルド引数をビルドおよび本番ステージの両方で使用しています。これは、ビルド引数がマルチステージビルドの異なるステージで使用され、一貫性を保ち、コードの重複を回避する方法を示しています。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!