반응형
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를 사용해도 된다.
반응형
'개발 > Docker&kubernetes' 카테고리의 다른 글
docker permission denied 해결 (0) | 2024.02.12 |
---|---|
MongoDB docker 설치 (0) | 2023.09.16 |
Docker 리소스 일괄 삭제(docker system prune)-미사용 Docker 리소스 모두 삭제 (0) | 2023.05.29 |
helm upgrade configmap, secret 변경 시 pod 자동 재시작 (0) | 2023.03.20 |
Distroless 이미지로 안전하고 최적화된 이미지 생성 (0) | 2023.03.13 |
댓글