RUN에서 sudo 사용

RUN의 실행 사용자를 명확히 지정하고 불필요한 sudo를 제거하세요.

설명

Dockerfile의 RUN 명령은 기본적으로 현재 설정된 사용자 권한으로 실행됩니다. 이 상태에서 sudo를 추가로 사용하면 어떤 권한으로 명령이 실행되는지 이해하기 어려워지고, 환경에 따라 동작 차이도 생길 수 있습니다.

컨테이너 빌드는 권한 흐름이 단순해야 검토와 유지보수가 쉽습니다. 필요한 경우 USER 지시어로 실행 사용자를 명확히 바꾸고, RUN 안에서는 sudo를 피하는 편이 좋습니다.

잠재적 영향

  • 빌드 단계의 권한 흐름을 이해하고 검토하기 어려워집니다.
  • 환경에 따라 sudo 동작이 달라져 빌드 실패가 생길 수 있습니다.
  • 불필요한 권한 사용이 습관화될 수 있습니다.

해결 방법

  • RUN 안에서 sudo를 사용하지 말고 필요한 사용자로 직접 실행하세요.
  • 권한 변경이 필요하면 USER 지시어를 사용해 명확하게 선언하세요.
  • 이미지 빌드 단계에서 불필요한 관리자 권한 사용을 줄이세요.

예시

apk와 저장소가 구성된 Alpine 계열 이미지에서 root로 실행하는 빌드 단계의 발췌입니다. sudo를 제거해도 root 권한이 줄어드는 것은 아니며 애플리케이션 실행 사용자는 별도로 설정해야 합니다.

변경 전

dockerfile
RUN sudo apk add --no-cache curl

변경 후

dockerfile
RUN apk add --no-cache curl

설명:

  • 변경 전: RUN 안에서 sudo를 사용해 권한 흐름이 불필요하게 복잡해집니다.
  • 변경 후: 현재 사용자 권한으로 직접 실행해 빌드 동작을 더 예측 가능하게 유지합니다.

참조