Docker운영과 디버깅

secret과 민감한 설정 관리

비밀번호와 API 키 같은 민감한 값을 이미지에 굳히지 않고 안전하게 전달하는 기본 원칙을 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

bash
docker build --secret id=npmrc,src=$HOME/.npmrc .

설명

  • Docker를 배우다 보면 가장 흔한 실수 중 하나가 비밀번호, API 키, 토큰을 이미지나 Dockerfile에 직접 넣는 것입니다. 한 번 이미지 레이어에 들어간 값은 생각보다 오래 남습니다.
  • 민감한 값은 "빌드 시 필요한 secret"과 "실행 시 필요한 설정"을 나눠 보는 것이 좋습니다. 전자는 build secret, 후자는 runtime environment나 별도 secret 관리 방식으로 다루는 편이 안전합니다.
  • 단순한 환경 변수는 편하지만, 모든 민감 정보를 무조건 env로만 처리하는 것이 최선은 아닙니다. 로그 노출, inspect 노출, 운영 도구와의 연동까지 함께 고려해야 합니다.
  • 핵심 원칙은 이미지 자체를 최대한 중립적으로 유지하는 것입니다. 즉 이미지는 공개 가능한 상태에 가깝게 만들고, 민감한 값은 배포 환경에서 주입하는 방향이 더 안전합니다.
  • 보안은 Docker 명령어 몇 개보다 습관의 문제입니다. .env를 Git에 올리지 않는 것, .dockerignore에 비밀 파일을 넣는 것, build 단계와 runtime 단계의 민감 정보 경계를 분리하는 것이 함께 가야 합니다.

빠른 정리

구분권장 방식
빌드용 비밀build secret
실행용 비밀환경별 주입, secret 관리
피해야 할 방식Dockerfile에 직접 하드코딩
핵심 원칙이미지는 중립적으로, 비밀은 외부에서

주의할 점

ENV API_KEY=...처럼 Dockerfile에 민감값을 직접 쓰면 이미지 레이어와 히스토리에 흔적이 남을 수 있습니다. secret은 "편한 곳에 적는다"보다 "나중에도 안전한가"를 먼저 보는 편이 좋습니다.

참고 링크

2 sources