본문 바로가기
개발/Docker&kubernetes

Docker ENV vs RUN Export

by 궁즉변 변즉통 통즉구 2023. 7. 22.
반응형

Docker에서 기본적으로 환경변수를 사용하는 경우 ENV를 사용하게 된다. 하지만 RUN 키워드로 Shell Command도 사용이 가능한데 환경변수 설정을 위해 RUN export를 사용하면 어떻게 될까. 결론부터 얘기하자면 RUN export는 동작하지 않는다.

그 이유는 RUN export 같은 경우 동일한 Image Layer에서만 사용이 가능하기 때문이다.

 

간단하게 아래의 예시를 살펴보자

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

 

마지막 echo에서 각각 설정한 환경변수들을 참조하고 있는데 실행 결과는 다음과 같다.

foofoo  bazbaz
  • FOO: ENV 키워드를 사용해서 잘 참조가 된다.
  • BAR:  export를 선언한 동일한 Image Layer가 아닌 그 다음 Layer(명령)에서 사용했기 때문에 참조가 안된다.
  • BAZ: BAR와 동일하게 export를 사용했지만 export를 선언한 동일한 Image Layer(명령)에서 사용했기 때문에 참조가 된다.

 

참고로 Docker를 사용하면 기본적인 내용이긴 하지만 Dockerfile에서 각각의 명령어마다 Image Layer를 생성한다. 이는 각각의 명령어가 Image Layer가 다르다는 얘기가 된다. 

갑자기 궁금해서 찾아봤지만 Docker에서 환경변수는 ENV. 이것만 기억하면 될 것 같다. 물론, 빌드 시에만 활용하는 것이면 ARG를 사용해도 된다.

 

반응형

댓글