MacOS에 도커 (Docker) 제대로 설치하기

요약: 다음을 실행하시면:

brew install --cask docker

도커 데스크탑 (Docker Desktop)이 설치됩니다. 다른 방식은 추천하지 않습니다. 자세한 정보는 아래를 참고하세요.


일단 제일 처음으로 다음 명령을 시도했는데:

brew install docker docker-compose

설치가 잘 완료되어서 docker --versiondocker-compose --version을 돌려보니 둘 다 버전 정보를 정확하게 표시합니다.

그래서 docker-compose.yml 파일이 있는 폴더로 들어가서 서비스들을 docker-compose up -d로 실행하려고 했는데, 도커에서 데몬 (daemon)을 찾을 수 없다고 경고해버리네요. 그래서 홈브루 (Homebrew)에서 활성화시킬 수 있는 서비스가 있는지, 또는 다른 방법으로 도커 데몬을 시작시킬 수 있는지 찾느라 거의 20분 가까이 낭비했습니다.

알고 보니, brew install docker는 도커 클라이언트만 설치하고, 도커 엔진 (Docker Engine)과 다른 모든 부속품을 돌리기 위한 서버 서비스는 설치하지 않습니다. macOS에서는 이것이 아예 제공되지 않는데, 왜냐하면 macOS는 리눅스가 아니기 때문이죠! 리눅스가 가지고 있는 컨테이너 기술 (예를 들어, cgroup 등)을 가지고 있지 않기 때문입니다. 도커 팀에서 제공한 우회 방안은 VM에 조그만 리눅스 이미지를 돌려 도커 클라이언트가 VM과 통신하는 방법입니다.

그래서 다음 명령어들을 실행해야:

brew install docker-machine
brew install --cask virtualbox

도커 머신 스크립트와 버추얼박스 (Virtualbox)가 설치됩니다. (도커 머신 스크립트가 버추얼박스를 필요로 합니다.) 이때 시스템 재부팅이 필요한데, 버추얼박스가 아직도 커널 확장 프로그램 (kernel extensions)를 사용하기 때문입니다. 짜증나긴 하지만, 저장되지 않은 자료를 다 저장하고 한번 재부팅을 진행합니다.

이제 도커 데몬이 돌아갈 수 있는 머신 (machine)을 만들어줍니다:

docker-machine create --driver virtualbox default

하지만 명령이 몇 분 후 VBoxManage: error: Code E_ACCESSDENIED를 표시하고선 멈춰버렸습니다. 그래서 조사를 더 해보니, 도커 머신이 2019년 9월쯤 지원이 완전히 종료되었고, 더 이상 개발되지 않아 사용하면 안 된다고 합니다.

그럼 이제 어떻게 해야 할까요? 도커 데스크탑을 사용하면 되는데, 홈브루의 캐스크 (Homebrew Cask)를 통해 설치할 수 있고, 확실하진 않지만 새로운 애플 실리콘을 탑재한 맥도 지원한다고 합니다.

…지난 몇 시간 동안 저지른 쓸데없는 짓을 다 지워버리겠습니다:

docker-machine rm default   # `y`를 눌러 확인합니다
rm -rf .docker              # 삭제 전 .docker/ 안에 필요한 파일이 없는지 확인하세요!
brew uninstall docker-machine docker docker-compose virtualbox

그 다음 올바른 도커 데스크탑 캐스크를 설치합니다:

brew install --cask docker

도커 설치를 완료했지만, 사실 도커 데스크탑보다는 그냥 도커 엔진만 사용하고 싶었습니다. 왜나하면 도커 데스크탑은 독점 라이선스 아래 배포되고, 사용을 하려면 도커를 제작한 회사의 라이선스에 동의해야 됩니다. 도커 엔진만 무료로 사용할 수 있고 오픈 소스로 배포되지만, macOS에서는 사용할 수 없습니다.

결국에는 macOS 개발 머신상에서는 도커 데스크탑을 사용하거나, 도커 컨테이너를 돌릴 수 있는 리눅스 인스턴스를 따로 만들어 사용하셔야 합니다.


수정: 이 글을 작성한 이후로 콜리마 프로젝트을 찾게 되었는데, QEMU를 사용하여 macOS에서 컨테이너 런타임을 제공하는데 목적을 둔다고 합니다. 아직은 완벽하지 않고 개발이 진행중인 프로젝트로서 애플 실리콘 맥을 지원하지 않기에 이 글에서는 자세히 다루지 않겠습니다만, 염두해 두시는 것이 좋을 것 같습니다. 나중에 다듬어진 상태로 출시된다면 사용해 볼 생각입니다.

댓글