소개
Docker ARG 는 개발자가 더 유연하고 구성 가능한 컨테이너 이미지를 생성할 수 있도록 지원하는 강력한 빌드 시 변수 메커니즘입니다. 이 튜토리얼에서는 ARG 구문의 기본 사항, 구현 전략 및 동적 이미지 구축을 위한 고급 기술을 탐구하여 빌드 인수가 Docker 이미지 개발 워크플로우를 어떻게 향상시킬 수 있는지에 대한 실질적인 통찰력을 제공합니다.
Docker ARG 기본 사항
Docker ARG 이해
Docker ARG 는 Dockerfile 에서 이미지 생성 시 동적인 구성을 가능하게 하는 강력한 빌드 시 변수 메커니즘입니다. 빌드 인수는 런타임 매개변수 주입을 통해 더 일반적이고 재사용 가능한 컨테이너 이미지를 생성하는 유연성을 제공합니다.
Docker ARG 의 주요 특징
| 특징 | 설명 |
|---|---|
| 범위 | 빌드 시에만 사용 가능한 변수 |
| 수명 | 이미지 빌드 프로세스 동안만 존재 |
| 재정의 가능성 | 빌드 시 설정하거나 Dockerfile 에 미리 정의할 수 있음 |
| 기본값 | 선택적인 기본값 지원 |
기본 ARG 구현 예제
## 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_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 워크플로우 시각화
graph LR
A[Dockerfile] --> B{빌드 인수}
B --> |정의| C[기본값]
B --> |재정의| D[사용자 지정 값]
C --> E[이미지 빌드]
D --> E
Docker ARG 의 활용 사례
- 동적인 베이스 이미지 선택
- 버전 구성
- 환경별 빌드
- 매개변수화된 이미지 생성
ARG 구현 전략
다단계 빌드 최적화
## 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 범위 및 상속
graph TD
A[전역 ARG] --> B[단계 1 ARG]
A --> C[단계 2 ARG]
B --> D[로컬 사용]
C --> E[로컬 사용]
고급 ARG 구성 전략
| 전략 | 설명 | 예시 |
|---|---|---|
| 기본값 | 대체 구성 제공 | ARG VERSION=latest |
| 필수 인수 | 인수 지정 강제 | ARG REQUIRED_ARG! |
| 환경 매핑 | ARG 를 환경 변수에 연결 | ARG ENV_NAME=production |
복잡한 ARG 연결
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 사용
- ARG 범위 최소화
- 다단계 빌드 활용
고급 ARG 기법
동적 빌드 구성
## 조건 논리와 함께 복잡한 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 상속 및 범위
graph TD
A[전역 ARG 정의] --> B[빌드 단계 1]
A --> C[빌드 단계 2]
B --> D[상속된 변수]
C --> E[단계별 재정의]
고급 ARG 기법 매트릭스
| 기법 | 설명 | 사용 사례 |
|---|---|---|
| 필수 인수 | 인수 지정 강제 | 중요한 구성 요소 |
| 조건부 빌드 | 동적 빌드 논리 | 환경별 빌드 |
| 안전한 변수 전달 | ARG 노출 제한 | 민감한 구성 요소 |
복잡한 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 패턴
## 런타임 구성으로 안전하게 ARG 전달
docker build \
--build-arg GITHUB_TOKEN=$(pass github/token) \
--build-arg APP_VERSION=$(git describe --tags) \
-t myapp:latest .
성능 및 보안 고려 사항
- 최종 이미지 단계에서 ARG 사용 최소화
- 아티팩트 분리에 다단계 빌드 사용
- ARG 에 민감한 데이터 포함 방지
- 빌드 시 변수 범위 활용
요약
Docker ARG 를 마스터함으로써 개발자는 동적 구성 기능을 갖춘 더욱 다재다능하고 재사용 가능한 컨테이너 이미지를 만들 수 있습니다. 이 튜토리얼은 빌드 인수가 버전 선택, 환경별 빌드 및 다단계 최적화를 가능하게 하는 방법을 보여주며, 궁극적으로 Docker 이미지 빌드 프로세스에서 더 큰 유연성과 제어권을 제공합니다.



