Docker 주니어 기술면접

Docker 주니어 (1~3년) 종합 5문항 조회수 119 · 2026-05-07 (목) 03:10:46
1 Docker 빌드 최적화
Medium

Q. Dockerfile을 작성할 때 RUN 명령어를 여러 개로 나누는 것과 하나로 합치는 것(&&로 연결)의 차이점은 무엇이며, 각각 어떤 영향을 미치는지 설명해주세요.

A. 모범답안

RUN 명령어를 여러 개로 나누면 각 명령어마다 새로운 레이어가 생성되어 이미지 크기가 증가하고, 중간 파일들이 삭제되어도 이전 레이어에 남아있어 용량을 차지합니다. 반면 &&로 연결하여 하나의 RUN으로 합치면 단일 레이어로 생성되어 이미지 크기를 줄일 수 있고, 같은 레이어 내에서 생성된 임시 파일을 삭제하면 실제로 용량이 줄어듭니다. 하지만 명령어를 합치면 빌드 캐시 활용도가 떨어져 작은 변경에도 전체를 다시 실행해야 할 수 있으므로, 자주 변경되는 부분과 고정된 부분을 적절히 분리하는 것이 중요합니다.

핵심 포인트
  • • 각 RUN 명령어는 새로운 레이어를 생성하여 이미지 크기에 영향
  • • &&로 연결하면 단일 레이어로 생성되어 중간 파일 삭제 시 실제 용량 감소
  • • 빌드 캐시 효율성과 이미지 크기 사이의 트레이드오프 고려 필요
Follow-up 질문

멀티 스테이지 빌드를 사용하면 이러한 레이어 최적화 문제를 어떻게 해결할 수 있나요?

2 Docker 컨테이너 로깅
Easy

Q. Docker 컨테이너의 로그를 확인하는 방법과 로그가 기본적으로 어디에 저장되는지 설명해주세요.

A. 모범답안

Docker 컨테이너의 로그는 'docker logs [컨테이너명]' 명령어로 확인할 수 있으며, 실시간 로그를 보려면 -f 옵션을 사용합니다. 컨테이너 내부 애플리케이션이 stdout과 stderr로 출력한 내용이 Docker 로그로 수집됩니다. 기본적으로 로그는 호스트의 /var/lib/docker/containers/[컨테이너ID]/[컨테이너ID]-json.log 파일에 JSON 형식으로 저장되며, 로그 드라이버 설정을 통해 다른 로깅 시스템으로 전송할 수도 있습니다.

핵심 포인트
  • • docker logs 명령어로 컨테이너 로그 확인 가능
  • • 컨테이너의 stdout/stderr 출력이 Docker 로그로 수집됨
  • • 기본 저장 위치는 /var/lib/docker/containers 디렉토리
Follow-up 질문

프로덕션 환경에서 컨테이너 로그가 무한정 쌓이는 것을 방지하려면 어떤 설정을 해야 하나요?

3 Docker 이미지 관리
Medium

Q. Docker 이미지 태그에서 'latest' 태그를 프로덕션 환경에서 사용하지 말아야 하는 이유와 올바른 태깅 전략을 설명해주세요.

A. 모범답안

'latest' 태그는 가장 최신 이미지를 가리키는 동적인 태그로, 같은 태그명이어도 시간에 따라 다른 이미지를 참조할 수 있어 배포의 일관성과 재현성을 보장할 수 없습니다. 프로덕션에서는 문제 발생 시 정확히 어떤 버전이 배포되었는지 추적이 어렵고, 롤백 시에도 이전 버전을 특정하기 힘듭니다. 올바른 전략은 시맨틱 버저닝(v1.2.3)이나 Git 커밋 해시를 사용하여 명시적인 버전을 태그로 지정하고, 각 배포마다 고유한 태그를 사용하여 버전 추적과 롤백을 용이하게 하는 것입니다.

핵심 포인트
  • • latest 태그는 동적이어서 배포의 일관성과 재현성을 보장할 수 없음
  • • 버전 추적과 롤백이 어려워 프로덕션 환경에서 위험
  • • 시맨틱 버저닝이나 Git 커밋 해시 등 명시적 버전 태그 사용 권장
Follow-up 질문

CI/CD 파이프라인에서 Docker 이미지 태그를 자동으로 생성할 때 어떤 정보들을 포함시키면 좋을까요?

4 Docker 환경 변수
Easy

Q. Docker 컨테이너에 환경 변수를 전달하는 방법들을 설명하고, 민감한 정보(비밀번호, API 키 등)를 다룰 때 주의해야 할 점은 무엇인지 말씀해주세요.

A. 모범답안

Docker 컨테이너에 환경 변수를 전달하는 방법은 docker run 시 -e 옵션으로 직접 전달하거나, --env-file 옵션으로 파일에서 읽어오는 방법, 그리고 Dockerfile의 ENV 명령어로 기본값을 설정하는 방법이 있습니다. 민감한 정보는 Dockerfile이나 이미지에 직접 포함시키면 안 되며, 이미지 레이어에 영구적으로 남아 보안 위험이 됩니다. 민감한 정보는 런타임에 환경 변수나 Docker Secrets, 또는 외부 비밀 관리 시스템(Vault 등)을 통해 주입하고, .env 파일은 .gitignore에 추가하여 버전 관리에서 제외해야 합니다.

핵심 포인트
  • • -e 옵션, --env-file, ENV 명령어 등 다양한 환경 변수 전달 방법 존재
  • • 민감한 정보는 Dockerfile이나 이미지에 직접 포함하면 안 됨
  • • 런타임에 환경 변수로 주입하고 .env 파일은 버전 관리에서 제외
Follow-up 질문

Docker Swarm이나 Kubernetes 환경에서는 민감한 정보를 어떻게 관리하나요?

5 Docker 헬스체크
Medium

Q. Dockerfile의 HEALTHCHECK 명령어의 역할과 이것이 없을 때 발생할 수 있는 문제점, 그리고 효과적인 헬스체크 작성 방법을 설명해주세요.

A. 모범답안

HEALTHCHECK는 컨테이너가 정상적으로 동작하는지 주기적으로 확인하는 명령어로, 프로세스는 실행 중이지만 애플리케이션이 응답하지 않는 상황을 감지할 수 있습니다. 헬스체크가 없으면 컨테이너가 실행 중(running)이지만 실제로는 서비스가 불가능한 상태를 Docker가 인지하지 못해, 오케스트레이션 도구가 문제 있는 컨테이너를 재시작하거나 트래픽을 차단하지 못합니다. 효과적인 헬스체크는 단순 프로세스 확인이 아닌 실제 엔드포인트 호출(curl /health)이나 DB 연결 확인 등 애플리케이션의 핵심 기능을 검증해야 하며, 너무 무겁지 않고 빠르게 응답할 수 있어야 합니다.

핵심 포인트
  • • HEALTHCHECK는 컨테이너의 실제 서비스 가능 상태를 확인
  • • 없으면 프로세스는 살아있지만 서비스 불가능한 상태를 감지 못함
  • • 실제 엔드포인트나 핵심 기능을 검증하되 가볍고 빠르게 작성
Follow-up 질문

헬스체크의 interval, timeout, retries 파라미터는 어떻게 설정하는 것이 좋으며, 각각 어떤 의미인가요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!