본문 바로가기

About/Docker

[Docker] Dockerfile ENV 명령어(환경변수 설정)

Dockerfile 안에서 환경변수를 설정하고 싶을 때는 ENV 명령어를 사용합니다. ENV 명령어는 다음 두 서식 중 하나로 기술합니다. 

• Key value 형
• Key=value 형

 

예시)

1
2
ENV [key] [value]
ENV [key]=[value]

 

 

1. key value 형으로 지정하는 경우

단일 환경변수에 하나의 값을 설정합니다. 첫 번째 공백 앞을 key로 설정하면 그 이후는 모두 문자열로 취급합니다. 공백이나 따옴표와 같은 문자를 포함한 것도 문자열로 취급합니다.

키명
NAME "Kim"
NICKNAME JingO
AGE 27

예를들어 위와 같이 설정하고 싶은 경우는 다음과 같이 기술합니다.

1
2
3
ENV NAME "Jihwan"
ENV NICKNAME JingO
ENV AGE 27
cs

 

하지만 위의 명령을 실행하면 명령어마다 레이어가 만들어지며 Docker 이미지를 빌드합니다.(Docker 이미지가 Union File System을 기반으로 동작하기 때문) 
따라서 ENV 명령이 3줄에 걸쳐서 작성되었으므로 3개의 Docker 이미지를 겹쳐서 만들게 됩니다. ENV로 지정한 환경 변수가 많아지면 이미지 레이어가 많아져서 좋지 않을 것입니다.

따라서 key value 형은 하나의 환경변수만 지정하는 경우 사용하는 것이 좋습니다.

 

2. key=value 형으로 지정하는 경우

한 번에 여러 개의 값을 설정할 때는 환경변수를 key=value로 지정합니다. 위의 테이블을 key=value형으로 기술하면 다음과 같습니다.

1
2
3
ENV NAME="Jihwan" \
    NICKNAME=JingO \
    AGE=27
cs

 

여기서는 하나의 ENV 명령으로 여러 개의 값을 설정하므로 만들어지는 Docker 이미지 레이어는 하나입니다.

이스케이프 문자가 필요한 경우 변수 앞에 \를 추가하면 이스케이프처리를 할 수 있습니다.

ENV 명령어로 지정한 환경변수는 컨테이너 실행 시 docker container run 명령의 --env 옵션을 사용하여 변경할 수 있습니다.

 

3. 환경변수 확인(Ubuntu 예시)

1
2
3
4
5
FROM ubuntu:20.04
 
ENV NAME="Jihwan" \
    NICKNAME=JingO \
    AGE=27
cs

 

위와 같이 Dockerfile 을 작성합니다. ubuntu:20.04 이미지를 활용하며 환경변수로 NAME, NICKNAME, AGE를 지정합니다.

그리고 다음 커맨드로 Dockerfile을 빌드합니다. (Dockerfile이 있는 디렉토리에서 실행해야하는 것을 잊지마세요.)

1
docker build -t my-ubuntu:1.0 .
cs

 

이미지가 정상적으로 빌드 되었다면 다음 명령어로 해당 이미지를 이용한 컨테이너를 하나 생성한 후 echo 명령어를 이용하여 환경 변수를 확인합니다.

1
2
3
4
5
6
7
8
docker run -it my-ubuntu:1.0
# 컨테이너 접속
root@5d7dbc0f289d:/# echo $NAME 
Jihwan
root@5d7dbc0f289d:/# echo $NICKNAME
JingO
root@5d7dbc0f289d:/# echo $AGE
27
cs

 

Dockerfile의 ENV에서 설정한 내용이 출력되는 것을 확인할 수 있습니다.


Dockerfile의 ENV 명령에 대하여 살펴보았습니다.

 

다음 도서를 참고하여 작성하였습니다.

www.aladin.co.kr/shop/wproduct.aspx?ItemId=166082298

 

완벽한 IT 인프라 구축을 위한 Docker

컨테이너 기술을 사용한 애플리케이션 실행 환경 플랫폼인 ‘Docker’를 사용하여 인프라를 구축하기 위한 입문서. 제2판에서는 Docker의 새로운 기능 및 명령과 더불어, 멀티호스트 환경에서 실행

www.aladin.co.kr