Wolfi에서 마이그레이션하기
Wolfi에서 마이그레이션하기
Wolfi 기반 이미지에서 Docker Hardened Images(DHI)로 마이그레이션하는 방법을 알아봐요.
출처: 문서
본문
이 가이드는 Wolfi 기반 이미지에서 Docker Hardened Images(DHI)로 마이그레이션하도록 도와줘요. 일반적으로 Wolfi가 Alpine과 유사하고 DHI가 Alpine 기반 강화 이미지를 제공하므로, 마이그레이션 프로세스는 간단해요.
다른 강화 이미지와 마찬가지로 DHI는 SBOM과 provenance를 포함한 포괄적인 attestation을 제공하며, 이미지 서명을 검증하고 취약점을 스캔해 이미지의 보안과 무결성을 보장할 수 있어요.
마이그레이션 단계(Migration steps)
다음 예시는 Dockerfile을 Wolfi 기반 이미지에서 Alpine 기반 Docker Hardened Image로 마이그레이션하는 방법을 보여줘요.
1단계: Dockerfile의 베이스 이미지 업데이트
애플리케이션 Dockerfile의 베이스 이미지를 강화된 이미지로 업데이트해요. 패키지와 의존성을 설치하는 데 필요한 도구가 있으므로 보통 dev 또는 sdk 태그가 붙은 이미지가 될 거예요.
다음 Dockerfile의 diff 스니펫은 이전 베이스 이미지를 새 강화 이미지로 바꾼 예시예요.
[!NOTE]
Docker Hardened Images를 풀하기 전에
dhi.io에 인증해야 해요. Docker ID 자격 증명(Docker Hub에 사용하는 동일한 사용자 이름과 비밀번호)을 사용해요. Docker 계정이 없다면 무료로 계정을 만들어요.인증하려면
docker login dhi.io를 실행해요.
- ## Original base image
- FROM cgr.dev/chainguard/go:latest-dev
+ ## Updated to use hardened base image
+ FROM dhi.io/golang:1.25-alpine3.24-dev
DHI에는 이미지 버전 관리에 관한 모범 사례를 장려하기 위해 latest 태그가 없다는 점을 유의하세요. 이미지에 적절한 버전 태그를 지정해야 해요. 올바른 태그를 찾으려면 DHI Catalog에서 사용 가능한 태그를 살펴보세요.
2단계: Dockerfile의 런타임 이미지 업데이트
[!NOTE]
최종 이미지를 최소화하고 안전하게 유지하려면 멀티 스테이지 빌드를 권장해요. 싱글 스테이지 빌드도 지원되지만 전체
dev이미지를 포함하므로 더 큰 이미지와 더 넓은 공격 표면이 생겨요.
최종 이미지를 가능한 한 최소화하려면 멀티 스테이지 빌드를 사용해야 해요. Dockerfile의 모든 단계는 강화된 이미지를 사용해야 해요. 중간 단계는 보통 dev 또는 sdk 태그 이미지를 사용하지만, 최종 런타임 단계는 런타임 이미지를 사용해야 해요.
빌드 단계에서 애플리케이션을 컴파일하고 결과 아티팩트를 최종 런타임 단계로 복사해요. 이렇게 하면 최종 이미지가 최소화되고 안전해져요.
다음 예시는 빌드 단계와 런타임 단계가 있는 멀티 스테이지 Dockerfile을 보여줘요.
# Build stage
FROM dhi.io/golang:1.25-alpine3.24-dev AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# Runtime stage
FROM dhi.io/golang:1.25-alpine3.24
WORKDIR /app
COPY --from=builder /app/myapp .
ENTRYPOINT ["/app/myapp"]
Dockerfile을 업데이트한 후 애플리케이션을 빌드하고 테스트해요. 문제가 발생하면 Troubleshoot 가이드에서 일반적인 문제와 해결책을 참조해요.
언어별 예시(Language-specific examples)
언어별 마이그레이션 예시는 예시 섹션을 참조해요.