Docker 주니어 기술면접

Docker 주니어 (1~3년) 프레임워크 3문항 조회수 15 · 2026-08-18 (화) 07:40:40
1 Docker Registry
Medium

Q. Docker 이미지를 Docker Hub 같은 레지스트리에 푸시(push)하고 풀(pull)하는 과정에서 이미지가 어떻게 전송되는지 설명해주세요. 특히 레이어 단위로 전송되는 방식이 전체 이미지를 한 번에 전송하는 것과 비교했을 때 어떤 장점이 있는지 말씀해주세요.

이미지가 레이어로 구성되어 있다는 점과, 이미 존재하는 레이어는 재전송하지 않는다는 점을 생각해보세요.

A. 모범답안

Docker 이미지는 레지스트리와 주고받을 때 레이어 단위로 전송됩니다. 각 레이어는 고유한 해시값(다이제스트)으로 식별되며, 푸시 시 레지스트리에 이미 존재하는 레이어는 건너뛰고 새로운 레이어만 업로드합니다. 풀할 때도 로컬에 이미 존재하는 레이어는 다운로드하지 않고 재사용합니다. 이 방식은 네트워크 대역폭을 크게 절약하고 전송 시간을 단축시킵니다. 예를 들어 베이스 이미지가 같은 여러 애플리케이션 이미지를 배포할 때, 베이스 레이어는 한 번만 전송되고 애플리케이션 코드가 담긴 상위 레이어만 매번 전송됩니다. 이는 증분 업데이트(incremental update) 개념과 유사하여 CI/CD 파이프라인에서 배포 속도를 크게 향상시킵니다.

핵심 포인트
  • • 이미지는 레이어 단위로 전송되며 각 레이어는 고유한 해시값으로 식별됨
  • • 이미 존재하는 레이어는 재전송하지 않아 네트워크 대역폭과 시간을 절약
  • • 베이스 이미지를 공유하는 여러 이미지 배포 시 효율적
답변에 넣으면 좋은 키워드
레이어 다이제스트 해시값 증분 전송 레지스트리 푸시 풀
실무에서는

CI/CD 파이프라인에서 애플리케이션을 자주 배포할 때 레이어 캐싱으로 배포 시간을 크게 단축할 수 있습니다.

Follow-up 질문

Docker 레지스트리에서 이미지를 삭제했을 때 실제 스토리지 공간이 즉시 회수되지 않는 이유는 무엇인가요?

2 Docker Build Context
Medium

Q. docker build 명령어를 실행할 때 '빌드 컨텍스트(Build Context)'가 무엇인지 설명하고, 빌드 컨텍스트가 너무 크면 어떤 문제가 발생하는지, 그리고 이를 최적화하는 방법을 말씀해주세요.

docker build 명령어 실행 시 Docker 데몬으로 전송되는 파일들의 범위를 생각해보세요.

A. 모범답안

빌드 컨텍스트는 docker build 명령어를 실행할 때 Docker 데몬에 전송되는 파일과 디렉토리의 집합입니다. 일반적으로 Dockerfile이 위치한 디렉토리의 모든 내용이 빌드 컨텍스트에 포함됩니다. 빌드 컨텍스트가 크면 Docker 데몬으로 파일을 전송하는 시간이 길어져 빌드 속도가 느려지고, 메모리 사용량도 증가합니다. 최적화 방법으로는 .dockerignore 파일을 사용하여 불필요한 파일(node_modules, .git, 로그 파일 등)을 제외하고, Dockerfile을 프로젝트 루트가 아닌 적절한 하위 디렉토리에 배치하거나, 빌드에 필요한 파일만 별도 디렉토리로 분리하는 방법이 있습니다. 특히 대용량 데이터 파일이나 빌드와 무관한 문서, 테스트 파일 등을 제외하면 빌드 성능이 크게 향상됩니다.

핵심 포인트
  • • 빌드 컨텍스트는 Docker 데몬에 전송되는 파일과 디렉토리의 집합
  • • 컨텍스트가 크면 전송 시간과 메모리 사용량이 증가하여 빌드가 느려짐
  • • .dockerignore로 불필요한 파일을 제외하여 최적화 가능
답변에 넣으면 좋은 키워드
빌드 컨텍스트 Docker 데몬 .dockerignore 빌드 최적화 전송 시간
실무에서는

대규모 모노레포 환경에서 빌드 컨텍스트를 최적화하지 않으면 빌드 시간이 수 분 이상 소요될 수 있습니다.

Follow-up 질문

.dockerignore 파일의 문법이 .gitignore와 어떻게 다르며, 빌드 성능에 가장 큰 영향을 미치는 파일 유형은 무엇인가요?

3 Docker Image Inspection
Easy

Q. docker inspect 명령어의 용도와 출력 형식을 설명하고, 실행 중인 컨테이너의 IP 주소를 확인하거나 마운트된 볼륨 정보를 조회하는 등 실무에서 어떻게 활용할 수 있는지 예시를 들어주세요.

Docker 객체(이미지, 컨테이너, 네트워크, 볼륨)의 상세 정보를 확인하는 명령어입니다.

A. 모범답안

docker inspect는 Docker 객체(컨테이너, 이미지, 볼륨, 네트워크)의 상세한 메타데이터와 설정 정보를 JSON 형식으로 출력하는 명령어입니다. 실행 중인 컨테이너의 IP 주소는 docker inspect 컨테이너명 --format '{{.NetworkSettings.IPAddress}}'로 확인할 수 있고, 마운트된 볼륨 정보는 .Mounts 필드에서 조회할 수 있습니다. 실무에서는 컨테이너의 환경 변수 확인, 포트 바인딩 상태 점검, 네트워크 설정 디버깅, 리소스 제한 설정 확인 등에 활용됩니다. --format 옵션을 사용하면 Go 템플릿 문법으로 필요한 정보만 추출할 수 있어 스크립트 자동화에도 유용합니다. 특히 트러블슈팅 시 컨테이너가 예상과 다르게 동작할 때 실제 적용된 설정을 확인하는 데 필수적인 도구입니다.

핵심 포인트
  • • Docker 객체의 상세 정보를 JSON 형식으로 출력하는 명령어
  • • --format 옵션으로 필요한 정보만 추출 가능
  • • IP 주소, 볼륨, 환경 변수, 네트워크 설정 등 디버깅에 활용
답변에 넣으면 좋은 키워드
docker inspect JSON 메타데이터 Go 템플릿 디버깅 NetworkSettings
실무에서는

컨테이너 간 통신이 안 될 때 각 컨테이너의 네트워크 설정과 IP 주소를 inspect로 확인하여 문제를 진단합니다.

Follow-up 질문

docker inspect로 확인한 컨테이너의 환경 변수에 민감한 정보가 포함되어 있을 때, 보안상 어떤 문제가 있을 수 있나요?

댓글 0

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

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