
개요
본 글에서는 도커 이미지의 빌드 과정과 레이어 구조를 확인할 수 있는 "docker history 명령어"에 대해 알아보겠습니다. 특히 이미지 히스토리에 노출되는 정보들을 통해 보안상 주의해야 할 점을 정리하고자 합니다.
Docker History 명령어
docker history 명령어는 도커 이미지의 레이어 히스토리를 조회할 수 있습니다.
각 레이어가 어떤 명령어로 생성되었는지, 언제 만들어졌는지, 크기는 얼마인지 등을 확인할 수 있습니다.
기본 사용법
docker history my-app
출력 예시:
IMAGE CREATED CREATED BY SIZE
abc123def 2 hours ago CMD ["npm" "start"] 0B
456ghijkl 2 hours ago COPY . /app 340kB
mnopqrst 2 hours ago ARG API_KEY=1234567890 0B
Docker History 명령어의 보안 취약점
"docker history 명령어"는 이미지가 어떻게 빌드되었는지를 보여주는 기록입니다. 명령어를 통해 각 빌드 단계와 설정값이 그대로 노출되기 때문에, 민감한 정보를 다룰 때 주의가 필요합니다.
보안 위험 사례
1. 잘못된 예시 : ARG 사용
ARG DB_PASSWORD=mypassword123
ARG API_KEY=abcd1234
실행:
$ docker history my-app
IMAGE CREATED BY
abc123def ARG DB_PASSWORD=mypassword123 # 비밀번호 노출!
def456ghi ARG API_KEY=abcd1234 # API 키 노출!
위와 같이 비밀번호나 API 키와 같은 노출되지 않아야 하는 값들이 그대로 노출되는 것을 볼 수 있습니다.
2. 안전한 방법 - ENV 사용
ENV DB_PASSWORD="" # 빈 값으로 선언
ENV API_KEY="" # 런타임에 주입
실행:
docker run --env DB_PASSWORD=mypassword123 --env API_KEY=abcd1234 my-app
민감한 정보들을 노출하지 않기 위해 런타임 시점에 값을 주입할 수 있는 ENV를 사용할 수 있습니다.
ENV로 선언된 값들은 docker history에 노출되지 않으며, 컨테이너 실행 시점에 안전하게 주입할 수 있습니다.
보안 권장사항
- ARG는 버전, 포트 등 공개되어도 안전한 정보에만 사용
- 민감한 정보는 반드시 ENV로 처리
- 환경변수 파일(.env)은 버전 관리 제외
마치며
도커 이미지의 빌드 히스토리는 누구나 확인할 수 있는 정보이므로, 민감한 정보는 반드시 런타임 환경변수로 처리해야 합니다. 특히 팀 프로젝트나 공개 이미지를 배포할 때는 더욱 주의가 필요합니다.
'TIL,일일 회고' 카테고리의 다른 글

개요
본 글에서는 도커 이미지의 빌드 과정과 레이어 구조를 확인할 수 있는 "docker history 명령어"에 대해 알아보겠습니다. 특히 이미지 히스토리에 노출되는 정보들을 통해 보안상 주의해야 할 점을 정리하고자 합니다.
Docker History 명령어
docker history 명령어는 도커 이미지의 레이어 히스토리를 조회할 수 있습니다.
각 레이어가 어떤 명령어로 생성되었는지, 언제 만들어졌는지, 크기는 얼마인지 등을 확인할 수 있습니다.
기본 사용법
docker history my-app
출력 예시:
IMAGE CREATED CREATED BY SIZE
abc123def 2 hours ago CMD ["npm" "start"] 0B
456ghijkl 2 hours ago COPY . /app 340kB
mnopqrst 2 hours ago ARG API_KEY=1234567890 0B
Docker History 명령어의 보안 취약점
"docker history 명령어"는 이미지가 어떻게 빌드되었는지를 보여주는 기록입니다. 명령어를 통해 각 빌드 단계와 설정값이 그대로 노출되기 때문에, 민감한 정보를 다룰 때 주의가 필요합니다.
보안 위험 사례
1. 잘못된 예시 : ARG 사용
ARG DB_PASSWORD=mypassword123
ARG API_KEY=abcd1234
실행:
$ docker history my-app
IMAGE CREATED BY
abc123def ARG DB_PASSWORD=mypassword123 # 비밀번호 노출!
def456ghi ARG API_KEY=abcd1234 # API 키 노출!
위와 같이 비밀번호나 API 키와 같은 노출되지 않아야 하는 값들이 그대로 노출되는 것을 볼 수 있습니다.
2. 안전한 방법 - ENV 사용
ENV DB_PASSWORD="" # 빈 값으로 선언
ENV API_KEY="" # 런타임에 주입
실행:
docker run --env DB_PASSWORD=mypassword123 --env API_KEY=abcd1234 my-app
민감한 정보들을 노출하지 않기 위해 런타임 시점에 값을 주입할 수 있는 ENV를 사용할 수 있습니다.
ENV로 선언된 값들은 docker history에 노출되지 않으며, 컨테이너 실행 시점에 안전하게 주입할 수 있습니다.
보안 권장사항
- ARG는 버전, 포트 등 공개되어도 안전한 정보에만 사용
- 민감한 정보는 반드시 ENV로 처리
- 환경변수 파일(.env)은 버전 관리 제외
마치며
도커 이미지의 빌드 히스토리는 누구나 확인할 수 있는 정보이므로, 민감한 정보는 반드시 런타임 환경변수로 처리해야 합니다. 특히 팀 프로젝트나 공개 이미지를 배포할 때는 더욱 주의가 필요합니다.