[ Docker ] 배포된 image, rebuild 하기
현재 회사에서 사용하는 mac os는 M1 처리기를 사용하고 있습니다.
이전에는 intel 처리기를 사용했기 때문에, 최신 관리 되지 않는 3rd pary 모듈들은 M1을 지원하지 않는 경우가 많은데요.
mac os 환경에서 디렉토리 내 이벤트를 감지하기 위해 "inotify"라는 모듈을 사용하고자 하였는데,
git 에 보면 리눅스 os를 주로 지원하더라구요.
mac 에서 해당 모듈을 사용하기 위해서는 프로그램 파일을 os 환경에 맞게 기계어로 컴파일 한 후 쫙 읽어서 실행해야 합니다.
이 경우, 컴파일 과정에서 프로그램에 필요한 환경 변수를 설정할 수 있는데요. 구동 이후에 변경할 수가 없습니다.
그래서 docker를 이용해서 이미 inotify가 설치되어 있는 이미지를 사용해 테스트를 해보려고 했어요.
근데 관련 이미지들이 전부 5년 6년전에 빌드된 것들이 가장 최신이라 M1 cpu 기반에서 처리될 수 없는 코드들이더라구요.
사용하는 cpu에 따라서 c코드의 처리가 다르다고 합니다.
고민을 하던 중에, 이미 존재하는 이미지를 사용해 플랫폼만 바꿔서 다시 재빌드 하는 것은 어떨까 싶었어요.
도커는 이미지 생성시 Dockerfile의 FROM 절의 이미지를 layer로 해서 새로운 이미지를 생성합니다.
해당 아이디어를 차용했어요!
그냥 이렇게 해주시면 댑니다..^-6...
그리고 빌드 명령어에 사용하는 cpu 스펙을 설정해주시면 돼요.
제 컴퓨터는 현재 linux/arm64/v8이고 제가 받은 이미지는 linux/arm64를 지원하기 때문에 --platform 속성을 사용해 변경해주었습니다.
새로 생성된 이미지를 실행할 때는,
docker run -it rebuildtest/1.1
이렇게 실행해 주시면 bash로 접속이 가능합니다.
-it 속성을 지정하지 않으시면, 컨테이너가 실행하고 그냥 바로 꺼지기 때문에 아무 작업이 일어나지 않은 줄 알고 당황할 수 있어요,
실제로 제가 사용한 이미지는 서버 기동 시 아무런 로그도 출력하고 있지 않았습니다.
그리고 들어가서 inotify 모듈을 찾기 시작했는데요.
/bin에 존재하지 않고 /sbin에 inotifyd 모듈이 존재하였습니다.