Post

Dockerfile 환경변수를 파일로 관리하기

Dockerfile에 필요한 환경변수를 파일로 관리해 보안을 유지하는 방법에 대해서 설명합니다.

왜 파일로 환경변수를 관리하게 되었는가?

Dockerfile의 장점 중 하나는 프로젝트와 함께 레포지토리에 올려 프로젝트의 구성 정보를 버전으로 관리할 수 있다는 점이다. 하지만 Dockerfile에는 민감한 정보가 들어갈 수 있다. 외부에 알려져서는 안되는 키값이나 ID가 그러한 것이다.

DockerfileENV명령을 사용해서 도커 컨테이너 시작시에 환경변수를 설정할 수 있다. 하지만 ENV 명령을 사용해서 환경변수를 선언하게 되면 Dockerfile에 민감한 정보가 노출된다.

파일로 환경변수를 관리하게 되면 환경변수를 담고있는 파일은 .gitignore로 무시하면서 외부에 노출시키지 않고, 로컬에는 파일이 존재하기 때문에 민감한 정보를 외부에 공개하지 않으면서 이미지를 빌드 할 수 있다.

환경변수를 파일로 관리하는 방법

.env 파일을 활용하면 된다. 나는 네이버 클라우드의 핀포인트 서비스를 콘솔로 사용하는데 에이전트가 컨트롤러에 데이터를 전송하기 위해서는 라이센스ID 가 필요하다. Dockerfile에서 ENV변수를 선언하면 Dockerfile라이센스ID가 노출되어 버린다.

.env파일을 만들면 다음과 같이 key=value의 형태로 환경변수를 나열하면 됩니다.

1
2
PORT=8080
LICENCE_ID=6d*****7hd

docker build

docker build 명령을 사용해서 이미지를 만들 때 .env 환경변수 파일을 사용하기 위해서는 --env-file 옵션으로 환경변수 정보가 담긴 파일을 명시해주어야 합니다.

1
docker run ... --env-file ./.env ...

참고로 --env-file 옵션이 없으면 .env라는 이름의 파일이 자동으로 사용됩니다.

Dockerfile, Docker Compose

Dockerfile과 Docker Compose내에서 파일에 작성한 환경변수가 필요하다면 `${…} 내부에 정의해둔 환경변수의 key값을 작성하면 됩니다.

도커 컴포즈를 이용해서 빌드할 때도 docker build와 마찬가지로 –env-file 옵션을 사용하면 됩니다. 물론 이것도 해당 옵션을 작성하지 않으면 가장 Dockerfile, docker-compose.yml이 있는 상위폴더의 .env 파일을 사용합니다.

Reference

This post is licensed under CC BY 4.0 by the author.