1. 개요

환경 변수는 애플리케이션 구성을 외부화하는 편리한 방법입니다. 따라서 Docker 컨테이너를 빌드하는 데에도 유용합니다. 그러나 Dockerfile 에서 전달하고 사용하는 것은 가능한 한 쉽지 않습니다.

이 짧은 사용방법(예제)에서는 환경 변수 값을  Dockerfile에 전달하는 방법을 배웁니다.

먼저 환경 변수를 빌드 프로세스에 전달하는 것이 유용할 수 있는 사용 사례를 보여줍니다 그런 다음 이를 수행하는 데 사용하는 ARG 명령을 설명합니다. 마지막으로 작업 예제를 살펴보겠습니다.

2. Dockerfile 대 컨테이너 의 환경 변수

DockerfileDocker 이미지를 빌드하는 방법에 대한 지침이 포함된 스크립트 입니다. 반대로 Docker 컨테이너는 이미지의 실행 가능한 인스턴스입니다 . 필요에 따라 빌드 시간 또는 런타임 환경 변수 가 필요할 수 있습니다 .

이 기사에서는 docker build 와 함께 사용하기 위해 환경 변수를 Dockerfile 에 전달하여 빌드 시 사용자 지정에만 집중할 것 입니다.

3. Dockerfile 에서 환경 변수 사용의 장점

환경 변수를 사용할 때의 가장 큰 장점은 유연성입니다. 컨테이너를 빌드하는 데 사용 된 환경에 따라 다르게  구성되는 Dockerfile 을 하나만 만들 수 있습니다 . 예를 들어 개발 환경에서는 디버그 옵션이 활성화되어 있고 프로덕션 환경에서는 동일한 옵션이 비활성화되어 있는 애플리케이션을 상상해 보겠습니다. 환경 변수를 사용 하여 디버그 플래그를 포함하는 환경 변수를 컨테이너와 내부 앱에 전달할 Dockerfile 을 하나만 생성 하면 됩니다.

다른 중요한 이점은 Security 문제입니다. 암호 또는 기타 민감한 정보를 Dockerfile 에 직접 저장하는 것은 아마도 최선의 생각이 아닐 것입니다. 환경 변수는 이러한 문제를 극복하는 데 도움이 됩니다.

4. 구성 예

환경 변수 값을 Dockerfile 에 전달하는 방법을 보기 전에 테스트할 예제를 빌드해 보겠습니다.

환경 변수를 사용하여 콘솔에 인사말을 인쇄하는 Greetings.sh 라는 간단한 bash 스크립트를 만들 것 입니다.

#!/bin/sh

echo Hello $env_name

이제 동일한 디렉토리에 Dockerfile 을 생성합니다.

FROM alpine:latest

COPY greetings.sh .

RUN chmod +x /greetings.sh

CMD ["/greetings.sh"]

스크립트를 복사하여 실행 가능하게 만든 다음 실행합니다. 이미지를 빌드해 보겠습니다.

docker build -t baeldung_greetings .

그런 다음 실행해 보겠습니다.

docker run baeldung_greetings

콘솔에 한 줄만 표시되어야 합니다.

Hello

5. Dockerfile 에 환경 변수 전달 하기

Dockerfile 은 환경 변수를 생성하기 위한 전용 변수 유형 ENV 를 제공합니다. 컨테이너가 실행되는 동안뿐만 아니라 빌드하는 동안 ENV 값에 액세스할 수 있습니다 .

이를 사용하여 인사말 스크립트에 값을 전달하는 방법을 살펴보겠습니다. 두 가지 다른 방법이 있습니다.

5.1. 하드코딩 환경 값

환경 값을 전달하는 가장 간단한 방법은 Dockerfile 에 하드코딩하는 것 입니다. 어떤 경우에는 이것으로 충분합니다. Dockerfile에서 John  을 기본 이름으로 하드코딩 해 보겠습니다.

FROM alpine:latest

ENV env_name John

COPY greetings.sh .

RUN chmod +x /greetings.sh

CMD ["/greetings.sh"]

이제 이미지를 빌드하고 실행할 것입니다. 다음은 원하는 콘솔 출력입니다.

Hello John

5.2. 동적 환경 값 설정

Dockerfile 은 빌드 프로세스 중에 ENV 값을 설정하는 동적 도구를 제공하지 않습니다. 그러나 이 문제에 대한 해결책이 있습니다. 우리는 ARG 를 사용해야 합니다. ARG 값은 ENV와 같은 방식으로 작동하지 않습니다 . 이미지가 빌드되면 더 이상 액세스할 수 없기 때문 입니다. 이 문제를 해결하는 방법을 살펴보겠습니다.

ARG name
ENV env_name $name

ARG 변수 라는 이름 을 소개하겠습니다 . 그런 다음 ENV 를 사용하여 env_name 환경 변수 에 값을 할당하는 데 사용합니다 . 

이 인수를 설정하려면 –build-arg  플래그와 함께 전달합니다.

docker build -t baeldung_greetings --build-arg name=Baeldung .

이제 컨테이너를 실행하겠습니다. 다음을 확인해야 합니다.

Hello Baeldung

이름을 바꾸고 싶다면? 다른 build-arg 값으로 이미지를 다시 빌드하기만 하면 됩니다.

6. 결론

이 기사에서는 Dockerfile 을 빌드하는 동안 환경 변수를 설정하는 방법을 배웠습니다 .

먼저 Dockerfile 매개변수화의 이점을 확인했습니다 . 그런 다음 ENV 명령을 사용하여 환경 변수를 설정하는 방법과 ARG 를 사용하여 빌드 시 이 값을 수정 하는 방법을 시연 했습니다.

항상 그렇듯이 기사의 전체 소스 코드는 GitHub에서 사용할 수 있습니다 .

Generic footer banner