오픈소스

[Mac] M1 Docker Ubuntu에서 C -m32 실행안될 때

JMDev 2023. 11. 10. 22:40

 

Docker Ubuntu환경에서 C언어 환경을 구성한 상태에서 개발을 진행하고 있었다.

그러다 -m32  이라는 32bit 파일을 빌드해야하는 상황이 발생했었고, 빌드했을 때 정상적으로

빌드가 안되는 상황이 발생했었다.

그래서 32bit 도 호환될 수 있게 

apt-get install gcc-multilib

를 설치해주어야 하는데

 

위 명령어를 실행하게 되면 오류가 뜰텐데, 그 오류의 내용은 대략적으로 ARM64의 저장소에서는 없는 라이브러리라고 나온다.

즉, 애플 실리콘 CPU로는 설치가 되지 않는 상황이라고 판단된다

 

처음에는 저장소에 대한 이슈인줄 알고, 저장소 관련 URL를 수정하고, 그러다가 도커 허브에서 될 수 있을 법한 이미지를 여러개

서칭하다가 도저히 해결방안이 떠오르질 않았다.

 

그러다 발견한 것이 Docker buildx 라는 기능을 활용하는 것이였다.

이 기능을 활용하게 된다면, ARM이 아닌 다른 amd64 아키텍쳐를 통해 도커 컨테이너를 빌드할 수 있게 된다.

buildx는 다양한 아키텍처에서 동작하는 이미지를 생성할 수 있게 도와주는 기능이다.

 

이 과정을 위해서 buildx를 활용하여 플랫폼(amd64) 이미지를 빌드합니다

docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap

 

그 이후에 

docker buildx build --platform linux/amd64 -t myimage:latest . --load
  • -platform linux/amd64: 빌드할 플랫폼을  amd64로 지정
  • t myimage:latest: 빌드된 이미지에 myimage:latest라는 태그를 지정합니다.
  • .: Dockerfile이 위치한 디렉토리를 지정합니다. 현재 디렉토리를 가리킵니다.
  • -load: 빌드된 이미지를 로컬 Docker 환경으로 로드합니다.

로 buildx 를 빌드했고 해당 이미지를 통해 dockerfile 를 빌드합니다.

 

docker run -it myimage:latest /bin/bash