ฉันควรใช้ Vagrant หรือ Docker เพื่อสร้างสภาพแวดล้อมแบบแยกหรือไม่? [ปิด]


2083

ฉันใช้ Ubuntu เพื่อการพัฒนาและการปรับใช้และมีความต้องการในการสร้างสภาพแวดล้อมแบบแยก

ฉันกำลังพิจารณา Vagrant หรือ Docker สำหรับวัตถุประสงค์นี้ ข้อดีและข้อเสียคืออะไรหรือเปรียบเทียบโซลูชั่นเหล่านี้อย่างไร


27
ทั้งสองร่วมขณะนี้: docs.vagrantup.com/v2/provisioning/docker.html
Alp

78
คำถามของคุณโชคดีพอที่จะรับทั้งสองคำตอบของนักเขียนของทั้งสองบริการ: มิทเชลและโซโลมอน Hykes
itsazzad

4
ฉันต้องการสรุปใหม่ - คำถามส่วนใหญ่ผิด คำถามที่ถูกต้องคือ: ฉันควรใช้ Vagrant หรือนักเทียบท่าเพื่อสร้างสภาพแวดล้อมที่แยกได้หรือไม่? คำตอบก็คือ Vagrant และนักเทียบท่าเขียนงานที่เหมือนกันในการอธิบายสภาพแวดล้อมและคุณควรเปรียบเทียบนักเทียบท่ากับ Virtualbox แทน ความแตกต่างก็คือ Vagrant สามารถใช้การจำลองเสมือนใด ๆ เช่น Docker, VMWare, Virtualbox บน Windows, Linux หรือ OSX แต่นักแต่งเพลงสามารถใช้ภาพ Docker ที่ใช้ Linux ได้
PHZ.fi-Pharazon

สำหรับฉันคำตอบคือ "ความเร็วที่สำคัญสำหรับคุณในการทำงานปกติ" ฉันพบว่า Vagrant นั้นช้ากว่า Docker บนนักเทียบท่าโดยเฉพาะอย่างยิ่งหลังจากการดึงครั้งแรกวิธีการแคชและเลเยอร์ของนักเทียบท่าทำให้ฉันง่ายที่สุดและเร็วที่สุดสำหรับฉันในฐานะนักพัฒนาเพื่อใช้งาน
Michael Durrant

คำตอบ:


1155

ถ้าจุดประสงค์ของคุณคือการแยกฉันคิดว่านักเทียบท่าคือสิ่งที่คุณต้องการ

Vagrant เป็นผู้จัดการเครื่องเสมือน ช่วยให้คุณสคริปต์การกำหนดค่าเครื่องเสมือนเช่นเดียวกับการจัดเตรียม อย่างไรก็ตามมันยังคงเป็นเครื่องเสมือนขึ้นอยู่กับVirtualBox (หรืออื่น ๆ ) ที่มีค่าใช้จ่ายมาก มันต้องการให้คุณมีไฟล์ฮาร์ดไดรฟ์ที่มีขนาดใหญ่มากต้องใช้ RAM จำนวนมากและประสิทธิภาพอาจไม่ดีนัก

เทียบท่าในการใช้มืออื่น ๆ Kernel cgroup และ namespacing ผ่านLXC หมายความว่าคุณใช้เคอร์เนลเดียวกันกับโฮสต์และระบบไฟล์เดียวกัน คุณสามารถใช้ Dockerfile กับdocker buildคำสั่งเพื่อจัดการกับการเตรียมและกำหนดค่าคอนเทนเนอร์ของคุณ คุณมีตัวอย่างที่docs.docker.comเกี่ยวกับวิธีสร้าง Dockerfile ของคุณ มันใช้งานง่ายมาก

เหตุผลเดียวที่คุณต้องการใช้ Vagrant คือถ้าคุณต้องทำ BSD, Windows หรือการพัฒนาอื่น ๆ ที่ไม่ใช่ Linux บนกล่อง Ubuntu ของคุณ มิฉะนั้นไปหานักเทียบท่า


13
น่าเสียดายที่ยังไม่ หากคุณอยู่ในระบบ 32 บิตคุณจะต้องใช้ VM พร้อมกับระบบเกสต์ 64 บิตเพื่อเรียกใช้นักเทียบท่า อย่างไรก็ตามด้วย go1.1 การสนับสนุน 32 บิตจะดีขึ้นและเป็นไปได้ที่นักเทียบท่าจะรองรับการโค้ง 32 บิตในเร็ว ๆ นี้
creack

8
สิ่งนี้เป็นจริงสำหรับ Mac และ Windows แต่เนื่องจาก docker 0.7 ทำให้ linux distro ทำงานได้ดี หากคุณรู้จักที่ไม่ทำงานโปรดแจ้งให้เราทราบ นอกจากนี้หากคุณไม่มี Mac หรือ Windows stack (ซึ่งไม่น่าเป็นไปได้ แต่สามารถเกิดขึ้นได้) คุณไม่ต้องการเรียกใช้ Docker ที่ใดก็ได้ยกเว้นใน linux ไคลเอ็นต์นักเทียบท่าทำงานได้ดีบน Mac ควรทำงานเร็ว ๆ นี้กับ BSD และ daemon จะรองรับ BSD, Solaris และ Mac ในที่สุด
creack

9
ในกรณีที่มีคนอ่านความคิดเห็นเหล่านี้คุณควรรู้ว่า Docker กด ver1.0 เมื่อ 12 วันก่อน ( blog.docker.com/2014/06/its-here-docker-1-0 12 วันที่ผ่านมา) และแพลตฟอร์มจำนวนมากที่มีความเสถียร & สนับสนุนทันที ( docs.docker.com/installation )
JorgeArtware

17
คนเร่ร่อนมี LXC และตัวจัดสรรนักเทียบท่า อย่างไรก็ตาม - คนจรจัดและนักเทียบท่าเป็นสิ่งที่แตกต่างกันโดยพื้นฐาน คนพเนจรล้วน แต่มีสภาพแวดล้อมการพัฒนานักเทียบท่าค่อนข้างจะใช้ในการผลิตและลีนุกซ์เท่านั้น
Dannyboy

2
ตอนนี้ Docker ใช้งานได้กับ Windows 10 Pro ขึ้นไปและ Windows Server 2016 ฉันเพิ่งอัพเกรดจาก Windows 10 Home เป็น Windows 10 Pro และติดตั้งแอพ docker ตอนนี้ฉันสามารถเรียกใช้อิมเมจ docker Linux บน Windows 10 มันยอดเยี่ยม!
PrestonDocks

2339

คำเตือน: ฉันเขียน Vagrant! แต่เนื่องจากฉันเขียน Vagrant ฉันใช้เวลาส่วนใหญ่อยู่ในโลก DevOps ซึ่งมีซอฟต์แวร์เช่น Docker ฉันทำงานกับ บริษัท จำนวนมากที่ใช้ Vagrant และหลายคนใช้ Docker และฉันเห็นว่าทั้งสองมีอิทธิพลกันอย่างไร

ก่อนที่ฉันจะพูดมากเกินไปคำตอบโดยตรง:ในสถานการณ์เฉพาะของคุณ (ตัวคุณเองทำงานคนเดียวทำงานบน Linux ใช้งาน Docker ในการผลิต) คุณสามารถติดกับ Docker เพียงอย่างเดียวและทำให้สิ่งต่าง ๆ ง่ายขึ้น ในสถานการณ์อื่น ๆ (ฉันพูดคุยเพิ่มเติม) มันไม่ง่ายเลย

การเปรียบเทียบ Vagrant กับ Docker โดยตรงไม่ถูกต้อง ในบางสถานการณ์พวกเขาจะทับซ้อนกันและส่วนใหญ่พวกเขาทำไม่ได้ ที่จริงแล้วการเปรียบเทียบที่ฉลาดกว่าจะเป็น Vagrant เทียบกับบางอย่างเช่น Boot2Docker (ระบบปฏิบัติการขั้นต่ำที่สามารถเรียกใช้ Docker ได้) Vagrant เป็นระดับเหนือ Docker ในแง่ของ abstractions ดังนั้นจึงไม่ใช่การเปรียบเทียบที่ยุติธรรมในกรณีส่วนใหญ่

Vagrant เปิดตัวสิ่งต่าง ๆ เพื่อเรียกใช้แอพ / บริการเพื่อการพัฒนา สามารถอยู่บน VirtualBox, VMware มันสามารถอยู่ในระยะไกลเช่น AWS, OpenStack ภายในนั้นหากคุณใช้ตู้คอนเทนเนอร์ Vagrant จะไม่สนใจและยอมรับว่า: สามารถติดตั้งดึงลงสร้างและเรียกใช้คอนเทนเนอร์ Docker โดยอัตโนมัติ ด้วย Vagrant 1.6 ทำให้ Vagrant มีสภาพแวดล้อมการพัฒนาที่อิงตามนักเทียบท่าและสนับสนุนการใช้ Docker ที่มีเวิร์กโฟลว์เดียวกับ Vagrant ใน Linux, Mac และ Windows Vagrant ไม่ได้พยายามแทนที่นักเทียบท่าที่นี่ แต่เป็นแนวทางปฏิบัติของนักเทียบท่า

นักเทียบท่าเรียกใช้คอนเทนเนอร์นักเทียบท่าโดยเฉพาะ หากคุณกำลังเปรียบเทียบโดยตรงกับ Vagrant: มันเป็นโซลูชันเฉพาะเจาะจงมากขึ้น (สามารถเรียกใช้คอนเทนเนอร์ของนักเทียบท่าเท่านั้น) โซลูชันที่ยืดหยุ่นน้อยกว่า (ต้องใช้ Linux หรือ Linux โฮสต์ที่ไหนสักแห่ง) แน่นอนถ้าคุณกำลังพูดถึงการผลิตหรือ CI ไม่มีการเปรียบเทียบกับ Vagrant! Vagrant ไม่ได้อยู่ในสภาพแวดล้อมเหล่านี้ดังนั้นควรใช้ Docker

หากองค์กรของคุณทำงานเฉพาะคอนเทนเนอร์ Docker สำหรับทุกโครงการและมีผู้พัฒนาที่ทำงานบน Linux เท่านั้นก็ไม่เป็นไร Docker สามารถทำงานให้คุณได้อย่างแน่นอน!

ไม่เช่นนั้นฉันไม่เห็นประโยชน์ที่จะพยายามใช้ Docker เพียงอย่างเดียวเนื่องจากคุณสูญเสียสิ่งที่ Vagrant มอบให้ซึ่งมีผลประโยชน์ทางธุรกิจ / ผลผลิตจริง:

  • Vagrant สามารถเปิดตัว VirtualBox, VMware, AWS, OpenStack และอื่น ๆ ไม่สำคัญว่าคุณต้องการอะไร Vagrant สามารถเปิดตัวได้ หากคุณกำลังใช้ Docker, Vagrant สามารถติดตั้ง Docker ลงบนสิ่งเหล่านี้เพื่อให้คุณสามารถใช้พวกมันสำหรับวัตถุประสงค์นั้นได้

  • Vagrant เป็นกระบวนการทำงานเดียวสำหรับทุกโครงการของคุณ หรือวิธีอื่นก็เป็นเพียงสิ่งหนึ่งที่ผู้คนต้องเรียนรู้ที่จะทำโครงการไม่ว่าจะเป็นใน Docker container หรือไม่ ยกตัวอย่างเช่นหากในอนาคตผู้เข้าแข่งขันจะแข่งขันโดยตรงกับนักเทียบท่าก็จะสามารถใช้ Vagrant ได้เช่นกัน

  • Vagrant ทำงานบน Windows (กลับไปที่ XP), Mac (ย้อนกลับไปที่ 10.5) และ Linux (กลับไปที่เคอร์เนล 2.6) ในทั้งสามกรณีเวิร์กโฟลว์จะเหมือนกัน หากคุณใช้ Docker, Vagrant สามารถเปิดเครื่อง (VM หรือระยะไกล) ที่สามารถเรียกใช้ Docker บนทั้งสามระบบเหล่านี้

  • Vagrant รู้วิธีกำหนดค่าบางสิ่งขั้นสูงหรือไม่สำคัญเช่นเครือข่ายและโฟลเดอร์ที่ซิงค์ ตัวอย่างเช่น: Vagrant รู้วิธีแนบ IP แบบคงที่กับเครื่องหรือพอร์ตไปข้างหน้าและการกำหนดค่าจะเหมือนกันไม่ว่าคุณจะใช้ระบบใด (VirtualBox, VMware ฯลฯ ) สำหรับโฟลเดอร์ที่ซิงค์ Vagrant มีกลไกหลายอย่างเพื่อให้เครื่องของคุณ ไฟล์ไปยังเครื่องระยะไกล (โฟลเดอร์ที่ใช้ร่วมกัน VirtualBox, NFS, rsync, Samba [ปลั๊กอิน], ฯลฯ ) หากคุณใช้ Docker หรือแม้แต่ Docker ที่มี VM โดยไม่ต้องใช้ Vagrant คุณต้องทำสิ่งนี้ด้วยตนเอง

  • คนจรจัด 1.6 มีการสนับสนุนชั้นแรกสำหรับสภาพแวดล้อมการพัฒนานักเทียบท่าตาม สิ่งนี้จะไม่เปิดเครื่องเสมือนบน Linux และจะเปิดเครื่องเสมือนบน Mac และ Windows โดยอัตโนมัติ ผลลัพธ์ที่ได้คือการทำงานกับ Docker นั้นเหมือนกันในทุกแพลตฟอร์มในขณะที่ Vagrant ยังคงจัดการรายละเอียดที่น่าเบื่อของสิ่งต่าง ๆ เช่นเครือข่ายโฟลเดอร์ที่ซิงค์เป็นต้น

ในการจัดการกับข้อโต้แย้งที่เฉพาะเจาะจงที่ฉันเคยได้ยินเกี่ยวกับการใช้ Docker แทน Vagrant:

  • "มันเป็นชิ้นส่วนที่เคลื่อนไหวน้อยกว่า" - สามารถเป็นไปได้ถ้าคุณใช้ Docker โดยเฉพาะสำหรับทุกโครงการ ถึงอย่างนั้นมันยังคงมีความยืดหยุ่นสำหรับล็อคเกอร์ใน Docker หากคุณตัดสินใจที่จะไม่ใช้ Docker สำหรับโครงการใด ๆ ในอดีตปัจจุบันหรืออนาคตคุณจะมีชิ้นส่วนที่เคลื่อนไหวได้มากขึ้น หากคุณใช้ Vagrant คุณมีส่วนที่เคลื่อนไหวหนึ่งที่รองรับส่วนที่เหลือ

  • "มันเร็วกว่า!" - เมื่อคุณมีโฮสต์ที่สามารถใช้งานคอนเทนเนอร์ Linux ได้ Docker จะเร็วกว่าในการใช้งานคอนเทนเนอร์มากกว่าเครื่องเสมือนใด ๆ ที่จะเปิดตัว แต่การเปิดตัวเครื่องเสมือน (หรือเครื่องระยะไกล) เป็นค่าใช้จ่ายครั้งเดียว ตลอดทั้งวันผู้ใช้ Vagrant ส่วนใหญ่ไม่เคยทำลาย VM ของพวกเขา เป็นการเพิ่มประสิทธิภาพที่แปลกสำหรับสภาพแวดล้อมการพัฒนา ในการผลิตที่นักเทียบท่าส่องแสงจริง ๆ ฉันเข้าใจถึงความต้องการหมุนภาชนะบรรจุขึ้น / ลงอย่างรวดเร็ว

ฉันหวังว่าตอนนี้มันชัดเจนที่จะเห็นว่ามันเป็นเรื่องยากมากและฉันเชื่อว่าไม่ถูกต้องเพื่อเปรียบเทียบนักเทียบท่ากับคนจรจัด สำหรับสภาพแวดล้อมการพัฒนา Vagrant นั้นมีความเป็นนามธรรมมากกว่าทั่วไป นักเทียบท่า (และวิธีการต่าง ๆ ที่คุณสามารถทำให้มันเป็นเหมือน Vagrant ได้) เป็นกรณีการใช้งานเฉพาะของ Vagrant โดยไม่สนใจทุกสิ่งที่ Vagrant นำเสนอ

โดยสรุป: ในกรณีที่มีการใช้งานเฉพาะอย่างสูง Docker ย่อมเป็นสิ่งทดแทนที่เป็นไปได้สำหรับ Vagrant ในกรณีส่วนใหญ่จะใช้ไม่ได้ Vagrant ไม่ขัดขวางการใช้ Docker ของคุณ มันทำในสิ่งที่ทำได้เพื่อทำให้ประสบการณ์นั้นราบรื่นขึ้น หากคุณพบว่าสิ่งนี้ไม่เป็นความจริงฉันยินดีที่จะรับข้อเสนอแนะเพื่อปรับปรุงสิ่งต่าง ๆ เนื่องจากเป้าหมายของ Vagrant คือการทำงานได้ดีกับระบบใด ๆ

หวังว่านี่จะช่วยล้างสิ่งต่างๆ!


4
@JaredMarkell ผมคิดว่าบางทีเขาอาจจะกำลังมองหาบริการบนเว็บที่ช่วยให้เขาจัดการเครื่องจรจัดเขาเช่นProtobox
Ryan Kennedy

73
@Mitchell ฉันแค่อยากจะบอกว่าขอบคุณสำหรับการอธิบายในรายละเอียดดังกล่าว เห็นได้ชัดว่ามันเป็นไปไม่ได้สำหรับคุณที่จะมีวัตถุประสงค์อย่างสมบูรณ์ดังนั้นฉันขอขอบคุณที่คุณใช้เวลาอธิบายความแตกต่างและสถานการณ์ต่าง ๆ ที่พวกเขาสามารถนำมาใช้ ฉันคิดว่ามีความสับสนมากมายเกี่ยวกับเครื่องมือที่หลากหลายในวันนี้คือพวกเขาทับซ้อนกันมากและผู้คนจำนวนมากต้องการโซลูชันที่มีขนาดเดียวเหมาะกับทุกคนที่มีคนบอกพวกเขาว่าจะต้องทำอะไรและพวกเขาสามารถใช้งานได้ ความงามของคำตอบของคุณคือตอบคำถามพื้นฐาน: ฉันจะสร้างสภาพแวดล้อมที่แยกได้อย่างไร (ไม่คำนึงถึงเครื่องมือ)
Jordan

4
@JaredMarkell Docker มี REST API docs.docker.com/reference/api/docker_remote_api
Tarnay Kálmán

3
@ OğuzÇelikdemir Vagrant สามารถทำอะไรได้มากกว่านั้น แน่นอนถ้าคุณเตรียมเครื่องเสมือนเฉพาะสำหรับทุกโครงการสิ่งนี้จะคงอยู่ แต่ในระหว่างการพัฒนาฉันมักจะจบลงด้วยการเพิ่มบริการ / daemons / settings เพิ่มเติม (เช่นเมื่อฉันตัดสินใจใช้ RabbitMQ สำหรับโครงการระหว่างการพัฒนา) วิธีการของ VM อย่างแท้จริงนั้นจะต้องให้คุณเตรียมรูปภาพใหม่ด้วยการติดตั้งและกำหนดค่า RabbitMQ และบังคับให้นักพัฒนาเปลี่ยน VM เป็นใหม่นี้ สำหรับ Vagrant - ฉันกำลังเพิ่มบรรทัดที่เหมาะสมในการรวมตัวของคนจรจัดและนักพัฒนาทั้งหมดสามารถอัพเกรด VM ได้อย่างง่ายดาย (โดยใช้vagrant provision)
Tomasz Struczyński

5
(คุณหมายถึง "เปิดเผย" เผยให้เห็นสิ่งที่สำคัญไม่ได้ "ข้อจำกัดความรับผิดชอบ" ความรับผิดชอบต่อการปฏิเสธ: english.stackexchange.com/q/115850 )
Jerry101

1418

ฉันเป็นนักเขียน Docker

คำตอบสั้น ๆ คือถ้าคุณต้องการจัดการเครื่องคุณควรใช้ Vagrant และถ้าคุณต้องการสร้างและเรียกใช้สภาพแวดล้อมของแอปพลิเคชันคุณควรใช้ Docker

Vagrant เป็นเครื่องมือสำหรับจัดการเครื่องเสมือน นักเทียบท่าเป็นเครื่องมือสำหรับการสร้างและปรับใช้แอปพลิเคชันโดยการบรรจุลงในคอนเทนเนอร์น้ำหนักเบา คอนเทนเนอร์สามารถเก็บส่วนประกอบซอฟต์แวร์ใด ๆ ไว้พร้อมกับการพึ่งพา (executables, ไลบรารี, ไฟล์กำหนดค่า, ฯลฯ ) และดำเนินการในสภาพแวดล้อมรันไทม์ที่รับประกันและทำซ้ำได้ สิ่งนี้ทำให้การสร้างแอปของคุณนั้นง่ายมากและใช้งานได้ทุกที่ - บนแล็ปท็อปของคุณเพื่อทำการทดสอบแล้วบนเซิร์ฟเวอร์ที่แตกต่างกันสำหรับการปรับใช้แบบสดเป็นต้น

เป็นความเข้าใจผิดที่คุณสามารถใช้ Docker บน Linux ได้เท่านั้น มันไม่ถูกต้อง คุณยังสามารถติดตั้ง Docker บน Mac และ Windows เมื่อติดตั้งบน Mac Docker จะรวม Linux VM ขนาดเล็ก (25 MB บนดิสก์!) ซึ่งทำหน้าที่เป็น wrapper สำหรับคอนเทนเนอร์ของคุณ เมื่อติดตั้งแล้วนี่จะโปร่งใสอย่างสมบูรณ์ คุณสามารถใช้บรรทัดคำสั่ง Docker ได้ในวิธีเดียวกัน สิ่งนี้ให้สิ่งที่ดีที่สุดสำหรับคุณทั้งสองโลก: คุณสามารถทดสอบและพัฒนาแอปพลิเคชันของคุณโดยใช้คอนเทนเนอร์ซึ่งมีน้ำหนักเบามากง่ายต่อการทดสอบและเคลื่อนย้ายได้ง่าย (ดูตัวอย่างhttps://hub.docker.comสำหรับแชร์คอนเทนเนอร์ที่ใช้ซ้ำได้ด้วย ชุมชนนักเทียบท่า) และคุณไม่จำเป็นต้องกังวลเกี่ยวกับรายละเอียดเล็ก ๆ น้อย ๆ ของการจัดการเครื่องเสมือนซึ่งเป็นวิธีการสิ้นสุด

ในทางทฤษฎีมันเป็นไปได้ที่จะใช้ Vagrant เป็นเลเยอร์นามธรรมสำหรับนักเทียบท่า ฉันขอแนะนำสิ่งนี้ด้วยเหตุผลสองประการ:

  • อันดับแรก Vagrant ไม่ใช่สิ่งที่ดีสำหรับนักเทียบท่า Vagrant ถูกออกแบบมาเพื่อจัดการเครื่องเสมือน นักเทียบท่าถูกออกแบบมาเพื่อจัดการรันไทม์ของแอปพลิเคชัน ซึ่งหมายความว่านักออกแบบสามารถโต้ตอบกับแอปพลิเคชันได้หลากหลายยิ่งขึ้นและมีข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชันรันไทม์ สิ่งพื้นฐานใน Docker คือกระบวนการสตรีมล็อกตัวแปรสภาพแวดล้อมและลิงก์เครือข่ายระหว่างส่วนประกอบ ดั้งเดิมใน Vagrant คือเครื่องจักรอุปกรณ์บล็อกและปุ่ม ssh Vagrant ตั้งอยู่ในสแต็กที่ต่ำกว่าและวิธีเดียวที่มันสามารถโต้ตอบกับคอนเทนเนอร์ได้คือการแกล้งมันเป็นเพียงเครื่องจักรชนิดอื่นที่คุณสามารถ "บู๊ต" และ "ล็อคอิน" ดังนั้นคุณสามารถพิมพ์ "vagrant up" ด้วยปลั๊กอิน Docker และสิ่งที่จะเกิดขึ้น มันเป็นสิ่งที่ทดแทนความกว้างทั้งหมดของสิ่งที่นักเทียบท่าสามารถทำได้หรือไม่? ลองนักเทียบท่าพื้นเมืองสักสองสามวันแล้วดูเอง :)

  • ประการที่สองการโต้แย้งในการล็อค "ถ้าคุณใช้ Vagrant เป็นนามธรรมคุณจะไม่ถูกล็อคใน Docker!" จากมุมมองของ Vagrant ที่ออกแบบมาเพื่อจัดการเครื่องจักรสิ่งนี้เหมาะสมอย่างยิ่ง: ไม่ได้เป็นเพียงเครื่องจักรชนิดอื่นใช่ไหม เช่นเดียวกับ Amazon EC2 และ VMware เราต้องระวังไม่ผูกเครื่องมือการจัดเตรียมของเรากับผู้ขายรายใดรายหนึ่ง! สิ่งนี้จะสร้างการล็อคอิน - ดีกว่าที่จะสรุปได้ทั้งหมดกับ Vagrant ยกเว้นสิ่งนี้จะพลาดจุดเชื่อมต่อทั้งหมด นักเทียบท่าไม่ได้จัดเตรียมเครื่อง มันห่อใบสมัครของคุณใน runtime แบบพกพาน้ำหนักเบาซึ่งสามารถทิ้งได้ทุกที่

รันไทม์ใดที่คุณเลือกสำหรับแอปพลิเคชันของคุณไม่เกี่ยวกับวิธีการจัดเตรียมเครื่องของคุณ! ตัวอย่างเช่นมันค่อนข้างบ่อยในการปรับใช้แอพพลิเคชั่นให้กับเครื่องที่มีคนอื่นจัดเตรียมไว้ (เช่นอินสแตนซ์ EC2 ที่ปรับใช้โดยผู้ดูแลระบบของคุณอาจใช้ Vagrant) หรือกับเครื่องโลหะเปลือย ในทางกลับกันคุณอาจใช้ Vagrant ในการจัดหาเครื่องที่ไม่มีส่วนเกี่ยวข้องกับการพัฒนาแอปพลิเคชันของคุณตัวอย่างเช่นกล่อง Windows IIS ที่พร้อมใช้งานหรือบางอย่าง หรือคุณอาจใช้ Vagrant เพื่อจัดหาเครื่องจักรสำหรับโครงการที่ไม่ได้ใช้ Docker - บางทีพวกเขาอาจใช้ rubygems และ rvm ร่วมกันสำหรับการจัดการการพึ่งพาและการทดลองแบบ sandbox

โดยสรุป: Vagrant ใช้สำหรับจัดการเครื่องและ Docker ใช้สำหรับสร้างและเรียกใช้สภาพแวดล้อมของแอปพลิเคชัน


396
เพียงแค่ต้องการที่จะทราบว่าด้าน Vagrant ของคำตอบนี้ไม่ถูกต้อง Vagrant ไม่ได้มีไว้สำหรับจัดการเครื่องจักร Vagrant นั้นใช้สำหรับจัดการสภาพแวดล้อมการพัฒนา ข้อเท็จจริงที่ว่าคนเร่ร่อนหมุนจักรขึ้นเป็นประวัติศาสตร์ เวอร์ชั่นถัดไปของ Vagrant ได้รับการสนับสนุนชั้นหนึ่งเพื่อยกระดับสภาพแวดล้อมการพัฒนาโดยใช้ Docker ในฐานะผู้ให้บริการโดยตรงบนโฮสต์หรือ VM (Mac, Win) นอกจากนี้ยังสามารถหมุน LXC ดิบได้หากสิ่งที่คนต้องการ (อีกครั้งบนโฮสต์หรือ VM) Vagrant สนใจที่จะทำสิ่งที่ดีที่สุดในการสร้างสภาพแวดล้อมการพัฒนาแบบพกพาไม่ว่าจะเป็นการสร้าง VM หรือไม่ก็ตาม
Mitchell

7
@Davide รายละเอียดเพิ่มเติมนี้ครอบคลุมถึง: vagrantup.com/blog/…
Mitchell

48
"มันเป็นความเข้าใจผิดทั่วไปที่คุณสามารถใช้ Docker บน Linux ได้เท่านั้น" ในขณะที่ความจริงมันถูกต้องที่จะบอกว่าคุณสามารถใช้ Linux บน Docker ได้เท่านั้น ถ้าฉันต้องการตั้งค่านักวิ่งทดสอบที่ออกกำลังกายแอปพลิเคชันของฉันในการกำหนดค่า envionment ที่หลากหลาย (ฐานข้อมูลที่แตกต่างกัน, เวอร์ชัน php, แคชแบ็คเอนด์เป็นต้น) จากนั้นฉันสามารถทำได้อย่างง่ายดายด้วยคอนเทนเนอร์นักเทียบท่า แต่ฉันไม่เห็นว่าแอปพลิเคชันของฉันจะทำงานอย่างถูกต้องใน windows IIS env หรือบน BSD หรือ OSX
Mixologic

10
จุดแรกของคุณล้าสมัยตั้งแต่จรจัดได้ตัวในการสนับสนุนผู้ให้บริการสำหรับนักเทียบท่า: docs.vagrantup.com/v2/provisioning/docker.html
Alp

19
โพสต์ล้าสมัยแล้ว Vagrant สนับสนุน Docker ในฐานะผู้ให้บริการทันที และมีบางวิดีโอแสดงให้เห็นถึงวิธีการที่คุณสามารถใช้จรจัดและเทียบท่าในเวลาเดียวกันได้ด้วยบล็อก
sargas

86

ฉันนำหน้าคำตอบของฉันโดยยอมรับว่าฉันไม่มีประสบการณ์กับนักเทียบท่านอกจากผู้สังเกตการณ์ตัวยงของสิ่งที่ดูเหมือนว่าจะเป็นทางออกที่เรียบร้อยจริงๆที่ดึงดูดมาก

ฉันมีประสบการณ์จำนวนมากกับ Vagrant และสามารถแนะนำได้อย่างมาก แน่นอนว่ามันเป็นโซลูชั่นเฮฟวี่เวทมากขึ้นในแง่ของการเป็น VM ที่ใช้แทน LXC อย่างไรก็ตามฉันพบแล็ปท็อปที่เหมาะสม (RAM 8 GB, i5 / i7 CPU) ไม่มีปัญหาในการใช้ VM โดยใช้ Vagrant / VirtualBox ควบคู่ไปกับการพัฒนาเครื่องมือ

หนึ่งในสิ่งที่ยอดเยี่ยมที่สุดกับ Vagrant คือการรวมกับPuppet / Chef / shell script สำหรับการกำหนดค่าอัตโนมัติ หากคุณใช้หนึ่งในตัวเลือกเหล่านี้เพื่อกำหนดค่าสภาพแวดล้อมการผลิตของคุณคุณสามารถสร้างสภาพแวดล้อมการพัฒนาที่ใกล้เคียงกับที่คุณจะได้รับและนี่คือสิ่งที่คุณต้องการ

ข้อดีอีกอย่างของ Vagrant ก็คือคุณสามารถเวอร์ชั่น Vagrantfile ของคุณพร้อมกับรหัสแอปพลิเคชันของคุณ ซึ่งหมายความว่าทุกคนในทีมของคุณสามารถแชร์ไฟล์นี้และคุณรับประกันได้ว่าทุกคนทำงานกับการกำหนดค่าสภาพแวดล้อมเดียวกัน

ที่น่าสนใจ Vagrant และ Docker อาจให้บริการฟรี Vagrant สามารถขยายเพื่อรองรับผู้ให้บริการเวอร์ชวลไลเซชันต่าง ๆ และอาจเป็นไปได้ว่านักเทียบท่าเป็นหนึ่งในผู้ให้บริการดังกล่าวซึ่งจะได้รับการสนับสนุนในอนาคตอันใกล้ ดูhttps://github.com/dotcloud/docker/issues/404สำหรับการสนทนาล่าสุดในหัวข้อ


7
พวกผมออกใช้การทดลองให้บริการคนจรจัดสำหรับนักเทียบท่า: github.com/fgrehm/docker-provider
fgrehm

2
นักเทียบท่าไม่ใช่การจำลองเสมือน แต่เรียกใช้ระบบปฏิบัติการภายในคอนเทนเนอร์ของตัวเองโดยใช้โฮสต์เคอร์เนลเดียวกันไม่ใช่ผู้ให้บริการเช่นเดียวกับ VM อื่น ๆ ดังนั้นนักเทียบท่าได้รับการสนับสนุนโดย Vagrant แล้ว
Aftab Naveed

1
นักเทียบท่าคือการทำเวอร์ช่วลไลเซชั่นของระบบปฏิบัติการเองโดยปริยายนำฮาร์ดแวร์พื้นฐานมาใช้ซ้ำ มันเป็นระบบเสมือนจริงในขณะที่มันเป็นนามธรรมและแยกระบบไฟล์เครือข่ายและกระบวนการทำงานในภาชนะ
jose.angel.jimenez

63

พวกเขาเสริมมาก

ฉันได้ใช้การผสมผสานของ VirtualBox, Vagrant และ Docker สำหรับทุกโครงการของฉันเป็นเวลาหลายเดือนและรู้สึกถึงประโยชน์ดังต่อไปนี้

ใน Vagrant คุณสามารถทำได้อย่างสมบูรณ์ด้วยการจัดเตรียมแบบเดี่ยวของ Chef และสิ่งที่คุณต้องการในไฟล์ Vagrant ของคุณคือเตรียมเครื่องที่ใช้งานเชลล์สคริปต์ตัวเล็ก ๆ ตัวเดียวที่ติดตั้ง Docker ซึ่งหมายความว่าไฟล์ Vagrant ของฉันสำหรับทุกโครงการเกือบจะเหมือนกันและเรียบง่ายมาก

นี่คือไฟล์ Vagrantfile ทั่วไป

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "mark2"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  [3000, 5000, 2345, 15672, 5672, 15674, 27017, 28017, 9200, 9300, 11211, 55674, 61614, 55672, 5671, 61613].each do |p|
    config.vm.network :forwarded_port, guest: p, host: p
  end
  config.vm.network :private_network, ip: "192.168.56.20"
  config.vm.synced_folder ".", "/vagrant", :type => "nfs"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
  end
  # Bootstrap to Docker
  config.vm.provision :shell, path: "script/vagrant/bootstrap", :privileged => true
  # Build docker containers
  config.vm.provision :shell, path: "script/vagrant/docker_build", :privileged => true
  # Start containers
  # config.vm.provision :shell, path: "script/vagrant/docker_start", :privileged => true
end

ไฟล์ Bootstrap ที่ติดตั้ง docker มีลักษณะดังนี้

#!/usr/bin/env bash
echo 'vagrant  ALL= (ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
apt-get update -y
apt-get install htop -y
apt-get install linux-image-extra-`uname -r` -y
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install lxc-docker -y
apt-get install curl -y

ตอนนี้เพื่อรับบริการทั้งหมดที่ฉันต้องการใช้งานฉันมีสคริปต์ docker_start ที่ดูเหมือนบางอย่างเช่นนี้

#!/bin/bash
cd /vagrant
echo Starting required service containers
export HOST_NAME=192.168.56.20
# Start MongoDB
docker run --name=mongodb --detach=true --publish=27017:27017 --publish=28017:28017 dockerfile/mongodb
read -t5 -n1 -r -p "Waiting for mongodb to start..." key
# Start rabbitmq
docker run --name=rabbitmq --detach=true --publish=5671:5671 --publish=5672:5672 --publish=55672:55672 --publish=15672:15672 --publish=15674:15674 --publish=61613:61613 --env RABBITMQ_USER=guest --env RABBITMQ_PASS=guest rabbitmq
read -t5 -n1 -r -p "Waiting for rabbitmq to start..." key
# Start cache
docker run --name=memcached --detach=true --publish=11211:11211  ehazlett/memcached
read -t5 -n1 -r -p "Waiting for cache to start..." key
# Start elasticsearch
docker run --name=elasticsearch --detach=true --publish=9200:9200 --publish=9300:9300 dockerfile/elasticsearch
read -t5 -n1 -r -p "Waiting for elasticsearch to start..." key
echo "All services started"

ในตัวอย่างนี้ฉันใช้ MongoDB, Elastisearch, RabbitMQ และ Memcached

การกำหนดค่าโซโลที่ไม่ใช่นักเทียบท่าเชฟจะมีความซับซ้อนมากขึ้น

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

หากคุณสนใจฉันมีบทความรายละเอียดเพิ่มเติมเกี่ยวกับสภาพแวดล้อมการพัฒนาบนเว็บไซต์ของฉันเองที่

การใช้สภาพแวดล้อมการพัฒนา Vagrant / Docker


2
คุณทำ orchestration docker_start ทั้งหมดนั้น แต่ไม่ได้รบกวนการเชื่อมโยงคอนเทนเนอร์เข้าด้วยกัน คุณกำลังจะไปกับหมายเลขพอร์ตฮาร์ดโค้ดเพราะคุณใช้มันภายใต้ Vagrant?
WineSoaked

6
สวัสดี WineSoaked ตัวอย่างข้างต้นไม่แสดงคอนเทนเนอร์ที่ใช้บริการเหล่านั้นทั้งหมด หากคุณดูในโพสต์บล็อกที่กล่าวถึงมีสคริปต์สคริปต์ / คนจรจัด / docker_web ที่ไฟขึ้นภาชนะพัฒนาสำหรับโครงการ สิ่งนี้จะใช้ - ลิงก์ในคำสั่งเรียกใช้นักเทียบท่าและโครงการ Rails ใช้ตัวแปรสภาพแวดล้อมที่นักเชื่อมต่อฉีดเพื่อเชื่อมต่อกับบริการ
Mark Stratmann

1
ฉันเห็นศักยภาพการรวมผลิตภัณฑ์ทั้งสองเข้าด้วยกัน คนจรจัดเป็นสภาพแวดล้อมการทดสอบและนักเทียบท่าสำหรับห่อหุ้มแอพ ผสานทั้งสองอย่างคุณสามารถทดสอบแอปเดียวหรือทดสอบหน่วยใน escenarios จำนวนมาก ฉันคิดว่า "บริการทดสอบแพลตฟอร์ม" หลายแห่งใช้ Vagrant + Docker ในเวลาเดียวกัน
m3nda

8
"พวกเขามีอิสระมาก" - ทั้งสองมีอิสระที่จะใช้แน่นอน
Underyx

2
สวัสดี @koppor ฉันล่าสุดใช้เครื่องเทียบท่าประมาณสามเดือนที่ผ่านมาและยังไม่ได้กลับไปใช้อีก ปัญหาที่ฉันมีคือมันมีข้อผิดพลาดในการแชร์โฟลเดอร์จากโฮสต์โฮสต์ MAC ของฉันไปยัง VM ที่ทำงานนักเทียบท่าเมื่อใช้ไดรเวอร์ VMWare นี่หมายความว่าฉันไม่สามารถแก้ไขรหัสในเครื่องบน Mac และมีการเปลี่ยนแปลงที่แสดงในคอนเทนเนอร์นักเทียบท่า ฉันไม่ทราบว่าพวกเขาได้แก้ไขหรือยังเมื่อพวกเขาฉันจะเปลี่ยนไปใช้มันแน่นอน อย่างไรก็ตามฉันได้เปลี่ยน orchestration คอนเทนเนอร์ของฉันทั้งหมดเป็นนักเทียบท่าตั้งแต่เขียนคำตอบนี้
Mark Stratmann

53

Vagrant-lxcเป็นปลั๊กอินสำหรับ Vagrant ที่ให้คุณใช้ LXC เพื่อจัดเตรียม Vagrant มันไม่ได้มีคุณสมบัติทั้งหมดที่คนจรจัดเริ่มต้น VM (VirtualBox) มี แต่มันจะช่วยให้คุณมีความยืดหยุ่นมากขึ้นกว่าคอนเทนเนอร์นักเทียบท่า มีวิดีโอในลิงค์แสดงความสามารถที่คุ้มค่าแก่การดู


5
และนี่คือการเชื่อมโยงโดยตรงไปยังโครงการgithub.com/fgrehm/vagrant-lxc
gertas

46

ด้วย Vagrant ตอนนี้คุณสามารถมี Docker ในฐานะผู้ให้บริการได้แล้ว http://docs.vagrantup.com/v2/docker/ ผู้ให้บริการ Docker สามารถใช้แทน VirtualBox หรือ VMware

โปรดทราบว่าคุณยังสามารถใช้นักเทียบท่าสำหรับการจัดเตรียมกับ Vagrant สิ่งนี้แตกต่างจากการใช้ Docker เป็นผู้ให้บริการ http://docs.vagrantup.com/v2/provisioning/docker.html

ซึ่งหมายความว่าคุณสามารถแทนที่ChefหรือPuppetด้วย Docker คุณสามารถใช้ชุดค่าผสมเช่น Docker เป็น Provider (VM) กับ Chef เป็นตัวจัดเตรียม หรือคุณสามารถใช้ VirtualBox เป็นผู้ให้บริการและนักเทียบท่าเป็นผู้จัดสรร


23
โลกเพิ่งจะบ้า;) เราสามารถเรียกใช้คนจรจัดโดยใช้ผู้ให้บริการนักเทียบท่าเพื่อเรียกใช้ภาชนะบรรจุนักเทียบท่าภายในคนจรจัด
Andrzej Rehmann

@zainengineer ผู้ให้บริการ Docker สำหรับ Vagrant บน Windows ยังคงใช้ boot2docker หรือใช้ Docker Toolbox บางรุ่นหรือไม่
Derek Mahar

@zainengineer คุณมีลิงก์ไปยังตัวอย่างที่เป็นตัวอย่าง (ไม่ใช่เอกสารคนจรจัด) หรือไม่?
ลาด

16

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

ความคิดเป็นไปดังนี้:

  • ใช้องค์ประกอบของแอปพลิเคชัน Java / Go และสร้างเป็นคอนเทนเนอร์ (หมายเหตุไม่แน่ใจว่าควรสร้างแอปในคอนเทนเนอร์หรือบิวด์แล้วติดตั้งลงในคอนเทนเนอร์)
  • ส่งมอบคอนเทนเนอร์ไปยัง Vagrant VM
  • ทำซ้ำขั้นตอนนี้สำหรับองค์ประกอบแอปพลิเคชันทั้งหมด
  • ทำซ้ำในส่วนที่จะใช้รหัส
  • ทดสอบกลไกการส่งมอบอย่างต่อเนื่องไปยัง VM ที่จัดการโดย Vagrant
  • สลีปรู้ได้ดีว่าถึงเวลาที่ต้องนำคอนเทนเนอร์ไปใช้งานการทดสอบการรวมระบบนั้นเกิดขึ้นอย่างต่อเนื่องมากกว่าในตอนก่อนนักเทียบท่า

นี่น่าจะเป็นส่วนขยายเชิงตรรกะของคำแถลงของมิตเชลล์ที่ว่า Vagrant นั้นมีไว้สำหรับการพัฒนาร่วมกับฟาร์ลี่ย์ / ฮับเบิลส์ที่คิดในการจัดส่งต่อเนื่อง ถ้าฉันในฐานะนักพัฒนาซอฟต์แวร์สามารถย่อความคิดเห็นย้อนกลับในการทดสอบการรวมและการส่งแอปพลิเคชันคุณภาพที่สูงขึ้นและสภาพแวดล้อมการทำงานที่ดีขึ้นจะตามมา

ความจริงที่ว่าในฐานะนักพัฒนาฉันส่งมอบคอนเทนเนอร์ไปยัง VM อย่างต่อเนื่องและสม่ำเสมอและทดสอบแอพพลิเคชั่นแบบองค์รวมมากขึ้นนั่นหมายความว่าการเผยแพร่การผลิตจะง่ายขึ้นอีก

ดังนั้นฉันจึงเห็นว่า Vagrant กำลังพัฒนาเพื่อใช้ประโยชน์จากผลลัพธ์ที่ยอดเยี่ยมบางส่วนที่นักเทียบท่าจะต้องมีสำหรับการปรับใช้แอป


คุณมีโอกาสที่จะโพสต์บล็อกเกี่ยวกับเรื่องนี้หรือไม่? เกือบสองปีแล้วมันเกิดขึ้นได้อย่างไร ยังคงใช้คนเร่ร่อนกับนักเทียบท่าหรือเพียงแค่นักเทียบท่าและนักเทียบท่าหมัด / เครื่อง?
Andrzej Rehmann

บริษัท ที่ฉันทำงานอยู่นั้นถูกซื้อมาและพวกเขาก็ลบเนื้อหาทั้งหมดของฉัน @Hoto คำตอบสั้น ๆ คือฉันใช้นักเทียบท่าที่บ้านสำหรับโครงการสัตว์เลี้ยงของฉัน ที่ทำงานฉันเป็น <gulp> ผู้จัดการ </gulp> และไม่ได้ทำอะไรมากนัก เราไม่มีแผนในการใช้นักเทียบท่าดังนั้นเครื่องมือของเราโดยทั่วไปจะเป็นคนพเนจร
Boyd Hemphill

10

นักเทียบท่าแน่นอนสำหรับผู้ชนะ!

ดังที่คุณอาจทราบว่า Vagrant ใช้สำหรับการจัดการเครื่องเสมือนในขณะที่ Docker ใช้สำหรับการจัดการคอนเทนเนอร์ซอฟต์แวร์ หากคุณไม่ทราบถึงความแตกต่างนี่คือ: คอนเทนเนอร์ซอฟต์แวร์สามารถแชร์เครื่องและเคอร์เนลเดียวกันกับคอนเทนเนอร์ซอฟต์แวร์อื่น การใช้ภาชนะบรรจุที่คุณประหยัดเงินเพราะคุณไม่ต้องเสียทรัพยากรในระบบปฏิบัติการหลายระบบ (เมล็ด) คุณสามารถบรรจุซอฟต์แวร์ได้มากขึ้นต่อเซิร์ฟเวอร์โดยรักษาระดับการแยกที่ดี

แน่นอนว่าเป็นวินัยใหม่ในการดูแลกับ pitfals และความท้าทายของตัวเอง

ไปที่ Docker Swarm หากความต้องการของคุณข้ามขีด จำกัด ของทรัพยากรเครื่องเดียว


8

มีบทความให้ข้อมูลจริงๆในนิตยสาร Oracle Java จริงเกี่ยวกับการใช้ Docker ร่วมกับ Vagrant (และ Puppet):

ข้อสรุป

คอนเทนเนอร์น้ำหนักเบาของนักเทียบท่านั้นเร็วกว่าเมื่อเทียบกับ VMs แบบคลาสสิกและได้รับความนิยมในหมู่นักพัฒนาและเป็นส่วนหนึ่งของโครงการ CD และ DevOps หากวัตถุประสงค์ของคุณคือการแยก Docker เป็นตัวเลือกที่ยอดเยี่ยม Vagrant เป็นผู้จัดการ VM ที่ช่วยให้คุณสามารถกำหนดค่าสคริปต์ของแต่ละ VMs รวมถึงการจัดเตรียม อย่างไรก็ตามมันเป็นเพียงการพึ่งพา VM ขึ้นอยู่กับ VirtualBox (หรือผู้จัดการ VM อื่น) ที่มีค่าใช้จ่ายที่ค่อนข้างใหญ่ มันต้องการให้คุณมีฮาร์ดไดรฟ์ที่ไม่ได้ใช้งานซึ่งอาจมีขนาดใหญ่ใช้ RAM มากและประสิทธิภาพอาจไม่ดีพอ นักเทียบท่าใช้กลุ่มเคอร์เนลและการแยกเนมสเปซผ่าน LXC ซึ่งหมายความว่าคุณกำลังใช้เคอร์เนลเดียวกันกับโฮสต์และระบบ ile เดียวกัน คนเร่ร่อนเป็นระดับเหนือนักเทียบท่าในแง่ของความเป็นนามธรรมดังนั้นพวกมันจึงไม่สามารถเทียบเคียงได้ เครื่องมือการจัดการการกำหนดค่าเช่น Puppet ใช้กันอย่างแพร่หลายสำหรับการจัดเตรียมสภาพแวดล้อมเป้าหมาย การนำโซลูชั่นที่ใช้หุ่นกระบอกกลับมาใช้ใหม่ได้ง่ายด้วยนักเทียบท่า คุณยังสามารถแบ่งโซลูชันของคุณได้ดังนั้นโครงสร้างพื้นฐานจะถูกจัดเตรียมด้วย Puppet มิดเดิลแวร์, แอพพลิเคชั่นทางธุรกิจ, หรือทั้งคู่ได้รับการจัดเตรียมด้วย Docker; และนักเทียบท่าถูกห่อโดย Vagrant ด้วยเครื่องมือที่หลากหลายนี้คุณสามารถทำสิ่งที่ดีที่สุดสำหรับสถานการณ์ของคุณ

วิธีการสร้างใช้งานและดัดแปลงคอนเทนเนอร์ Docker ใน DevOps http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0


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