Docker 이미지 배포 방식
QEMU, Docker, GHCR, OCIR, Nexus3
Docker 이미지, 레지스트리
- Docker 이미지란, 애플리케이션을 실행하는 데 필요한 파일을 묶은 결과물
- 이 ‘이미지’로 실행한 프로세스가 ‘컨테이너’
- 이미지는 실행에 사용할 파일 묶음
- 컨테이너는 그것을 실제로 실행한 상태
- 빌드한 이미지를 실행할 서버로 전달하려면 저장할 장소 필요 — 컨테이너 레지스트리
QEMU
- 다른 CPU 아키텍처용 프로그램을 실행할 수 있도록 해주는 에뮬레이터 — 다른 하드웨어의 동작을 소프트웨어로 재현하는 도구
- 가령 GitHub Actions의 빌드 서버, 클라우드 인스턴스 서버의 CPU가 아래처럼 다를 수 있음
- 다만 실제 ARM64 CPU에서 실행하는 것보다 빌드가 느려질 수 있음
- 다른 CPU의 동작을 재현하는 작업이 추가되기 때문
- 사용 가능한 러너의 아키텍처와 빌드 타겟이 다르거나, 한 환경에서 여러 아키텍처의 이미지를 만들어야 할 때 유용
GHCR(GitHub Container Registry)
- GitHub에서 Docker 이미지를 저장할 수 있도록 제공하는 서비스
- GitHub Actions의 경우, 워크플로에서 사용하는
GITHUB_TOKEN이 있음- 필요한 권한을 설정하면 이 토큰으로 GHCR에 이미지 업로드 가능
- 별도 서버에서 비공개 이미지를 다운로드할 때는 인증 필요
- 패키지 접근 권한,
read:packages 권한을 지닌 PAT classic 토큰 등
- 현재는 컨테이너 이미지 저장 공간, 대역폭 무료
- 오래된 이미지 버전을 얼마나 보관할 지는 별도로 규정해야 함
OCIR(Oracle Cloud Infrastructure Registry)
- Oracle Cloud의 컨테이너 레지스트리
- Oracle Cloud 안에서 권한, 리전, 네트워크, 이미지 관리를 함께 운영하고 싶을 때 유용
- OCI의 IAM 정책 승계
- 이미지 관리 정책도 서비스에서 설정 가능
- OCI의 IAM 정책 승계
- 이미지 관리 정책도 서비스에서 설정 가능
- 레지스트리 서비스 자체에는 별도 요금 X
- 이미지 저장 공간 등 사용한 자원에 과금하는 방식
- 이미지는 기본적으로 모두 보관 — 일정 기간 사용하지 않은 이미지 등을 정리하는 정책 설정 가능
- 이미지 저장 공간 등 사용한 자원에 과금하는 방식
- 이미지는 기본적으로 모두 보관 — 일정 기간 사용하지 않은 이미지 등을 정리하는 정책 설정 가능
Nexus3(Sonatype Nexus Repository 3)
- Docker 이미지뿐 아니라 npm, Maven, PyPl 등 여러 형식의 패키지를 관리할 수 있는 저장소 관리자
- 외부 패키지 캐시도 가능 — Nexus가 패키지를 대신 받아 보관하고, 다음 요청에 재사용 → 여러 개발자나 빌드 서버가 같은 패키지를 반복해서 받을 때 유용