Intro
ฉันคิดวิธีที่ดีในการตั้งค่าสภาพแวดล้อมการพัฒนาบน OS X โดยใช้ Docker และ Boot2Docker ไม่ได้ ปัญหาที่ฉันประสบคือวิธีจัดการซอร์สโค้ดเพื่อให้:
- ฉันสามารถแก้ไขโค้ดบน OS X โดยใช้เครื่องมือ (ตัวแก้ไขข้อความ, IDE, คอมไพล์ ฯลฯ ) ที่ฉันติดตั้งไว้แล้ว
- การปรับเปลี่ยนเหล่านั้นจะแสดงในคอนเทนเนอร์ Docker ดังนั้นหากฉันเรียกใช้การทดสอบซ้ำหรือรีเฟรชหน้าเว็บฉันจะเห็นการเปลี่ยนแปลงของฉันทันที
ตามทฤษฎีแล้วสิ่งนี้ควรทำได้ง่ายโดยการติดตั้งซอร์สโค้ดของฉันเป็นโวลุ่ม:
docker run -it -v /path/to/my/source/code:/src some-docker-image
น่าเสียดายที่ปัญหานี้มีสองประเด็นหลักที่ทำให้ใช้งานไม่ได้อย่างสมบูรณ์บน OS X:
ปัญหา # 1: ไดรฟ์ข้อมูลที่ติดตั้งบน VirtualBox (ซึ่งใช้ vboxsf) ช้ามาก
ตัวอย่างเช่นนี่คือระยะเวลาที่ Jekyll จะรวบรวมโฮมเพจของฉันหากซอร์สโค้ดเป็นส่วนหนึ่งของอิมเมจ 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
นี่คืออิมเมจ Docker ที่เหมือนกันทุกประการยกเว้นครั้งนี้ฉันเมานต์ซอร์สโค้ดจาก 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
ปัญหา # 2: การดูไฟล์เสีย
กลไกการดูเริ่มต้นใน SBT, Jekyll และความฮึกเหิมใช้เทคโนโลยีเช่น inotify ซึ่งจะไม่ทำงานหากทำงานในคอนเทนเนอร์ Docker และทำการเปลี่ยนแปลงใน OS X ไปยังโฟลเดอร์ที่ต่อเชื่อม
วิธีแก้ปัญหาที่ฉันพยายาม
ฉันค้นหาวิธีแก้ปัญหา (รวมถึงวิธีแก้ปัญหาทั้งหมดใน SO) และลองใช้สองสามข้อ แต่ไม่พบวิธีที่ประสบความสำเร็จ:
- ฉันเปลี่ยน Boot2Docker เพื่อใช้ NFSแต่มันก็ช้าพอ ๆ
- ฉันลองVagrant + NFSและนั่นก็ช้าเช่นกัน
- ฉันลองเมาท์ Sambaแต่โฟลเดอร์มักจะว่างเปล่าในคอนเทนเนอร์ Docker
- ผมพยายามที่จะใช้ระบบไฟล์พร้อมเพรียงกันซึ่งทำงานช่วงสั้น ๆ ในการซิงค์ไฟล์ แต่แล้วเก็บไว้แสดงข้อผิดพลาดการเชื่อมต่อ
- ฉันเปิดใช้งานการสำรวจความคิดเห็นใน Jekyllแต่นั่นเพิ่มความล่าช้าอย่างมากจนกระทั่งการเปลี่ยนแปลงของฉันถูกหยิบขึ้นมา
- ฉันพยายามDinghyเป็น "เร็วขึ้นเป็นมิตรเทียบท่าบน OS X กับคนจรจัด" และมีบางส่วนปรับปรุง แทนที่จะคอมไพล์ Jekyll ช้าลง 10-15 เท่ากลับช้าลง 2-3 เท่า ดีกว่า แต่ยังใช้งานไม่ได้มากนัก
มีใครพบวิธีแก้ปัญหาที่ใช้งานได้จริงและช่วยให้คุณพัฒนาโค้ดด้วย Docker และ OS X ได้อย่างมีประสิทธิผล
อัปเดต: ทางออกในที่สุด!
ในที่สุดฉันก็พบวิธีแก้ปัญหาที่ดูเหมือนมีประสิทธิผลโดยใช้ Boot2Docker + rsync ฉันได้บันทึกรายละเอียดเกี่ยวกับวิธีการตั้งค่านี้ในคำตอบของตัวเองเช่นเดียวกับโครงการโอเพนซอร์สที่เรียกว่านักเทียบท่า-OSX-dev