소개
Docker와 Boot2Docker를 사용하여 OS X에서 개발 환경을 설정하는 좋은 방법을 찾을 수 없습니다. 내가 치는 문제는 다음과 같이 소스 코드를 관리하는 방법입니다.
- 이미 설치 한 도구 (텍스트 편집기, IDE, git 등)를 사용하여 OS X에서 코드를 수정할 수 있습니다.
- 이러한 수정 사항은 Docker 컨테이너에 반영되므로 테스트를 다시 실행하거나 웹 페이지를 새로 고치면 변경 사항을 즉시 볼 수 있습니다.
이론적으로는 소스 코드를 볼륨으로 마운트하면 쉽게 할 수 있습니다.
docker run -it -v /path/to/my/source/code:/src some-docker-image
불행히도 이것은 OS X에서 완전히 사용할 수 없게 만드는 두 가지 주요 문제가 있습니다.
문제 # 1 : VirtualBox (vboxsf 사용)에 마운트 된 볼륨이 매우 느립니다.
예를 들어 소스 코드가 Docker 이미지의 일부인 경우 Jekyll이 내 홈페이지 를 컴파일하는 데 걸리는 시간 은 다음과 같습니다.
> docker run -it brikis98/yevgeniy-brikman-homepage:v1 bash
root@7aaea30d98a1:/src# time bundle exec jekyll build
[...]
real 0m7.879s
user 0m7.360s
sys 0m0.600s
이번에는 OS X에서 소스 코드를 마운트한다는 점을 제외하면 정확히 동일한 Docker 이미지가 있습니다.
> docker run -it -v $(pwd):/src brikis98/yevgeniy-brikman-homepage:v1 bash
root@1521b0b4ce6a:/src# time bundle exec jekyll build
[...]
real 1m14.701s
user 0m9.450s
sys 0m3.410s
문제 # 2 : 파일 감시가 손상됨
SBT, Jekyll 및 grunt의 기본 감시 메커니즘은 Docker 컨테이너에서 실행 중이고 OS X에서 마운트 된 폴더로 변경된 경우 작동하지 않는 inotify와 같은 기술을 사용합니다.
내가 시도한 해결 방법
솔루션 (SO의 모든 솔루션 포함)을 검색하고 몇 가지를 시도했지만 성공적인 솔루션을 찾지 못했습니다.
- 나는 NFS를 사용하는 Boot2Docker 전환 하지만, 그것은 단지 느린로했다.
- 나는 Vagrant + NFS를 시도했고 그것도 마찬가지로 느 렸습니다.
- Samba 마운트를 시도했지만 Docker 컨테이너에서 폴더가 항상 비어있는 것으로 나타났습니다.
- 잠시 파일을 동기화하는 Unison 파일 시스템 을 사용하려고했지만 연결 오류가 계속 표시되었습니다 .
- Jekyll 에서 폴링을 활성화 했지만 변경 사항이 적용될 때까지 지연이 크게 늘어났습니다.
- "Vagrant를 사용하는 OS X에서 더 빠르고 친숙한 Docker"인 Dinghy를 사용해 보았고 약간의 개선이있었습니다. Jekyll 컴파일이 10-15 배 느린 대신 2-3 배 느 렸습니다. 더 좋지만 여전히 유용하지는 않습니다.
실제로 작동하고 Docker 및 OS X로 코드를 생산적으로 개발할 수있는 솔루션을 찾은 사람이 있습니까?
업데이트 : 마침내 해결책!
마침내 Boot2Docker + rsync를 사용하여 생산적으로 보이는 솔루션을 찾았습니다. 나는 이것을 설정하는 방법에 대한 세부 사항을 내 대답 과 docker-osx-dev 라는 오픈 소스 프로젝트 에서 캡처했습니다 .