Docker for Mac Edge 채널에 Mutagen 기반 캐싱 기능 추가
호스트, 컨테이너 간의 파일 공유시 퍼포먼스 향상
들어가며
도커 데스크탑 포 맥Docker for Desktoup Mac의 엣지 채널 2.3.1.0에 뮤타젠Mutagen 기반의 캐싱 기능이 추가되었습니다. 도커 데스크탑 포 맥은 안정 버전이 릴리스되는 스테이블 채널과 실험적 기능이 포함된 엣지 채널로 나뉘어져있습니다. 이번에 뮤타젠 기반의 캐시는 실험적 기능으로 엣지 채널에 포함되었습니다.
도커 데스크탑 포 맥의 퍼포먼스 문제는 이전부터 계속 논의되어 오고 있습니다. CPU를 과도하게 사용하는 문제를 다룬 이슈 docker/for-mac#3499를 비롯해 파일 시스템 관련된 파일 시스템 퍼포먼스 관련된 이슈들도 마땅히 해결책이 없는 상태였습니다. 특히 개발 환경의 소스 코드를 호스트와 컨테이너 사이에서 공유하는 경우 퍼포먼스가 현격히 떨어집니다. 파일 시스템 퍼포먼스에 대한 대안 중 하나로 베이그런트Vagrant + 버추얼박스VirtualBox + 뮤타젠Mutagen을 사용해보려는 시도가 있었습니다만, 이번 엣지 릴리스로 뮤타젠 기반의 파일 캐싱을 도커 포 맥에도 포함되었습니다.
결론부터 이야기해보면 소스 코드를 호스트와 컨테이너 사이에 소스코드를 공유해서 개발을 하는 경우 아주 큰 성능 향상을 얻을 수 있습니다. 44BITS의 메인 프로젝트인 Pages의 경우 루비 온 레일스Ruby on Rails 기반으로 도커를 기반으로 개발환경이 구축되어있습니다. 개발 서버에 exec
로 rails c
(레일스 콘솔)을 실행하는 경우 기존에는 30초 이상의 시간이 걸렸는데 😱, 뮤타젠 활성화 이후에는 5초 정도가 걸립니다. 원래 레일스 콘솔 실행은 이 정도 걸립니다 😅. 정확한 비교는 해보지 않았지만 초기 서버 실행도 압도적으로 빠릅니다. 버추얼 박스 기반에 뮤타젠을 도입한 글(일본어)을 봐도 5-10배 정도 성능 향상이 된다고 합니다.
도커 데스크탑(Docker Desktop) 엣지 채널 설치
뮤타젠 기반의 캐싱을 활성화하려면 엣지 채널을 설치해야합니다. 뮤타젠 캐싱은 2.3.1.0 버전에 포함되었으며, 이 버전이나 이후 버전을 다운로드 해서 설치합니다. 릴리스 페이지에 다운로드 링크가 있습니다. *
* 도커 엔진Docker Engine 버전과 도커 데스크탑Docker Desktop의 버전이 혼란스러울 수 있습니다. 2020년 6월 현재 2.x 대는 도커 데스크탑의 버전이며, 19.x 버전은 도커 엔진의 최신 버전입니다. 도커 데스크탑은 최신 버전의 도커 엔진을 포함하고 있습니다.
엣지 채널은 스테이블 채널과 동시에 사용할 수 없는 것으로 보입니다. 데이터도 유실 될 수 있으니 중요한 내용이 있다면 미리 백업해두시고 진행하는 것을 추천합니다. 또한 뮤타젠 기반의 캐싱 기능 역시 안정화되어있지 않은 상태입니다. 더 자세한 내용은 docker/for-mac의 이슈들을 참고해주세요.
엣지 채널을 설치하면 도커 데스크탑에 대하여About Docker Desktop 메뉴에서 엣지 채널임을 확인할 수 있습니다.

뮤타젠(Mutagen) 기반 캐싱 활성화
Preferences -> Resources -> FILE SHAREING 메뉴로 이동합니다. 맨 아래에 적용하고자 하는 프로젝트의 전체 경로를 입력하고 + 아이콘을 클릭합니다. 그 다음 새로 추가된 경로 중간의 토글 스위치를 클릭해서 온으로 바꿉니다. 토글 값이 Not cached에서 Ready로 변경됩니다. Apply & Restart 버튼이 활성화 되면 클릭해서 도커 엔진을 재실행합니다.*
* 현재 최신 버전의 스테이블 채널 2.3.0.3에는 이 토글 버튼이 없습니다.

이제 해당 디렉터리를 docker run
할 때 -v
로 연결해주기만 하면 됩니다. 공식 예제를 봐서는 이외의 추가적인 설정은 필요하지 않은 것으로 보입니다.
파일 퍼미션 문제
현재 캐싱 적용시 파일 퍼미션이 변경되는 이슈가 있습니다.