RUN의 진단 명령 사용 점검

빌드에 필요한 명령만 실행하고 대화형 진단은 별도로 수행하세요.

설명

RUN은 이미지를 빌드할 때 실행됩니다. top처럼 대화형 동작을 기대하는 명령은 빌드를 멈추거나 실패하게 할 수 있고, ps의 출력은 빌드 시점의 상태이지 실행 중인 서비스의 상태가 아닙니다.

진단 도구 자체가 금지되는 것은 아닙니다. 빌드에 필요한 비대화형 진단은 사용할 수 있으며, 명령을 실행하는 것과 도구를 설치하는 것은 별개입니다.

잠재적 영향

  • 불필요한 진단 명령이 빌드 시간을 늘리거나 자동 빌드를 중단시킬 수 있습니다.
  • 빌드 중 출력한 프로세스 정보를 실제 서비스의 상태로 오해할 수 있습니다.

해결 방법

  • 빌드 결과에 필요하지 않은 진단 명령을 제거하고 필요한 진단은 비대화형으로 끝나도록 구성하세요.
  • 실행 중인 서비스의 상태는 런타임에서 확인하세요. RUN을 제거해도 베이스 이미지에 설치된 도구까지 삭제되지는 않습니다.

예시

기존 Go 1.22 예제는 빌드 명령을 비교합니다. 실제 빌드에는 지원 중인 호환 이미지와 필요한 소스·모듈 파일을 준비하세요.

변경 전

dockerfile
FROM golang:1.22

WORKDIR /app
COPY . .
RUN top
RUN ps -ef
CMD ["go", "run", "main.go"]

변경 후

dockerfile
FROM golang:1.22

WORKDIR /app
COPY . .
RUN go build -o app .
CMD ["./app"]

설명:

  • 변경 전: top과 ps를 빌드 중 실행합니다. top은 비대화형 빌드에 적합하지 않을 수 있습니다.
  • 변경 후: 애플리케이션을 빌드한 뒤 생성한 실행 파일을 시작합니다. 이 변경만으로 이미지에서 Go 도구가 제거되지는 않습니다.

참조