Giới thiệu
Tôi không thể tìm ra cách hay để thiết lập môi trường phát triển trên OS X bằng Docker và Boot2Docker. Vấn đề tôi đang gặp phải là làm thế nào để quản lý mã nguồn để:
- Tôi có thể sửa đổi mã trên OS X bằng các công cụ (trình soạn thảo văn bản, IDE, git, v.v.) mà tôi đã cài đặt.
- Những sửa đổi đó được phản ánh trong vùng chứa Docker, vì vậy nếu tôi chạy lại kiểm tra hoặc làm mới trang web, tôi có thể thấy các thay đổi của mình ngay lập tức.
Về lý thuyết, điều này sẽ dễ dàng thực hiện bằng cách gắn mã nguồn của tôi dưới dạng một tập:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Thật không may, điều này có hai vấn đề lớn khiến nó hoàn toàn không sử dụng được trên OS X:
Sự cố # 1: Ổ đĩa được gắn trên VirtualBox (sử dụng vboxsf) cực kỳ chậm
Ví dụ, đây là khoảng thời gian Jekyll biên dịch trang chủ của tôi nếu mã nguồn là một phần của hình ảnh Docker:
> 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
Đây là hình ảnh Docker giống hệt nhau, ngoại trừ lần này, tôi gắn mã nguồn từ OS X:
> 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
Sự cố # 2: Xem tệp bị hỏng
Các cơ chế đồng hồ mặc định trong SBT, Jekyll và grunt sử dụng các công nghệ như inotify, không hoạt động nếu chúng đang chạy trong vùng chứa Docker và các thay đổi được thực hiện trong OS X đối với một thư mục được gắn kết.
Các giải pháp thay thế tôi đã thử
Tôi đã tìm kiếm các giải pháp (bao gồm tất cả các giải pháp trên SO) và thử một vài giải pháp trong số đó, nhưng không tìm thấy giải pháp nào thành công:
- Tôi đã chuyển Boot2Docker sang sử dụng NFS , nhưng nó cũng chậm như vậy.
- Tôi đã thử Vagrant + NFS và nó cũng chậm như vậy.
- Tôi đã thử gắn kết Samba , nhưng thư mục luôn hiển thị trống trong vùng chứa Docker.
- Tôi đã cố gắng sử dụng hệ thống tệp Unison , hệ thống này hoạt động trong thời gian ngắn để đồng bộ hóa tệp, nhưng sau đó liên tục hiển thị lỗi kết nối .
- Tôi đã bật tính năng bỏ phiếu trong Jekyll , nhưng điều đó làm tăng đáng kể độ trễ cho đến khi các thay đổi của tôi được chọn.
- Tôi đã thử Dinghy , một Docker "nhanh hơn, thân thiện hơn trên OS X với Vagrant" và có một số cải tiến. Thay vì biên dịch Jekyll chậm hơn 10-15 lần, nó chậm hơn 2-3 lần. Điều đó tốt hơn, nhưng vẫn không thể sử dụng được.
Có ai đã tìm thấy giải pháp thực sự hoạt động và cho phép bạn phát triển mã hiệu quả với Docker và OS X không?
Cập nhật: một giải pháp cuối cùng!
Cuối cùng tôi đã tìm thấy một giải pháp có vẻ hiệu quả bằng cách sử dụng Boot2Docker + rsync. Tôi đã nắm bắt các chi tiết về cách thiết lập điều này trong câu trả lời của riêng tôi cũng như một dự án mã nguồn mở có tên là docker-osx-dev .