6.3. RHEL 컨테이너 도구의 재현성을 달성
RHEL 컨테이너 도구는 Buildah, Podman 및 Skopeo와 같은 도구를 사용하여 표준화된, 데몬리스 및 스크립트 가능한 워크플로우를 제공하여 재현성을 달성합니다. 이 접근 방식은 한 번에 구축된 컨테이너가 어디서나 일관되게 실행되며, 의존성, 환경 및 버전 설정과 관련된 잠재적인 문제를 해결할 수 있도록 합니다.
Buildah:
RHEL Buildah는 구축 프로세스에 대한 정밀한 제어를 제공함으로써 재현 가능한 컨테이너 구축을 달성합니다. 불안정한 태그, 파일 시스템 메타데이터 및 호스트에 의존하는 데이터와 같은 비 결정주의의 원천을 완화하는 특정 옵션을 제공합니다. 재생 가능한 빌드에 대한 Buildah 기능은 다음과 같습니다.
고정된 타임스탬프: 타임스탬프는 주요 불복제성을 일으킵니다. 기본적으로 파일 생성 및 수정 시간은 누군가가 파일을 컨테이너 레이어에 추가할 때 반영됩니다. 컨테이너 레이어는 결코 두 번 동일하지 않습니다. Buildah를 사용하면 이러한 타임스탬프를 제로 또는 특정 고정 값으로 설정할 수 있습니다.
-
–rewrite-timestamp: 이 옵션은 레이어의 내용을--source-date-epoch이하로 타임스탬프합니다. 또한 이미지의 생성 된 타임스탬프와 레이어 내의 파일의 타임스탬프를 제어, 주로 결정적인 빌딩을 달성합니다. -
--source-date-epoch: 이 옵션은 이전--타임스탬프옵션보다 더 유연한 옵션으로 이미지 레이어의 모든 파일에 대해 특정하고 재생 가능한 타임스탬프를 정의할 수 있습니다. 이미지 메타데이터의 생성 및 역사 날짜에 영향을 미칩니다. CLI 플래그, 환경 변수 또는 build-arg로 설정할 수 있습니다. 플래그가 설정되면 선언된 ARG가RUN명령을 위해 환경에 표시되고 정적 hostname를 얻습니다. 또한, 컨테이너 ID 필드는 약속된 이미지를 삭제합니다.
-
Podman:
podman build 명령은 사용자 중심 인터페이스로서 실제 이미지 생성을 Buildah 라이브러리에 위임합니다. 이것은 Podman이 Buildah와 동일한 핵심 기능을 활용하여 재현 가능한 컨테이너 빌딩을 달성하는 것을 의미하며, 빌딩 과정에서 비 결정주의의 원천을 제어하는 데 중점을 둡니다.
Podman 명령은 또한 –rewrite-timestamp 및 --source-date-epoch 옵션을 수용합니다. 또한, --no-cache 옵션은 Podman이 로컬 캐시를 무시하고 새 빌딩을 수행하도록 지시합니다. 이 옵션을 사용하면 컨테이너 이미지가 처음부터 신뢰할 수 있음을 확인할 수 있습니다.
스코페오:
Skopeo는 변경 가능한 태그 대신 변경되지 않는 이미지를 참조하여 재현 가능한 컨테이너 구성을 달성합니다. Skopeo는 기본적으로 이미지를 전송하고 관리하는 반면 Buildah와 같은 다른 도구는 실제 재생 가능한 이미지를 처리합니다.
--source-date-epoch 및 --rewrite-timestamp 옵션을 사용하면 빌드 재현성을 향상시킬 수 있습니다. 그러나 완전한 재현성은 보장되지 않습니다. COPY 명령의 --from 옵션으로 다른 이미지를 추가하거나, RUN 명령의 --mount=from= 옵션을 통해 액세스하거나, ADD 명령을 사용하여 다운로드한 콘텐츠는 나중에 이동하는 이미지 태그를 참조하거나 지정된 URL의 콘텐츠가 변경되면 변경될 수 있습니다.