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