qemu를 사용하지 않고 다중 아치 Docker 이미지 빌드
3351 단어 raspberrypibuildxdocker
솔직히 말해서 처음에는 여러 아키텍처에 대해 docker와 Qemu를 사용하여 빌드하려고 시도했지만 완료했습니다with some weird errors.
Docker의 이전 동료와 약간의 채팅을 한 후 크로스 컴파일을 시도하도록 권장되었습니다. 크로스 컴파일은 시스템에 대한 lib 종속성이 없을 때 정말 좋습니다. 하지만 Catapulte과 Jolimail은 actix 기반으로 하고 있는데, 이는 아키텍처용으로 컴파일 되어야 하는 OpenSSL에 의존한다. 간단히 말해서, Rust 코드를 크로스 컴파일하려면 먼저 OpenSSL을 크로스 컴파일해야 합니다. 다른 라이브러리가 있으면 크로스 컴파일하십시오.
그래서 Jolimail 에 대해 수행했지만 크로스 컴파일이지만 여러 가지 이유로 이 접근 방식이 마음에 들지 않습니다. 먼저 OpenSSL 빌드를 처리해야 합니다. 새 버전이 있으면 이미지를 다시 빌드할 뿐만 아니라 모든 것을 업데이트해야 합니다. 그런 다음 내 Dockerfile에 원치 않는 복잡성을 추가합니다. 그래서 나는 이것을 할 다른 방법을 찾기로 결정했습니다.
docker slack 커뮤니티(Billy)의 훌륭한 사용자로부터 약간의 파고와 좋은 힌트를 얻은 후 마침내
docker buildx create --append
를 처음으로 사용했습니다. docker buildx
및 다중 아치 이미지에 익숙하지 않은 경우 Docker에 있을 때 the article I wrote 을 살펴보는 것이 좋습니다.amd64 시스템에 있고 다중 아치 이미지를 만들려는 경우 초기
buildx
솔루션은 Qemu를 사용하여 대상 환경을 에뮬레이트하는 것입니다. 그러나 buildx
컨텍스트를 생성할 때 특정 플랫폼에 대한 컨텍스트 대상을 지정할 수도 있습니다.많은 동료들과 마찬가지로 라즈베리 파이의 모든 버전을 구입했으며 각 버전도 여러 개 가지고 있지만 제대로 사용할 시간이 없습니다. 그래서 나는 하나를 시작하고(3b+ 추측) 그것에 설치했습니다HypriotOS. 그런 다음 로컬 컴퓨터에서 라즈베리 파이를 빌드할 수 있도록 context을 만들었습니다.
docker context create rpi --docker "host=ssh://pirate@black-pearl"
이 작업이 완료되면
DOCKER_CONTEXT=rpi docker pull jdrouet/kaamelott-quote
를 수행하여 라즈베리 파이를 대상으로 지정할 수 있습니다.그런 다음 트릭은
buildx
에 대한 이미지를 빌드해야 할 때 컨텍스트arm32v7
를 사용해야 한다고 rpi
에 알리는 것입니다.먼저
docker buildx ls
를 사용하여 현재 빌더의 이름을 가져옵니다. 그런 다음 다음 명령을 사용하여 이 빌더에 컨텍스트를 추가합니다.docker buildx create --append --name you-builder-name --platform linux/arm/v7 rpi
그리고 그게 다야! 이제 멀티 아치 이미지를 만들 수 있습니다.
docker buildx build --tag jdrouet/catapulte:some-tag --platform linux/amd64,linux/i386,linux/arm/v7 .
Reference
이 문제에 관하여(qemu를 사용하지 않고 다중 아치 Docker 이미지 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jdrouet/building-multi-arch-docker-images-without-using-qemu-322c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)