docker ppc/x86 multi manifest

작성자 박형춘 수정일 2023-07-21 04:54

들어가며

  • 도커이미지는 빌드된 플랫폼과 동일한 아키텍처의 플랫폼에서  실행이 가능합니다.

  • 컨테이너 생성시 지정된 이미지가 pull되는 과정을 확인할  수 있는데, 이때 레포지토리에서 자신의 아키텍처에 맞는 이미지를 가져오게됩니다.
ex) busybox:latest 이미지를 사용하는 컨테이너 생성시. 

docker hub에 등록된 busybox:latest 이미지중 사용 현재 아키텍처에 맞는 이미지를 pull.


  • 이미지 레포지토리를 넥서스로 사용하는 스파클링소다3.0 설치시 서로 다른 아키텍처의 서버가 k8s 클러스터링 되어있는 경우 다음과 같은 문제가 발생합니다.
Nexus 레포지토리 kube-proxy 이미지의 태그 상이.
  - 스파클링소다 3.0 설치시 넥서스에는 x86 이미지와 ppc 이미지의 경로가 다릅니다.


kube-proxy-daemonset.yaml 을 생성할 경우 해당 데몬셋에 지정한 이미지를 사용.
  image: repo.sparklingsoda.io:12000/k8s/kube-proxy:v1.16.14


따라서 위의 예시에 노드1에 스케줄된 kube-proxy 파드는 정상적으로 실행되지만 노드2에 스케줄된 kube-proxy 파드는 아키텍처에 맞지 않는 이미지를 받아왔기 때문에 실행되지 못합니다.


  • 서로 다른 아키텍처의 서버가 k8s 클러스터링 되어있는 경우 아키텍처별 이미지를 대표하는 이미지를 생성하여 이러한 문제를 해결할 수 있습니다. (multi manifest)



Multi Manifest 사용

docker manifest 기능은 실험적 기능이므로 도커 설정을 변경해주어야 사용가능한 옵션입니다.
/etc/docker/daemon.json 
  "experimental": "enabled"


  • 대표이미지를 등록하려면 아키텍처별 이미지를 nexus의 같은 depth에 위치시켜야합니다. (tag로 분기)


도커 공식 사이트에서는 아래와 같이 가이드하고 있지만 depth가 다를 경우 manifest create시 에러발생
 




  • 대표이미지를 생성합니다.
docker manifest create --insecure repo.sparklingsoda.io:12000/test/grafana:5.2.4 \
    repo.sparklingsoda.io:12000/test/grafana:5.2.4-x86 \
    repo.sparklingsoda.io:12000/test/grafana:5.2.4-ppc64le


  • 생성된 대표이미지에 대한 상세 정보를 확인합니다.
docker manifest inspect repo.sparklingsoda.io:12000/test/grafana:5.2.4
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2419,
         "digest": "sha256:ebe3543213712c9cfa679189bc20e33c66ecbd6934e13b6a05d6e6e86ea1e09b",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2416,
         "digest": "sha256:e25227828920f83ddf5ff2ef948c6cfa3cb1aa2e414509c2487226a17b65715a",
         "platform": {
            "architecture": "ppc64le",
            "os": "linux"
         }
      }
   ]
}


  • 대표이미지를 푸쉬합니다.
docker manifest push --insecure repo.sparklingsoda.io:12000/test/grafana:5.2.4



  • 파드 생성시 대표이미지의 태그를 사용하면 pull 받는 노드의 x86/ppc 아키텍처에 맞게 받을 수 있습니다.







마치며

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300