Container Registry Migration
Container Registry Migration
개요
- SCP(Samsung Cloud Platform) 의 Container Registry 에 위치한 Container Image를 SCP V2로 이전하기 위한 Skopeo 사용에 대한 절차와 작업을 안내합니다.
- Skopeo는 Container Registry 간에 Container Image를 다운로드하지 않고 직접 복사할 수 있는 CLI 도구입니다.
제약사항
- Skopeo는 Container Image 자체만 복사하며, 연관된 메타데이터나 빌드 기록은 포함되지 않습니다.
- 인증이 필요한 Container Registry의 경우 로그인 정보 또는 인증 토큰이 사전에 필요합니다.
- 복제 대상이 되는 레지스트리에 접근할 수 있도록 설정이 필요합니다.
- 이미지가 대량일 경우 복사 속도에 영향을 줄 수 있습니다.
사전작업
Skopeo 작업을 위한 Bastion Host(OS:Ubuntu 24.04 / vCPU:2Cores, Memory: 4GB 권고) 필요
Skopeo 설치
sudo apt-get install skopeo방화벽/Security Group
- Bastion Host에서 SCP/SCP v2의 Container Regstry에 접속할 수 있도록 접속/인증 경로 통신이 가능하게 합니다(443 Port).
소스/타켓 Registry 접근을 위한 인증키 발급
- SCP v2 환경
- SCP v2의 Object storage는 접근 권한이 있는 사용자의 access key를 발급하여 사용할 수 있습니다.
- All Services > Management > IAM 메뉴를 클릭합니다.
- My Info. 메뉴를 클릭하고 Authentication Key Management 탭을 클릭합니다.
- 인증키를 사용하기 위해 Security settings를 수정합니다.
- Security settings의 Update 버튼을 클릭합니다.
- Edit security settings 화면에서 Authentication method 항목을 Auth key로 선택합니다.
- OK 버튼을 클릭하여 저장합니다.
- IP access control을 사용하면 인증키를 사용할 수 있는 IP를 제한할 수 있습니다.
- Enable로 설정할 경우 V1 SKE의 worker nodes, V2 SKE의 worker nodes의 IP 주소를 반드시 포함하여야 합니다.
- Authentication key management 탭 화면에서 Create auth key 버튼을 클릭합니다.
- Expiration period에는 Permanent로 체크하고, Purpose에는 적당한 문구를 입력합니다.
- OK 버튼을 클릭하여 생성합니다.
- access key와 secret key를 확인하기 위해 생성한 인증 키를 클릭하여 확인합니다.
- Auth key의 View 버튼을 클릭합니다.
- 콘솔 계정의 비밀번호를 입력한 다음 OK 버튼을 클릭합니다.
- Access key와 Secret key를 복사한 다음 메모장 등에 기록합니다.
- SCP v2의 Object storage는 접근 권한이 있는 사용자의 access key를 발급하여 사용할 수 있습니다.
- SCP 환경
- SCP 환경에서는 사용자 정보 설정에서 비슷한 방식으로 accesskey와 secretkey를 확인할 수 있습니다.
- SCP v2 환경
접근제어 등록
- SCP와 SCP v2환경의 Registry에 접속하기 위해서는 Registry 상세 정보에 있는 접근제어에 Bastion Host를 등록해줘야 합니다.
- v1→ v2 또는 v1 ← v2 Registry를 VPC Endpoint를 활용하여 접속할 경우, 프라이빗 접근 허용 리소스 추가 > VPC Endpoint에서 해당 VPC Endpoint를 추가해주어야합니다.
Container Registry 마이그레이션 절차
1. 인증을 위한 파일 생성: Registry 접속용
- SCP SCR과 SCP v2 SCR에 접근하기 위해 auth.json 파일을 구성합니다.
v1_registry='<v1 registry URL>'
v1_accesskey='<v1 accesskey>'
v1_secretkey='<v1 secretkey>'
v1_auth_b64=$(printf '%s:%s' "$v1_accesskey" "$v1_secretkey" | base64 -w 0)
v2_registry='<v2 registry URL>'
v2_accesskey='<v2 accesskey>'
v2_secretkey='<v2 secretkey>'
v2_auth_b64=$(printf '%s:%s' "$v2_accesskey" "$v2_secretkey" | base64 -w 0)
cat <<EOF > auth.json
{
"auths": {
"$v1_registry": {
"auth": "$v1_auth_b64"
},
"$v2_registry": {
"auth": "$v2_auth_b64"
}
}
}
EOF
* Registry URL, accesskey와 secretkey를 실제 값으로 변경 후 사용
2. 로그인 확인
skopeo login <v1 registry URL> --authfile auth.json
skopeo login <v2 registry URL> --authfile auth.json
3. 이미지 정보 조회
skopeo inspect docker://<Source Registry 주소>/<Source Image 명> --authfile auth.json
* SCP v2환경에서는 <Registry 주소>/<Repository 명>/<Image 명>을 사용함
4. 이미지 복사 명령 실행
skopeo copy docker://<Source Registry 주소>/<Source Image 명>:<Source Tag 명> docker://<Target Registry 주소>/<Target Image 명>:<Target Tag 명> --authfile auth.json
Note
| 포맷 종류 | 설명 |
|---|---|
| container-storage: | podman, cri-o, buildah 등에서 사용하는 로컬 컨테이너 이미지 저장소 |
| docker:// | 도커 레지스트리 |
| dir: | 로컬 디렉토리 |
| docker-archive: | docker save 등으로 만들어진 이미지 파일 |
| docker-daemon: | docker daemon 내부에 저장된 이미지 |
| oci: | OCI |
| oci-archive: | OCI 파일 |
5. 이미지 확인
skopeo inspect docker://<Target Registry 주소>/<Target Image 명>:<Target Tag 명> --authfile auth.json