설명
gem install로 Ruby 패키지를 설치하면서 버전을 지정하지 않으면, 저장소의 최신 상태에 따라 다른 버전이 설치될 수 있습니다. 이 경우 동일한 Dockerfile을 다시 빌드해도 결과가 달라질 수 있습니다.
특히 배포용 이미지에서 의존성 버전이 바뀌면 애플리케이션 동작이 달라지거나, 호환성 문제가 갑자기 발생할 수 있습니다. 따라서 gem도 다른 패키지 관리자와 마찬가지로 설치 버전을 명확히 고정하는 편이 안전합니다.
잠재적 영향
- gem 저장소 변경에 따라 이미지 내용이 달라질 수 있습니다.
- 예상하지 못한 버전 업그레이드로 런타임 오류가 생길 수 있습니다.
- 테스트 환경과 운영 환경의 패키지 구성이 달라질 수 있습니다.
해결 방법
gem install bundler:2.0.2처럼 설치할 gem 버전을 명시하세요.- 여러 gem을 함께 설치할 때도 각 gem의 버전을 분명하게 지정하세요.
- 버전 변경이 필요하면 테스트 후에 고정값을 갱신하세요.
예시
Ruby와 RubyGems가 준비된 이미지의 설치 명령 발췌입니다. 아래 버전은 과거의 문법 예시이며 운영 권장 버전이 아닙니다. 지원되는 버전을 검토해 선택하고 하위 의존성도 잠금 파일로 관리하세요.
변경 전
dockerfile
RUN gem install bundler
RUN ["gem", "install", "blunder"]
변경 후
dockerfile
RUN gem install bundler:2.0.2
ENV GRPC_VERSION 1.0.0
RUN gem install grpc:${GRPC_VERSION} grpc-tools:${GRPC_VERSION}
설명:
- 변경 전: gem 이름만 지정해 빌드할 때마다 다른 버전이 설치될 수 있습니다.
- 변경 후: 사용할 gem 버전을 명확히 지정해 의존성 변경을 통제합니다.