애플실리콘에서 amd64도커 컨테이너 실행

Ssol·2024년 1월 16일
0

MySQL HA와 MaxScale을 공부하던 중 어이없는 실수를 해서 그것을 반성하기 위해 기록을 남긴다.


SRE 공부 재밌숴요...


요즘은 애플실리콘이 공개된지도 꽤 되었고 개발자들 사이에선 많이 대중화가 되었기 때문에 arm64 아키텍처 이미지가 많이 나오고 있다. 최근 도커 이미지들을 보면 인텔 사용자와 애플실리콘 사용자를 위해 arm64와 amd64 둘 다 이미지가 나오고 있고 이미지 pull 시에는 해당 운영체제 아키텍처에 맞는 이미지로 알아서 받아지게 된다.

하지만 내가 테스트하는데 사용한 MySQL 5.7은 현재 MySQL이 8버전 까지 나온 것을 생각하면 꽤 오래된 버전이다. 그렇기 때문에 도커 허브에서 5.7 관련 오피셜 이미지를 뒤져보면 죄다 amd64 아키텍처 밖에 없다.

나는 이것을 망각하고 당연히 되겠거니 하면서 애플실리콘에다 이걸 그대로 받아서 그냥 실행해버린 것이지...

뭐 결과는 당연히 불안전 실행으로 제대로 된 MySQL HA 환경을 구성할 수 없었다.
컨테이너는 실행이 되지만 접속하려하면 플랫폼 어쩌구 메시지가 나오면서 안되는 걸 보니 그때 딱 떠오르더라. '이거 운영체제 아키텍처 문제인가??' 그래서 도커 허브에서 내가 받은 이미지를 체크해보니 amd64 였고 이것을 로제타2로 실행해 테스트를 마무리 할 수 있었다.

그래서 이번 포스트에선 애플실리콘에서 amd64 이미지를 로제타로 실행하는 방법을 다시 남기려한다.

# Create containers
docker run --platform=linux/x86_64 -d --rm --name=master --net=replicanet --hostname=master \
   -e MYSQL_ROOT_PASSWORD=mypass \
  mysql:5.7 \
  --server-id=1 \
  --log-bin='mysql-bin-1.log'

docker run --platform=linux/x86_64 -d --rm --name=slave --net=replicanet --hostname=slave \
   -e MYSQL_ROOT_PASSWORD=mypass \
  mysql:5.7 \
  --server-id=2

# Configure Master
docker exec -it master mysql -uroot -pmypass \
  -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';" \
  -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';" \
  -e "SHOW MASTER STATUS;"

# Configure Slave
docker exec -it slave mysql -uroot -pmypass \
  -e "CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='repl', \
    MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin-1.000003';"

내가 도커로 MaxScale을 연습할 때 사용한 명령어 중 일부이다.
여기서 amd64를 로제타2로 변환실행하기 위해서는 run 옵션 앞에 --platform=linux/x86_64를 붙여주면 된다. 간단하지? 하지만 이것도 만능은 아니기에 성능저하나 호환성 이슈가 발생할 수 있으므로 가급적이만 운영체제에 맞는 아키텍처 이미지를 사용하는게 좋다.

어이없는 실수 반성 끝

profile
Junior Back-end Developer 🫠

0개의 댓글