소개
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_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 이미지 빌드 프로세스에서 더 큰 유연성과 제어권을 제공합니다.