기본 패턴
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