내 잡다한 노트

도커파일에서 UID를 작성하는 이유 본문

DevOps/docker

도커파일에서 UID를 작성하는 이유

peanutwalnut 2024. 11. 26. 10:28

Dockerfile에서 UID를 설정하거나 명시적으로 처리하는 이유는 컨테이너의 사용자 권한 관리  보안성을 강화하기 위해서입니다. 아래 주요 이유를 살펴보겠습니다.


1. 호스트와의 파일 권한 충돌 방지

컨테이너에서 생성된 파일은 기본적으로 컨테이너 내부의 사용자 ID(UID)와 호스트 시스템의 사용자 ID가 다를 수 있습니다. 이 경우, 컨테이너가 생성한 파일이 호스트에서 읽기/쓰기 불가능하거나, 접근 권한 문제를 일으킬 수 있습니다.

  • 예: 컨테이너에서 UID가 1001인 사용자가 생성한 파일은 호스트에서 다른 사용자처럼 보일 수 있습니다.
  • 해결: Dockerfile에서 컨테이너 내부의 사용자와 UID를 명시적으로 설정하면, 호스트 시스템과의 호환성을 높일 수 있습니다.

2. 보안 강화

컨테이너는 기본적으로 root 사용자로 실행되는데, 이는 보안적인 취약점을 유발할 수 있습니다.

  • 문제점: 컨테이너 내부에서 root 권한으로 실행되면, 악의적인 공격자가 이를 악용해 호스트 시스템에 영향을 미칠 가능성이 커집니다.
  • 해결: Dockerfile에서 UID를 설정해 root 대신 비특권 사용자(non-root user)로 애플리케이션을 실행하도록 구성하면 보안이 강화됩니다.

# Dockerfile 예시
# 애플리케이션 실행용 사용자 생성 및 UID 설정
RUN groupadd -g 1001 appgroup && \
    useradd -u 1001 -g appgroup -m appuser

# 이후 실행 사용자 변경
USER appuser

 

3. 컨테이너 간 일관성 유지

다중 컨테이너 환경(예: Kubernetes)에서는 파일 공유나 로그를 저장할 때 사용자/그룹 ID의 일관성이 중요합니다. 다른 UID를 가진 컨테이너가 동일한 파일을 공유하면 충돌이 발생할 수 있습니다.

  • Dockerfile에서 고정된 UID를 설정하여 컨테이너 간 일관성을 보장할 수 있습니다.

4. CI/CD 파이프라인 및 개발 환경 통합

개발 환경이나 CI/CD 시스템에서 컨테이너가 생성하는 파일이 호스트와 충돌하지 않도록 UID를 설정합니다. 이는 팀 작업에서 파일 권한 문제를 줄여줍니다.

 

 

 

 

 

 

 

 

 

 

'DevOps > docker' 카테고리의 다른 글

Dockerfile 멀티 스테이지 빌드  (1) 2024.11.30
Dockerfile 최적화 방안  (0) 2024.11.30
DooD ( Docker out of Docker )  (0) 2024.11.19
도커파일 지시어 정리  (0) 2024.10.18
도커 이미지의 보안을 지켜야하는 이유  (1) 2024.10.08