제품 릴리스의 컨테이너 이미지
제품 릴리스(Product Release)가 사용하는 모든 컨테이너 이미지는 매니페스트의 extensions.artifacts에 선언해야 합니다. 이 확장은 모든 제품 명세 유형에서 사용할 수 있습니다. 차트 위치만 등록하고 차트가 실행하는 이미지를 빠뜨리지 않습니다.
이미지 위치와 버전
이미지는 OCI 이미지 이름 규칙에 맞는 위치에 게시합니다. Apollo에 전달할 위치는 레지스트리와 버전 태그를 명시하는 형태를 사용합니다.
{registry}/{repository}/{imageName}:{version}
| 부분 | 의미 |
|---|---|
registry | 아티팩트가 있는 레지스트리의 전체 호스트 주소입니다. |
repository | 레지스트리 안의 저장소 경로이며 선택적인 부분입니다. |
imageName | 이미지 이름입니다. |
version | 가져올 이미지 버전을 식별하는 태그입니다. 태그 뒤에 다이제스트를 함께 명시하는 참조도 있습니다. |
형태의 예시는 docker.io/bitnami/wordpress:5.9.2-debian-10-r9, docker.io/library/nginx:stable-perl입니다. bitnami/wordpress:5.9.2-debian-10-r9 같은 축약 이름을 해석하는 도구도 있지만, Apollo 취약점 검사에는 전체 레지스트리 주소와 버전 태그가 필요하므로 정규화한 전체 이름을 사용합니다.
bitnami/wordpress처럼 버전이 없는 이름을 릴리스 아티팩트로 사용하지 않습니다. 다이제스트만 붙인 축약 참조도 태그와 전체 레지스트리를 요구하는 이 게시 흐름의 대체 형식으로 사용하지 않습니다. 다이제스트를 명시할 때는 실제 이미지의 완전한 값을 사용하며 축약된 예시 해시를 실행 입력으로 사용하지 않습니다.
artifacts 확장
다음은 가상의 제품이 이미지 하나를 사용하는 예시입니다.
extensions:
artifacts:
- type: oci
uri: registry.example.com/apps/order-service:1.4.2
각 항목에는 type과 uri가 필요합니다. 현재 type의 지원 값은 OCI 규격 아티팩트를 뜻하는 oci입니다. uri는 아티팩트의 전체 위치입니다. 다른 이미지도 사용하면 목록에 각각 추가합니다.
이 선언은 Apollo가 릴리스에 속한 이미지를 식별하도록 합니다. 이미지를 저장소에 게시하거나 스포크에 저장소 접근 권한을 주는 작업은 별도이며, 아티팩트 레지스트리 관리로 준비합니다.
기본 이미지와 계층 재사용
기본 이미지를 재사용하고 불필요한 패키지와 계층을 줄이면 저장공간과 실행 부담을 줄일 수 있습니다. Alpine 같은 작은 기본 이미지를 사용할 수 있지만 제품의 런타임 요구를 충족해야 합니다. 취약점 노출을 줄이는 구체적인 의존성 관리 방법은 취약점 수정에 설명되어 있습니다.