반응형

 

docker 명령어가 아닌 buildah를 이용하여 multiarch build 후 docker hub에 push하는 방법이다.

우선, 원활한 multiarch build를 위해 아래 글을 먼저 참고한다.

2024.04.28 - [Develop/기타 작업] - exec container process `/bin/sh`: Exec format error

 

1. manifest 생성

buildah manifest create multi-test

 

 

2. buildah 를 이용한 이미지 빌드

amd64 빌드

buildah build --arch=amd64 -f Dockerfile -t docker.io/name/multi-test:1.0 --manifest multi-test .

 

arm64 빌드

buildah build --arch=arm64 -f Dockerfile -t docker.io/name/multi-test:1.0 --manifest multi-test .

 

 

3. 잘 되었는지 manifest 조회

buildah manifest inspect multi-test
# result
{
    "schemaVersion": 2,
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "manifests": [
        {
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "size": 498,
            "digest": "sha256:ba89775d01a87554befd5cb4067cee02a81e28fbd575e458c7da8de269251475",
            "platform": {
                "architecture": "arm64",
                "os": "linux"
            }
        },
        {
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "size": 498,
            "digest": "sha256:1ac1ba96e89b9b2184e1b21a9bdbe22ba8c5d9e3433e692482ab53e9a816383b",
            "platform": {
                "architecture": "amd64",
                "os": "linux"
            }
        }
    ]
}

 

 

4. docker hub login

docker hub 의 ID와 PW를 이용하여 로그인

buildah login -u ID -p PW docker.io

 

 

5. docker hub 에서 생성한 repository에 push

buildah manifest push --all multi-test "docker://docker.io/name/multi-test:1.0"

 

 

6. docker hub에 접속하여 확인

반응형
반응형

 

buildah 를 이용하여 arm 아키텍처에서 amd 로 multi platform 빌드를 수행하는 도중 계속 아래와 같은 에러가 발생했다.

exec container process `/bin/sh`: Exec format error

 

docker 또는 buildah로 multi platform 빌드할 경우 아키텍처 옵션을 주면 해결된다고 하였으나, 되지않았고

qemu-user-static 을 설치해주니 잘동작하였다.

qemu-user-static 은 다양한 아키텍처를 실행해주는 소프트웨어이다.

apt-get update -y
apt-get install qemu-user-static

 

설치 후 다른 사용법은 없으며, 그냥 아키텍쳐 옵션을 주면 빌드가된다.

 buildah build --arch=amd64 -f Dockerfile -t wky.kr/test:latest .

 

또한, amd64로 이미지를 생성한 후 arm 아키텍처에서 해당 amd64 이미지 k8s에서 실행하여도

qemu-user-static 으로 인하여 실행이된다.

 

참고 : https://github.com/multiarch/qemu-user-static

https://github.com/containers/buildah/blob/main/docs/buildah-build.1.md

반응형

+ Recent posts