วิธีใดในการตั้งค่าสภาพแวดล้อมการพัฒนาบน OS X ด้วย Docker ที่ถูกต้อง


94

Intro

ฉันคิดวิธีที่ดีในการตั้งค่าสภาพแวดล้อมการพัฒนาบน OS X โดยใช้ Docker และ Boot2Docker ไม่ได้ ปัญหาที่ฉันประสบคือวิธีจัดการซอร์สโค้ดเพื่อให้:

  1. ฉันสามารถแก้ไขโค้ดบน OS X โดยใช้เครื่องมือ (ตัวแก้ไขข้อความ, IDE, คอมไพล์ ฯลฯ ) ที่ฉันติดตั้งไว้แล้ว
  2. การปรับเปลี่ยนเหล่านั้นจะแสดงในคอนเทนเนอร์ 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) และลองใช้สองสามข้อ แต่ไม่พบวิธีที่ประสบความสำเร็จ:

  1. ฉันเปลี่ยน Boot2Docker เพื่อใช้ NFSแต่มันก็ช้าพอ ๆ
  2. ฉันลองVagrant + NFSและนั่นก็ช้าเช่นกัน
  3. ฉันลองเมาท์ Sambaแต่โฟลเดอร์มักจะว่างเปล่าในคอนเทนเนอร์ Docker
  4. ผมพยายามที่จะใช้ระบบไฟล์พร้อมเพรียงกันซึ่งทำงานช่วงสั้น ๆ ในการซิงค์ไฟล์ แต่แล้วเก็บไว้แสดงข้อผิดพลาดการเชื่อมต่อ
  5. ฉันเปิดใช้งานการสำรวจความคิดเห็นใน Jekyllแต่นั่นเพิ่มความล่าช้าอย่างมากจนกระทั่งการเปลี่ยนแปลงของฉันถูกหยิบขึ้นมา
  6. ฉันพยายามDinghyเป็น "เร็วขึ้นเป็นมิตรเทียบท่าบน OS X กับคนจรจัด" และมีบางส่วนปรับปรุง แทนที่จะคอมไพล์ Jekyll ช้าลง 10-15 เท่ากลับช้าลง 2-3 เท่า ดีกว่า แต่ยังใช้งานไม่ได้มากนัก

มีใครพบวิธีแก้ปัญหาที่ใช้งานได้จริงและช่วยให้คุณพัฒนาโค้ดด้วย Docker และ OS X ได้อย่างมีประสิทธิผล

อัปเดต: ทางออกในที่สุด!

ในที่สุดฉันก็พบวิธีแก้ปัญหาที่ดูเหมือนมีประสิทธิผลโดยใช้ Boot2Docker + rsync ฉันได้บันทึกรายละเอียดเกี่ยวกับวิธีการตั้งค่านี้ในคำตอบของตัวเองเช่นเดียวกับโครงการโอเพนซอร์สที่เรียกว่านักเทียบท่า-OSX-dev


คุณได้ลองใช้ตัวติดตั้ง Docker อย่างเป็นทางการสำหรับ OS X พร้อมกับ NFS แล้วหรือยัง? AFAIK นี่ไม่ใช่ปัญหาที่ จำกัด เฉพาะ Docker บน OS X แต่ยังรวมถึงการพัฒนาบนพื้นฐานของ Vagrant บน OS X ที่มีโค้ดเบสที่ใหญ่กว่า ( เรามีปัญหาที่คล้ายกัน แต่กับ Vagrant ) ฉันพบว่า NFS เป็นโซลูชันเดียวที่ใช้ได้และยอมรับได้
James Mills

@JamesMills: ฉันทำตามคำแนะนำอย่างเป็นทางการเพื่อติดตั้ง Docker และ Boot2Docker มีคำแนะนำอย่างเป็นทางการสำหรับการตั้งค่า NFS หรือไม่? ฉันพบพวกมันใน GitHub เท่านั้นและหลังจากใช้มันดูเหมือนจะไม่เร็วขึ้น คุณตั้งค่า NFS ได้อย่างไร?
Yevgeniy Brikman

คุณเคยเห็นgithub.com/boot2docker/boot2docker/issues/64หรือไม่?
James Mills

6
วิธีที่ถูกต้องในการทำงานกับ Docker คือการเรียกใช้ Linux แบบเนทีฟแทน OS X หรือทำการพัฒนาทั้งหมดของคุณภายใน Linux VM การผสานรวม "boot2docker" เป็นการแฮ็กที่น่าเกลียดขนาดใหญ่ที่ไม่ทำอะไรเลยนอกจากหว่านความสับสนและความผิดหวัง
larsks

7
@larsks: นั่นไม่เป็นประโยชน์
Yevgeniy Brikman

คำตอบ:


46

ฉันตัดสินใจที่จะเพิ่มคำตอบของตัวเองด้วยวิธีที่ดีที่สุดที่ฉันพบจนถึงตอนนี้ ฉันจะอัปเดตสิ่งนี้หากพบตัวเลือกที่ดีกว่านี้

ทางออกที่ดีที่สุดจนถึงตอนนี้

ทางออกที่ดีที่สุดที่ฉันได้พบในการตั้งค่าการพัฒนาสภาพแวดล้อมการผลิตที่มีการเทียบท่าบน OS X คือBoot2Docker + Rsync ด้วย rsync เวลาในการสร้างในคอนเทนเนอร์ Docker จะเทียบเท่ากับการรันบิลด์โดยตรงบน OSX! ยิ่งไปกว่านั้นรหัสผู้เฝ้าดูไฟล์ไม่จำเป็นต้องมีการสำรวจ (ใช้inotifyงานได้เนื่องจาก rsync ใช้โฟลเดอร์ปกติ) ดังนั้นการรีโหลดแบบร้อนจึงเกือบจะเร็ว

มีสองวิธีในการตั้งค่า: การติดตั้งอัตโนมัติและการติดตั้งด้วยตนเอง

ติดตั้งอัตโนมัติ

ฉันได้บรรจุทุกขั้นตอนสำหรับการตั้งค่า Boot2Docker กับ Rsync เป็นโครงการที่มาเปิดที่เรียกว่านักเทียบท่า-OSX-dev รหัสค่อนข้างหยาบ แต่ฉันประสบความสำเร็จในการใช้งานเป็นเวลาหลายสัปดาห์เพื่อสลับไปมาระหว่าง 3 โครงการกับ 3 กองเทคโนโลยีที่แตกต่างกันได้อย่างง่ายดาย ลองใช้รายงานข้อบกพร่องและส่ง PR! นอกจากนี้โปรดดูโพสต์บล็อกของฉันสภาพแวดล้อมการพัฒนาที่มีประสิทธิผลด้วย Docker บน OS Xสำหรับข้อมูลเพิ่มเติม

การตั้งค่าด้วยตนเอง

  1. ติดตั้งBoot2Dockerbrew install boot2docker :
  2. เรียก Boot2Docker แต่ด้วย VirtualBox boot2docker init && boot2docker start --vbox-share=disableโฟลเดอร์ที่ใช้ร่วมกันสำหรับผู้พิการ:
  3. เรียกใช้boot2docker shellinitและคัดลอกตัวแปรสภาพแวดล้อมที่พิมพ์ลงใน~/.bash_profileไฟล์ของคุณ
  4. ติดตั้ง rsync บน Boot2Docker boot2docker ssh "tce-load -wi rsync"VM:
  5. สร้างโฟลเดอร์ฐานที่คุณต้องการบน Boot2Docker VM และตั้งค่าสิทธิ์อย่างถูกต้องสำหรับพวกเขา ตัวอย่างเช่นถ้าคุณจะได้รับการซิงค์/foo/barโฟลเดอร์จาก OS X, คุณจำเป็นต้องสร้าง/foo/barบน Boot2Docker boot2docker ssh "mkdir -p /foo/bar && chown -R docker /foo/bar"VM:
  6. เรียกใช้ rsync เพื่อซิงค์ไฟล์ไปยัง Boot2Docker rsync --archive --rsh="ssh -i $HOME/.ssh/id_boot2docker -o StrictHostKeyChecking=no" /foo/bar docker@dockerhost:/fooVM: ตรวจสอบเอกสาร rsync สำหรับการตั้งค่าต่างๆที่คุณอาจต้องการเปิดใช้งานเช่นใช้--exclude .gitเพื่อแยก.gitโฟลเดอร์เมื่อทำการซิงค์
  7. ใช้โปรแกรมดูไฟล์เพื่อซิงค์ไฟล์ ตัวอย่างเช่นคุณสามารถใช้fswatch ( brew install fswatch) pipedใน rsync
  8. ณ จุดนี้คุณควรจะสามารถที่จะใช้docker runที่จะยิงขึ้นตู้คอนเทนเนอร์หางของคุณและใช้ธงที่จะติดโฟลเดอร์ที่คุณกำลังซิงค์:-vdocker run -v /foo/bar:/src some-docker-image
  9. อัปเดตโค้ดบน OS X ตามปกติ การเปลี่ยนแปลงควรเผยแพร่อย่างรวดเร็วโดยใช้ rsync รหัสผู้เฝ้าดูไฟล์ปกติควรรับการเปลี่ยนแปลงตามปกติ (เช่นการใช้งานinotify) และการสร้างควรทำงานอย่างรวดเร็วเนื่องจากไฟล์ทั้งหมด "ในเครื่อง" ไปยังคอนเทนเนอร์
  10. หากคุณต้องการทดสอบเว็บไซต์ที่ทำงานอยู่ให้รันboot2docker ipคำสั่งเพื่อค้นหาว่ามันอยู่บน IP ใด

ขอบคุณสำหรับการแบ่งปัน! เมื่อพวกเขากล่าวว่า rsync เป็น "ทางเดียวเท่านั้น" หมายความว่าฉันไม่สามารถใช้ระบบไฟล์ OS X เพื่อแชร์ไฟล์ระหว่างสองคอนเทนเนอร์ได้หรือไม่ ตัวอย่าง: คอนเทนเนอร์ 1 ดูไฟล์ต้นฉบับและคอมไพล์ไบนารีคอนเทนเนอร์ 2 ใช้เพื่อรันไบนารีที่คอมไพล์แล้ว (โดยใช้ Haskell ในตัวอย่างนี้)
Nicolas Hery

1
@NicolasHery: ความเข้าใจของฉันคือ rsync จะคัดลอกการเปลี่ยนแปลงจาก OS X ไปยังคอนเทนเนอร์ Docker แต่ไม่ใช่ในทางกลับกัน ดังนั้นไฟล์ใด ๆ ที่สร้างโดยคอนเทนเนอร์ Docker (เช่นไบนารีที่คอมไพล์แล้ว) จะไม่ปรากฏใน OS X อย่างไรก็ตามหากไฟล์เหล่านั้นถูกสร้างขึ้นในโฟลเดอร์ที่มีเครื่องหมาย a VOLUMEคุณสามารถให้คอนเทนเนอร์อื่นเข้าถึงไดรฟ์ข้อมูลนั้นได้โดยใช้--volumes-fromธง. ฉันยังไม่ได้ลอง แต่สงสัยว่าจะได้ผล
Yevgeniy Brikman

1
คำตอบที่ดี คุณสามารถสร้างไดรเวอร์สำหรับ Docker-machine ( github.com/docker/machine ) ที่ทำต้นแบบส่วนใหญ่ให้คุณได้
โดม

1
@dom: ฉันชอบไอเดียนั้น แต่คุณรู้วิธีสร้างไดร์เวอร์สำหรับ Docker-machine หรือไม่? คำขอดึงเข้าสู่ repo เป็นวิธีเดียวหรือเป็นไปได้ที่จะสร้างไดรเวอร์จากภายนอก?
Yevgeniy Brikman

1
บทช่วยสอนนี้ยังใช้ได้กับเวอร์ชัน 1.9.1 ใหม่บน Windows หรือไม่ ใช้งานได้หรือบางที Docker ก็มีวิธีแก้ปัญหาใหม่สำหรับ "ปัญหา" นี้แล้ว?

18

อัปเดต : ขณะนี้นักเทียบท่าสำหรับ Macอยู่ในรุ่นเบต้าที่มีฟังก์ชันการทำงานที่ไม่ใช่แฮ็กการไปเส้นทางนั้นอาจเหมาะสมกว่ามากสำหรับการพัฒนาในพื้นที่โดยไม่ต้องมีการแฮ็กและวิธีแก้ปัญหาในบทความ

อย่า . ฉันรู้ว่านั่นไม่ใช่คำตอบที่คุณอาจคาดหวัง แต่จงประเมินต้นทุน / ประโยชน์อย่างตรงไปตรงมาในการพยายามรับซอร์สโค้ดในเครื่อง + การดำเนินการเทียบเคียงเทียบกับการพัฒนาท้องถิ่นบน OSX

เมื่อถึงจุดหนึ่งปัญหาทั้งหมดความพยายามในการตั้งค่าและจุดเจ็บปวดในการดำเนินงานอาจได้รับการแก้ไขอย่างดีพอ แต่ ณ ตอนนี้สิ่งที่ฉันทำคือขาดทุนสุทธิ

ปัญหา # 1: ไดรฟ์ข้อมูลที่ติดตั้งบน Virtual Box (ซึ่งใช้ vboxfs) ช้ามาก

รอสักครู่และเกือบจะดีขึ้นอย่างแน่นอน

ปัญหา # 2: การดูไฟล์เสีย

ฉันไม่แน่ใจว่าจะมีการแก้ไขในอนาคตอันใกล้นี้ หากฟังก์ชันประเภทนี้เป็นกุญแจสำคัญในขั้นตอนการพัฒนาของคุณฉันจะถือว่านี่เป็นตัวทำลายข้อตกลง มันไม่คุ้มค่ากับความพยายามในการวิจัยและพัฒนาครั้งใหญ่เมื่อเทียบกับการใช้ rbenv / bundler เพื่อจัดการการติดตั้ง jekyll / ruby ​​ของคุณและเรียกใช้งานบน OSX เช่นเดียวกับที่ผู้คนประสบความสำเร็จในช่วงทศวรรษที่ผ่านมา +

เช่นเดียวกับที่ "คลาวด์" ไม่มีส่วนร่วมในการตั้งค่าการพัฒนาในพื้นที่ของฉันในขณะนี้นักเทียบท่าเป็นผู้ชนะในการทดสอบ / จัดเตรียม / ปรับใช้และสำหรับการเรียกใช้ฐานข้อมูลและส่วนประกอบของบุคคลที่สามอื่น ๆ แต่แอปพลิเคชันที่ฉันกำลังเขียนโค้ดจะทำงานได้ทันที บน OSX


1
ฉันสองที่ เราพัฒนาบน OSX และเรียกใช้แอปภายในระบบโดยตรง (ด้วยการโหลดซ้ำ ฯลฯ ) จากนั้นเมื่อแอปเสร็จสมบูรณ์เราจะปรับแต่งแอปเพื่อทดสอบการจัดเตรียมและการผลิต
ItalyPaleAle

4
หืมมันเป็นเรื่องเล็กน้อย ฉันมีความเท่าเทียมกันเสมอในสภาพแวดล้อมการจัดเตรียม / การผลิตของฉัน เป็น dev ที่มักจะผิดปกติเนื่องจากฉันเขียนโค้ดบน OS X เอกสาร Docker ทำให้ดูเหมือนว่านี่เป็นปัญหาที่แก้ไขได้ ฉันจะใช้ความพยายามอีกวันและดูว่าฉันจะหาอะไรทำงานได้ไหม
Yevgeniy Brikman

วันนี้คุณยังรู้สึกว่าคำตอบนี้ใช้ได้หรือไม่? เพียงไม่กี่เดือน แต่เนื่องจากโครงการของ @ Yevgeniy และมีเพียง 2 ประเด็นที่ได้รับการแก้ไขแล้วบางทีต้นทุน / ผลประโยชน์ก็คุ้มค่าแล้ว! ไม่ใช่เหรอ?
cregox

1
มันเป็นเรื่องความชอบส่วนบุคคล ฉันยังคงไม่ยุ่งกับเรื่องนี้เนื่องจากมีโครงการจำนวนมากที่ฉันใช้ในฐานะที่ปรึกษา หากฉันเป็นคนจับเวลาเต็มเวลาที่ทำงานในโครงการเดียวกันเป็นส่วนใหญ่เป็นเวลาหลายสัปดาห์ / เดือนการตั้งค่า rsync / fswatch อาจคุ้มค่า
Peter Lyons

Docker Toolbox เป็นวิธีที่ถูกต้องในการใช้งานในปัจจุบันเพราะถ้าคุณใช้ homebrew หรือตัวจัดการแพ็คเกจอื่นเวอร์ชันของเครื่องมือนักเทียบท่าจะไม่ซิงค์กันเว้นแต่จะทำตามการกำหนดเวอร์ชันเป็นกล่องเครื่องมือนักเทียบท่า
taco

12

Docker สำหรับ Mac และ Windowsจะเป็นวิธีการขั้นสุดท้ายในการพัฒนาด้วย Docker บน OS X (และ Windows) ผลิตภัณฑ์ Docker ซอฟต์แวร์นี้เป็น“ สภาพแวดล้อมแบบบูรณาการที่ง่ายต่อการปรับใช้สำหรับการสร้างการประกอบและการจัดส่งแอปพลิเคชันจาก Mac หรือ Windows” โดยอ้างว่าสามารถแก้ไขปัญหาที่ OP นำเสนอได้ ตั้งแต่วันที่ 24 มีนาคม 2559 ประกาศ :

  • เร็วขึ้นและเชื่อถือได้มากขึ้น: ไม่มี VirtualBox อีกต่อไป! เอ็นจิ้น Docker ทำงานในการแจกจ่าย Alpine Linux ที่ด้านบนของ xhyve Virtual Machine บน MacOS X หรือบน Hyper-V VM บน Windows และ VM นั้นได้รับการจัดการโดยแอปพลิเคชัน Docker คุณไม่จำเป็นต้องใช้ Docker-machine เพื่อเรียกใช้ Docker สำหรับ Mac และ Windows
  • การรวมเครื่องมือ: Docker for Mac เป็นแอปพลิเคชัน Mac และ Docker สำหรับ Windows เป็นแอปพลิเคชัน Windows รวมถึงอินเทอร์เฟซผู้ใช้แบบเนทีฟและความสามารถในการอัปเดตอัตโนมัติ ชุดเครื่องมือ Docker มาพร้อมกับมัน: บรรทัดคำสั่ง Docker, Docker Compose และบรรทัดคำสั่ง Docker Notary
  • การติดตั้งระดับเสียงสำหรับรหัสและข้อมูลของคุณ: การเข้าถึงข้อมูลระดับเสียงทำงานได้อย่างถูกต้องรวมถึงการแจ้งเตือนการเปลี่ยนแปลงไฟล์ (บน Mac inotify ทำงานได้อย่างราบรื่นภายในคอนเทนเนอร์สำหรับไดเร็กทอรีที่ติดตั้งไดรฟ์ข้อมูล) ซึ่งจะเปิดใช้รอบการแก้ไข / ทดสอบสำหรับการพัฒนา "ในคอนเทนเนอร์"
  • เข้าถึงคอนเทนเนอร์ที่รันบนเครือข่ายโฮสต์ภายในได้อย่างง่ายดาย: Docker สำหรับ Mac และ Windows รวมเซิร์ฟเวอร์ DNS สำหรับคอนเทนเนอร์และรวมเข้ากับระบบเครือข่าย Mac OS X และ Windows บน Mac สามารถใช้ Docker ได้แม้ว่าจะเชื่อมต่อกับ VPN ขององค์กรที่มีข้อ จำกัด มากก็ตาม
  • Docker สำหรับ Mac ได้รับการออกแบบมาตั้งแต่ต้นเพื่อให้สามารถใช้กับโมเดลการรักษาความปลอดภัยแซนด์บ็อกซ์ของ OS X ได้และเรากำลังทำงานอย่างใกล้ชิดกับ Apple เพื่อให้บรรลุเป้าหมายนี้

ฉันเพิ่งเห็นสิ่งนี้เมื่อวันก่อนและดูเหมือนว่าจะเป็นทางออกที่มีแนวโน้มมากที่สุด ฉันรู้สึกตื่นเต้นมากที่ได้ลองใช้เวอร์ชันเบต้าและถ้ามันใช้งานได้ดีฉันจะเปลี่ยนเป็นคำตอบที่ยอมรับอย่างเป็นทางการ
Yevgeniy Brikman

4
น่าเสียดายที่เวอร์ชันเบต้าปัจจุบัน (1.11.0-beta7) ดูเหมือนว่าจะช้าพอ ๆ กับวิธีการอื่น ๆ ดังนั้นจึงอาจใช้เวลาสักครู่ก่อนที่จะใช้forums.docker.com/t/…
walterra

3

ข้อจำกัดความรับผิดชอบ: ฉันอาจจะลำเอียงเนื่องจากฉันเป็นผู้เขียน Docker-sync

ฉันอาจลองใช้วิธีแก้ปัญหาทั้งหมดที่มีชื่อที่นี่รวมถึงบางส่วนเพิ่มเติม (ดูการบังคับhttps://github.com/EugenMayer/docker-sync/wiki/Alternatives-to-docker-sync ) แต่โดยทั่วไปแล้วพวกเขาล้มเหลวที่ด้านข้างของ ประสิทธิภาพ (ส่วนใหญ่) หรือบนเครื่องเทียบท่า (หรือไม่มี) ใช้ / บังคับ

http://docker-sync.ioถูกสร้างขึ้นเพื่อรวมโซลูชันทั้งหมดเข้าด้วยกันและมอบกลยุทธ์ที่ดีที่สุด (คุณสามารถเลือกใช้งานได้หลายแบบ)

สามารถใช้ได้กับ rsync (ซิงค์ทางเดียว) รวมถึงการแก้ไขสิทธิ์สำหรับผู้ใช้และพร้อมเพรียงกัน (ซิงค์ 2 ทาง) ไม่บังคับให้คุณใช้ Docker-machine หรือ Hypervisor เฉพาะและไม่ต้องการให้คุณมี Docker สำหรับ Mac มันใช้ได้กับทุกคน

ประสิทธิภาพ EugenMayer / docker-sync / wiki / 4. -Performance ไม่ได้รับผลกระทบเหมือนกับว่าคุณไม่มีส่วนแบ่งเลย

นักเทียบท่าซิงค์และผู้เฝ้าดูการเปลี่ยนแปลงได้รับการปรับให้เหมาะสมและทำงานกับโครงการที่มีไฟล์ 12k ได้โดยไม่มีปัญหา

ลองดูสิถ้าคุณต้องการฉันชอบที่จะรับฟังความคิดเห็น!


2

ฉันเข้าใจความรู้สึกคุณ! ฉันคิดว่าฉันได้ลองทุกอย่างที่คุณลองมาแล้วและน่าเสียดายที่มันยังช้า จากนั้นฉันก็เจอความคิดเห็นนี้https://github.com/boot2docker/boot2docker/issues/64#issuecomment-70689254ที่แนะนำให้ใช้ Vagrant และ Parallels แทน Virtualbox สิ่งนี้ทำให้ฉันใช้ nfs และฉันก็ได้เห็นการเพิ่มประสิทธิภาพอย่างมากสำหรับโครงการของฉัน (Drupal)

นี่คือไฟล์ Vagrant สิ่งที่คุณต้องทำคือติดตั้ง vagrant คัดลอกไฟล์นี้ในไฟล์ชื่อ Vagrantfile และวางไว้ในโฟลเดอร์ ไปที่โฟลเดอร์นั้นและทำvagrant upแทน boot2docker ปกติของคุณ

Vagrant.configure(2) do |config|
  config.vm.box = "parallels/boot2docker"

  config.vm.network "forwarded_port", guest: 80, host: 80

  config.vm.synced_folder(
    "/Users/dicix/work/www", "/vagrant",
    type: 'nfs',
    nfs_udp: true,
    mount_options: %w[actimeo=2],
    bsd__nfs_options: %w[alldirs maproot=root:wheel]
  )
end

ฉันสมมติว่าสิ่งนี้ต้องการการติดตั้งแบบขนาน?
Yevgeniy Brikman

2

ฉันยังใช้ Vagrant กับ parallels และ boot2docker ( https://github.com/Parallels/boot2docker-vagrant-box ) การพัฒนาไม่เคยง่ายสำหรับฉัน ใช้งานได้ดีกับdocker-composeการตั้งค่าขนาดใหญ่ ฉันไม่รู้สึกถึงความล่าช้าหรือการใช้ทรัพยากรจำนวนมาก

นี่คือVagrantfileลักษณะของฉัน:

Vagrant.configure(2) do |config|

  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.box = "parallels/boot2docker"

  config.vm.synced_folder "/Users", "/Users", type: "nfs", mount_options: ["nolock", "vers=3", "udp"], id: "nfs-sync"

end

1

ฉันได้รับการพัฒนาใน OS X (กลางปี ​​2011 Macbook Air) + Boot2Docker + สภาพแวดล้อมแบบ Docker-compose มาสองสามสัปดาห์แล้ว ไม่พบปัญหาด้านประสิทธิภาพที่สำคัญ แต่ฉันหลีกเลี่ยงการเรียกใช้งานบิลด์ใด ๆ เมื่อพัฒนา (ทำไมไม่ใช้สิ่งที่ชอบjekyll serve --skip-initial-build) นี่คือdocker-compose.ymlไฟล์ตัวอย่างที่ฉันใช้:

นักเทียบท่า - compose.yml:

test:
  build: .
  volumes:
    - ./client:/src/client
    - ./server:/src/server
    - ./test:/src/test
  command: nodemon --exec jasmine-node -- test/ --verbose --autotest --captureExceptions --color
  environment:
    - DEBUG=*

Dockerfile:

FROM node:0.12

RUN mkdir -p /src
WORKDIR /src

ENV PATH=/src/node_modules/.bin:$PATH

# We add package.json first so that we the
# image build can use the cache as long as the
# contents of package.json hasn't changed.

COPY package.json /src/
RUN npm install --unsafe-perm

COPY . /src

CMD [ "npm", "start" ]
EXPOSE 3000

บางครั้งฉันใช้ NFS ( http://syskall.com/using-boot2docker-using-nfs-instead-of-vboxsf/ ) แต่ไม่ได้สังเกตเห็นความแตกต่างของประสิทธิภาพอย่างมากเมื่อทำเช่นนั้น

สำหรับฉันความสะดวกสบายในการdocker-compose up testทำให้สภาพแวดล้อมของฉันทำงานได้อย่างง่ายดายนั้นคุ้มค่ากับต้นทุนในด้านประสิทธิภาพ (ฉันมักทำงานในหลายโครงการที่มีสแต็กที่แตกต่างกัน)

PS: nodemonเป็นหนึ่งในผู้เฝ้าดูไฟล์เพียงไม่กี่คนที่ทำงานกับ vboxsf (ดูhttps://github.com/remy/nodemon/issues/419 )


แม้ว่าฉันจะข้ามการสร้างเริ่มต้นด้วย Jekyll ทุกครั้งที่ฉันเปลี่ยนไฟล์มันจะต้องสร้างใหม่ซึ่งยังคงใช้เวลา 1-3 นาทีหากติดตั้งซอร์สโค้ด ทำให้ไม่สามารถทำการพัฒนารูปแบบการเปลี่ยนแปลงและโหลดซ้ำได้
Yevgeniy Brikman

@YevgeniyBrikman โอ้ฉันไม่รู้เรื่องนั้น :( ฉันเดาว่าตัวเลือกสุดท้ายคือให้รหัสของคุณอยู่ใน boot2docker VM และติดตั้งบนเครื่องโฮสต์ของคุณโดยใช้ sshfs มิฉะนั้นฉันเดาว่าคุณจะต้องรอ ประสิทธิภาพของโฟลเดอร์ที่ติดตั้งดีขึ้นเพื่อใช้นักเทียบท่าเป็นสภาพแวดล้อมการพัฒนา
Olivier Lalonde


-1

การให้นักเทียบท่าทำงานเป็นเครื่องมือในการพัฒนาเป็นไปได้ แต่มันจะเจ็บ ฉันได้บันทึกกระบวนการไว้ที่นี่:

http://harmingcola.blogspot.com/2015/05/how-to-setup-docker-as-development-tool.html


ขอบคุณสำหรับการโพสต์ แต่วิธีนี้จะแก้ปัญหาด้านประสิทธิภาพของไดรฟ์ข้อมูลที่เมาท์ได้อย่างไร
Yevgeniy Brikman

ขออภัยคุณไม่จำเป็นต้องใช้ vBox ในการเมานต์อะไรอีกต่อไป คุณสามารถเมานต์โฟลเดอร์ผ่านอินเทอร์เฟซนักเทียบท่าปกติ
ทำร้ายโคล่า

-4

วิธีนี้เป็นวิธีล่าสุด (ก.ย. 2015) และวิธีที่ง่ายที่สุดในการตั้งค่า Docker บน Mac: ลิงก์ที่นี่:

คุณติดตั้ง Docker โดยใช้Docker Toolbox ลิงก์ไปยังคำแนะนำที่นี่:

เป็นแพ็คเกจการตั้งค่า Docker ที่สมบูรณ์ ซึ่งมีเครื่องมือ Docker ดังต่อไปนี้:

Docker Machine สำหรับรันไบนารีของเครื่องเทียบท่า

Docker Engine สำหรับรันไบนารีนักเทียบท่า

Docker Compose สำหรับรันไบนารีของนักเทียบท่าเขียน

Kitematic, Docker GUI เป็นเชลล์ที่กำหนดค่าไว้ล่วงหน้าสำหรับสภาพแวดล้อมบรรทัดคำสั่ง Docker

Oracle VM VirtualBox

ป้อนคำอธิบายภาพที่นี่

อะไรอยู่ในกล่องเครื่องมือ:

  • ไคลเอนต์ Docker
  • เครื่องเทียบท่า
  • Docker Compose (Mac เท่านั้น)
  • Docker Kitematic
  • VirtualBox

3
ใช่ แต่น่าเสียดายที่ไม่สามารถแก้ปัญหาที่นำเสนอในตอนแรกได้
Nick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.