はじめに
Docker ARG は、開発者がより柔軟で構成可能なコンテナイメージを作成するための強力なビルド時変数メカニズムです。このチュートリアルでは、ARG 構文の基本、実装戦略、動的なイメージ構築のための高度なテクニックを探求し、ビルド引数が Docker イメージ開発ワークフローをどのように強化できるかについての具体的な洞察を提供します。
Docker ARG は、開発者がより柔軟で構成可能なコンテナイメージを作成するための強力なビルド時変数メカニズムです。このチュートリアルでは、ARG 構文の基本、実装戦略、動的なイメージ構築のための高度なテクニックを探求し、ビルド引数が Docker イメージ開発ワークフローをどのように強化できるかについての具体的な洞察を提供します。
Docker ARG は、Dockerfile 内の強力なビルド時変数メカニズムであり、イメージ構築中に動的な構成を可能にします。ビルド引数は、実行時パラメータの注入を可能にすることで、より汎用性が高く再利用可能なコンテナイメージの作成を柔軟にします。
| 特性 | 説明 |
|---|---|
| 適用範囲 | ビルド時のみの変数 |
| 寿命 | イメージ構築プロセス中のみ存在する |
| 上書き可能性 | ビルド時に設定するか、Dockerfile で事前に定義できる |
| デフォルト値 | オプションのデフォルト値がサポートされている |
## ARG 実装の Dockerfile
ARG UBUNTU_VERSION=22.04
FROM ubuntu:${UBUNTU_VERSION}
ARG APP_VERSION=1.0.0
LABEL version=${APP_VERSION}
RUN echo "Ubuntu ${UBUNTU_VERSION} と App バージョン ${APP_VERSION} でビルドしています"
## デフォルト引数でイメージをビルド
docker build -t myapp:latest .
## ビルド引数を上書き
docker build --build-arg UBUNTU_VERSION=20.04 --build-arg APP_VERSION=2.0.0 -t myapp:custom .
## ARG 最適化を使用したマルチステージビルド
ARG GO_VERSION=1.19
FROM golang:${GO_VERSION} AS builder
ARG APP_NAME=myservice
WORKDIR /app
COPY . .
RUN go build -o ${APP_NAME}
FROM ubuntu:22.04
ARG APP_NAME=myservice
COPY --from=builder /app/${APP_NAME} /usr/local/bin/
| 戦略 | 説明 | 例 |
|---|---|---|
| デフォルト値 | フォールバック構成を提供する | ARG VERSION=latest |
| 必須引数 | 引数の指定を強制する | ARG REQUIRED_ARG! |
| 環境変数マッピング | ARG を環境変数にリンクする | ARG ENV_NAME=production |
ARG BASE_IMAGE=ubuntu
ARG BASE_TAG=22.04
FROM ${BASE_IMAGE}:${BASE_TAG}
ARG BUILD_ENV=development
ENV ENVIRONMENT=${BUILD_ENV}
ARG APP_VERSION
LABEL version=${APP_VERSION}
## 条件付きロジックを使用した複雑な ARG 設定
ARG PYTHON_VERSION=3.9
ARG BUILD_TYPE=production
FROM python:${PYTHON_VERSION}-slim
## ビルドタイプに基づく条件付きパッケージインストール
RUN if [ "${BUILD_TYPE}" = "development" ]; then \
pip install pytest debugpy; \
else \
pip install gunicorn; \
fi
| テクニック | 説明 | 使用例 |
|---|---|---|
| 必須引数 | 引数の指定を強制する | 重要な構成 |
| 条件付きビルド | 動的なビルドロジック | 環境固有のビルド |
| セキュアな変数渡し | ARG の公開範囲を制限する | 機密な構成 |
## ARG の伝播を使用した高度なマルチステージビルド
ARG BASE_IMAGE=ubuntu
ARG BASE_TAG=22.04
FROM ${BASE_IMAGE}:${BASE_TAG} AS base
ARG APP_ENV=production
ENV ENVIRONMENT=${APP_ENV}
FROM base AS builder
ARG BUILD_DEPS="gcc make"
RUN apt-get update && apt-get install -y ${BUILD_DEPS}
FROM base
COPY --from=builder /usr/local/bin /usr/local/bin
## 実行時構成を使用したセキュアな ARG の渡し方
docker build \
--build-arg GITHUB_TOKEN=$(pass github/token) \
--build-arg APP_VERSION=$(git describe --tags) \
-t myapp:latest .
Docker ARG を習得することで、開発者は、動的な構成機能を持つ、より汎用性が高く再利用可能なコンテナイメージを作成できます。このチュートリアルでは、ビルド引数がバージョン選択、環境固有のビルド、マルチステージ最適化を可能にする方法を示し、最終的に Docker イメージビルドプロセスにおける柔軟性と制御力を高めます。