Soru Yalıtılmış bir ortam yaratmak için Vagrant veya Docker kullanmalı mıyım? [kapalı]


Ubuntu'yu geliştirme ve dağıtım için kullanıyorum ve izole bir ortam yaratma ihtiyacım var.

Bu amaçla ya Vagrant ya da Docker'ı düşünüyorum. Artıları ve eksileri nelerdir veya bu çözümler nasıl karşılaştırılır?


1888
2018-05-20 10:05


Menşei


Her ikisi de şu anda birleştirilebilir: docs.vagrantup.com/v2/provisioning/docker.html - Alp
Yapabilir miyiz bunu silmeyinmillet? Belki de konu dışı ve olabilir kapalıAncak, her iki aracın (ve 90k görüşlerinin) yazarlarından gelen uzun cevaplarla, bu değerlidir ve silinmeyi hak etmemektedir. - Jeremy
Sorunuz, yazarların ikisinin de iki hizmete cevap vermesini sağlayacak kadar şanslı: Mitchell ve Solomon Hykes - itsazzad


Cevaplar:


Amacınız tecritse, bence Docker senin istediğin gibi.

Vagrant sanal makine yöneticisidir. Sanal makine yapılandırmasının yanı sıra yetkilendirmeyi de betimlemenize izin verir. Bununla birlikte, hala bağlı bir sanal makine VirtualBox (ya da başkaları) büyük bir yük ile. Büyük olabilen bir sabit sürücü dosyanız olmasını gerektirir, çok miktarda ram gerektirir ve performans çok iyi olmayabilir.

Docker, diğer taraftan çekirdek gruplarını ve ad alanlarını kullanıyor LXC. Bu, ana bilgisayar ve aynı dosya sistemi ile aynı çekirdeği kullandığınız anlamına gelir. Dockerfile ile docker build Kapsayıcınızın temel hazırlığını ve yapılandırmasını yönetmek için komut. Bir örneğiniz var docs.docker.com Dockerfile nasıl yapılır; çok sezgisel.

Vagrant'ı kullanmak isteyebilmenizin tek nedeni, Ubuntu kutunuzda BSD, Windows veya diğer Linux dışı geliştirmeler yapmanız gerektiğidir. Aksi takdirde, Docker için gidin.


1044
2018-05-26 16:46



Maalesef henüz değil. Eğer 32 bitlik bir sistemdeyseniz, docker'ı çalıştırmak için 64 bitlik bir konuk sistemine sahip bir VM'ye ihtiyacınız olacaktır. Ancak, go1.1 ile 32 bit desteği daha iyi olur ve docker yakında 32 bit kemeri destekleyebilir. - creack
"Mac, Windows ve bazı Linux dağıtımları şu anda Docker'ı doğal olarak çalıştıramaz, bu yüzden bir Ubuntu sanal makinesi kurmanıza ve bunun içinde Docker'ı çalıştırmanıza yardımcı oluyoruz". Öyleyse, bir ana Linux dağıtımında değilseniz, uygulamanız bir VM içinde çalışacak docker içinde çalışacaktır. - aleemb
Bu, Mac ve Windows için doğrudur, ancak docker 0.7'den beri herhangi bir linux dağıtıcısı düzgün çalışıyor. Eğer çalışmayan birini biliyorsanız, lütfen bana bildirin. Ayrıca, bir Mac veya Windows yığınınız olmadığı sürece (ki bu mümkün değil ama olabilir), Docker'ı herhangi bir yerde ancak linux üzerinde çalıştırmak istemezsiniz. Docker istemcisi Mac'te iyi çalışıyor, yakında BSD üzerinde çalışmalı ve daemon sonunda BSD, Solaris ve Mac'i destekleyecektir. - creack
Birisi bu yorumları okursa, Docker'ın sadece 12 gün önce ver1.0'a çarptığını bilmelisiniz (blog.docker.com/2014/06/its-here-docker-1-0) ve bir çok farklı platformlar artık kararlı ve destekleniyor (docs.docker.com/installation) - JorgeArtware
vagrant LXC ve docker tedarikçileri var. Ancak - Vagrant ve docker temelde farklı şeylerdir. Vagrant tamamen geliştirme ortamları içindir, docker sadece üretim ve sadece Linux içindir. - Dannyboy


Yasal Uyarı: Vagrant'ı yazdım! Fakat Vagrant'ı yazdığım için, zamanımın çoğunu Docker gibi bir yazılım içeren DevOps dünyasında geçiriyorum. Vagrant'ı kullanan birçok firma ile çalışıyorum ve birçok Docker kullanıyor ve iki etkileşimin nasıl olduğunu görüyorum.

Çok fazla konuşmadan önce, doğrudan bir cevap: özel senaryonuzda (tek başına çalışarak, Linux üzerinde çalışarak, yapımda Docker kullanarak), Docker ile tek başına uğraşabilir ve işleri basitleştirebilirsiniz. Diğer birçok senaryoda (daha fazla tartışacağım), o kadar kolay değil.

Vagrant'ı Docker ile doğrudan karşılaştırmak doğru değildir. Bazı senaryolarda, örtüşüyorlar ve büyük çoğunlukta değiller. Aslında, daha uygun karşılaştırma, Boot2Docker (Docker'ı çalıştırabilecek minimum işletim sistemi) gibi bir şeyle karşılaştırıldığında Vagrant olacaktır. Vagrant, soyutlama açısından Docker'ın üstünde bir düzeydir, bu yüzden çoğu durumda adil bir karşılaştırma değildir.

Vagrant, geliştirme amacıyla uygulamalar / hizmetler çalıştırmak için bir şeyler başlattı. Bu VirtualBox, VMware'de olabilir. AWS, OpenStack gibi uzak olabilir. Bunların içinde kapsayıcılar kullanırsanız, Vagrant ilgilenmez ve onu kucaklar: örneğin Docker kapsayıcılarını otomatik olarak yükleyebilir, aşağı çekebilir, yapılandırabilir ve çalıştırabilir. Vagrant 1.6 ile Vagrant'ın docker tabanlı geliştirme ortamlarıve Docker'ı Linux, Mac ve Windows'daki Vagrant ile aynı iş akışına sahip olarak destekler. Vagrant Docker'ı burada değiştirmeye çalışmıyor, Docker uygulamalarını kucaklıyor.

Docker özel olarak Docker konteynerlerini çalıştırıyor. Doğrudan doğrudan Vagrant ile karşılaştırıyorsanız: bu özellikle daha spesifiktir (yalnızca Docker konteynerlerini çalıştırabilir), daha az esnek (bir yerde Linux veya Linux host gerektirir) çözümdür. Tabii ki üretimden mi yoksa CI'den bahsediyorsan, Vagrant ile kıyaslanamaz! Vagrant bu ortamlarda yaşamaz ve bu yüzden Docker kullanılmalıdır.

Kuruluşunuz tüm projeleri için yalnızca Docker konteynerleri çalıştırıyorsa ve yalnızca Linux üzerinde çalışan geliştiriciler varsa, o zaman Docker kesinlikle sizin için çalışabilir!

Aksi takdirde, Docker'ı tek başına kullanmanın bir faydasını görmüyorum, çünkü Vagrant'ın sunması gereken çok şey kaybediyorsunuz, ki bu da gerçek iş / verimlilik avantajlarına sahip:

  • Vagrant, VirtualBox, VMware, AWS, OpenStack vb. Makineleri çalıştırabilir. Ne ihtiyacın olduğu önemli değil, Vagrant başlatabilir. Docker kullanıyorsanız, Vagrant Docker'ı bunlardan herhangi birine yükleyebilir, böylece bunları bu amaçla kullanabilirsiniz.

  • Vagrant tüm projeleriniz için tek bir iş akışıdır. Ya da başka bir şekilde söylemek gerekirse, insanların bir Docker konteynırında olup olmadığını bir projeyi yürütmeyi öğrenmeleri gereken tek şey. Örneğin, gelecekte bir yarışmacı Docker ile doğrudan rekabet ederse, Vagrant da bunu yönetebilir.

  • Vagrant, Windows (XP'ye), Mac (10.5'e geri) ve Linux (çekirdek 2.6'ya geri) çalışır. Her üç durumda da iş akışı aynıdır. Docker kullanıyorsanız, Vagrant bu sistemlerin üçünde Docker'ı çalıştırabilen bir makineyi (VM veya uzaktan) çalıştırabilir.

  • Vagrant, ağ oluşturma ve klasörleri senkronize etme gibi bazı gelişmiş veya önemsiz şeyleri nasıl yapılandıracağını bilir. Örneğin: Vagrant, bir makineye statik IP bağlamayı veya bağlantı noktalarını nasıl yönlendireceğini bilir ve hangi sistemi kullanırsanız kullanın (VirtualBox, VMware, vb.) Yapılandırma aynıdır. Senkronize edilmiş klasörler için Vagrant, yerel ağınızı almak için birden fazla mekanizma sağlar. uzak makineye dosyalar (VirtualBox paylaşımlı klasörler, NFS, rsync, Samba [eklenti], vb.). Docker, hatta Vagrant olmadan bir VM ile Docker bile kullanıyorsanız, bunu elle yapmanız gerekecek veya bu durumda Vagrant'ı yeniden icat etmek zorunda kalacaklar.

  • Vagrant 1.6 için birinci sınıf destek docker tabanlı geliştirme ortamları. Bu, Linux'ta sanal bir makine başlatmayacak ve Mac ve Windows'ta otomatik olarak bir sanal makine başlatacak. Sonuç olarak Docker ile çalışmak tüm platformlarda tekdüze iken, Vagrant hala ağ oluşturma, senkronize edilmiş klasörler vb. Şeylerin sıkıcı ayrıntılarını ele alıyor.

Vagrant yerine Docker kullanmanın lehine duyduğum belirli karşı argümanları ele almak için:

  • "Daha az hareketli parçalar" - Evet, her proje için sadece Docker kullanıyorsan, olabilir. O zaman bile, Docker kilidi için esneklikten ödün veriyor. Docker'ı geçmiş, şimdiki veya gelecekteki herhangi bir proje için kullanmayacağınıza karar verirseniz, daha fazla hareketli bölümünüz olur. Vagrant'ı kullanmış olsaydın, gerisini destekleyen o hareketli bir parçan var.

  • "Bu daha hızlı!" - Linux konteynırlarını çalıştırabilen bir sunucuya sahip olduğunuzda, Docker herhangi bir sanal makinenin piyasaya sürüleceğinden çok daha hızlı bir konteyner çalıştırıyor. Ancak bir sanal makine (ya da uzak makine) başlatmak tek seferlik bir maliyettir. Gün boyunca, çoğu Vagrant kullanıcısı asla VM'lerini yok etmiyor. Geliştirme ortamları için garip bir optimizasyon. Docker'ın gerçekten ışıldadığı üretimde, konteynerleri hızla yukarı / aşağı çevirme ihtiyacını anlıyorum.

Umarım şimdi bunun çok zor olduğunu görmemiz açıktır ve Docker'ı Vagrant ile karşılaştırmak için doğru olmadığına inanıyorum. Devasa ortamlar için, Vagrant daha soyut, daha genel. Docker (ve Vagrant gibi davrandığın çeşitli şekilleri) Vagrant'ın sunduğu diğer her şeyi görmezden gelerek, Vagrant'ın özel bir durumudur.

Sonuç olarak: son derece özel kullanım durumlarında, Docker kesinlikle Vagrant için olası bir yedek. Çoğu kullanımda, bu değildir. Vagrant Docker kullanımını engellemez; Aslında bu deneyimi daha sorunsuz hale getirmek için ne yapabilir. Bunun doğru olmadığını düşünüyorsanız, bir şeyleri geliştirmek için önerilerde bulunmaktan mutluluk duyarım, çünkü Vagrant'ın hedefi herhangi bir sistemle eşit derecede iyi çalışmaktır.

Umarım bu şeyleri temizler!


2173
2018-01-23 16:55



@JaredMarkell Sanırım belki de onun gibi Vagrant makinelerini yönetmesine izin veren web tabanlı bir servis arıyor. Protobox. - Ryan Kennedy
@Mitchell Sadece bunu ayrıntılı olarak açıkladığınız için teşekkür etmek istedim. Açıkçası, tamamen objektif olmanız imkansızdır, bu yüzden kullanabildikleri nüansları ve çeşitli durumları açıklamak için zaman ayırdığınız için teşekkür ederim. Bugün çeşitli araçların etrafındaki karışıklığın çok fazla üst üste geldiği ve çoğu insanın onlara ne yapmaları gerektiğini söyleyeceği ve uygulayabileceği tek boyutlu bir çözüm istediği düşünülüyor. Cevabınızın güzelliği, altta yatan soruya cevap vermesidir: yalıtılmış bir çevreyi nasıl oluşturabilirim? (araçlardan bağımsız olarak). - Jordan
@JaredMarkell Docker bir REST API'sine sahip docs.docker.com/reference/api/docker_remote_api - Tarnay Kálmán
@ OğuzÇelikdemir Vagrant bundan daha fazlasını yapabilir. Elbette, her proje için belirli bir sanal makine hazırlarsanız, bu sürecektir. Ancak, geliştirme sırasında genellikle daha fazla hizmet / katalog / ayar eklemeye son veriyorum (ör. Geliştirme sırasında bir proje için RabbitMQ kullanmaya karar verdiğimde). Tamamen VM yaklaşımı, RabbitMQ yüklü ve yapılandırılmış yeni bir görüntü oluşturmanızı ve geliştiricilerini VM'lerini bu yeni olana değiştirmeye zorlar. Vagrant için - Ben serseri konfgürasyonda uygun satırları ekliyorum ve tüm geliştiriciler kolayca VM'lerini yükseltebilirler vagrant provision). - Tomasz Struczyński
(Sorumluluğu reddeden, "feragatname" değil, önemli bir şeyi açığa vuran "ifşa" demek istiyorsunuz: english.stackexchange.com/q/115850) - Jerry101


Ben Docker'ın yazarıyım.

Kısa cevap, makineleri yönetmek istiyorsanız, Vagrant'ı kullanmanız gerektiğidir. Uygulama ortamları oluşturmak ve çalıştırmak istiyorsanız, Docker kullanmalısınız.

Vagrant sanal makineleri yönetmek için bir araçtır. Docker, uygulamalarını hafif konteynerlere paketleyerek uygulama ve uygulama için bir araçtır. Bir kapsayıcı, hemen hemen tüm yazılım bileşenlerini bağımlılıkları (yürütülebilir dosyalar, kütüphaneler, yapılandırma dosyaları, vb.) İle birlikte tutabilir ve garantili ve tekrarlanabilir bir çalışma ortamı ortamında yürütebilir. Bu, uygulamanızı bir kez oluşturup herhangi bir yere dağıttığınızı - dizüstü bilgisayarınızı test etmek için, daha sonra da canlı dağıtım için farklı sunucularda - çok kolaylaştırır.

Docker'ı sadece Linux'ta kullanabileceğiniz yaygın bir yanlış anlama. Bu yanlış; Ayrıca Docker'ı Mac'e yükleyebilir ve Windows desteği devam etmektedir. Mac'e yüklendiğinde, Docker, kapsayıcınız için bir sarıcı görevi gören küçük bir Linux VM (diskte 25 MB!) Biriktirir. Kurulduktan sonra bu tamamen şeffaftır; Docker komut satırını tam olarak aynı şekilde kullanabilirsiniz. Bu, size her iki dünyanın da en iyisini sunar: Uygulamanızı test etmek ve geliştirmek için çok hafif, kolay test edilebilen ve kolay taşınabilen konteynerler kullanarak test edebilirsiniz. https://hub.docker.com Yeniden kullanılabilir kapsayıcıları Docker topluluğuyla paylaşmak için) ve sanal makineleri yönetmek için en ufak detaylar hakkında endişelenmenize gerek yok;

Teoride, Vagrant'ı Docker için bir soyutlama katmanı olarak kullanmak mümkündür. Buna iki nedenden dolayı tavsiye ediyorum:

  • İlk olarak, Vagrant Docker için iyi bir soyutlama değil. Vagrant sanal makineleri yönetmek için tasarlanmıştır. Docker, bir uygulama çalışma zamanını yönetmek için tasarlanmıştır. Bu, Docker'ın tasarım gereği bir uygulama ile daha zengin yollarla etkileşimde bulunabileceği ve uygulama çalışma zamanı hakkında daha fazla bilgiye sahip olabileceği anlamına gelir. Docker'daki ilkel değerler süreçler, günlük akışları, ortam değişkenleri ve bileşenler arasındaki ağ bağlantılarıdır. Vagrant'taki ilkel makineler makineler, blok cihazları ve ssh anahtarlarıdır. Vagrant sadece yığında daha az oturur ve bir konteynırla etkileşime girebilmesinin tek yolu, sadece başka bir tür makineyi taklit ederek, "önyükleme" ve "giriş yap" yapabilmenizdir. Yani, bir Docker eklentisi ile "vagrant up" yazabilirsiniz ve güzel bir şey olacak. Docker'ın yapabileceklerinin tam genişliğinin bir parçası mı? Birkaç günlüğüne yerli Docker'ı dene ve kendiniz görün :)

  • İkincisi, kilitleme argümanı. “Eğer Vagrant'ı bir soyutlama olarak kullanırsanız, Docker'a kilitlenmeyeceksiniz!”. Makineyi yönetmek için tasarlanan Vagrant'ın bakış açısından, bu mükemmel bir anlam ifade ediyor: konteynırlar başka bir tür makine değil midir? Tıpkı Amazon EC2 ve VMware gibi, tedarik araçlarımızı belirli bir satıcıya bağlamamak için dikkatli olmalıyız! Bu, Lock-in yaratır - Vagrant ile hepsini soyutlamak için daha iyi. Bunun dışında Docker'ın noktasını tamamen özlüyor. Docker makineleri tedarik etmiyor; Uygulamanızı, herhangi bir yere bırakılabilen hafif taşınabilir bir çalışma zamanında tamamlar.

Uygulamanız için hangi çalışma zamanını seçtiyseniz, makinelerinizi nasıl hazırladığınızla ilgili bir şey yok! Örneğin, uygulamaların başkası tarafından sağlanan makinelere (örneğin sistem yöneticiniz tarafından dağıtılan bir EC2 örneğini, belki Vagrant'ı kullanarak) veya Vagrant'ın hiçbir şekilde tedarik edemeyeceği çıplak metal makinelerine dağıtmak oldukça sık görülür. Tersine, Vagrant'ı, uygulamanızı geliştirmekle ilgisi olmayan makineleri tedarik etmek için kullanabilirsiniz - örneğin kullanıma hazır bir Windows IIS kutusu veya bir şey. Ya da Dograder'ı kullanmayan makineler için makineleri tedarik etmek için Vagrant'ı kullanabilirsiniz - belki de örneğin bağımlılık yönetimi ve kum havuzu için rubygems ve rvm kombinasyonunu kullanırlar.

Özetle: Vagrant makineleri yönetmek içindir ve Docker uygulama ortamları oluşturmak ve çalıştırmak içindir.


1282
2018-03-13 06:16



Sadece bu cevabın Vagrant yönlerinin yanlış olduğunu belirtmek istedim. Vagrant makineleri yönetmek için değil, Vagrant geliştirme ortamlarını yönetmek içindir. Vagrant makinelerini çalıştırması çoğunlukla tarihi. Vagrant'ın bir sonraki sürümü, Docker'ı doğrudan sunucuda veya herhangi bir VM'de (Mac, Win) bir sağlayıcı olarak kullanarak devasa ortamı döndürmek için birinci sınıf desteğe sahiptir. Birisi isterse (ev sahibi veya sanal makinede), yine de ham LXC'yi hızlandırabilir. Vagrant, bir VM oluşturma veya oluşturma anlamında, taşınabilir bir geliştirme ortamı oluşturmak için en iyi olanı yapmakla ilgilenir. - Mitchell
@Mitchell - Bu ifadede daha fazla detay veren bazı beta dokümanlarını işaret edebilir misiniz? Onunla çok ilgileniyorum. - Davide
“Docker'ı sadece Linux'ta kullanabileceğiniz yaygın bir yanlış anlama” Bu doğru olsa da, sadece Docker üzerinde Linux kullanabileceğinizi söylemek doğru. Uygulamamı çok çeşitli yapılandırma yapılandırmalarında (farklı veri tabanları, php sürümleri, önbelleğe alma arka planları vb.) Çalıştıran bir test koşucusu kurmak istersem, bunu docker konteynerleri ile kolayca yapabilirim. Ancak, uygulamamın windows IIS env'de veya BSD veya OSX'te düzgün çalışıp çalışmadığını göremiyorum. - Mixologic
Vagrant docker için yerleşik destek sağladığından beri ilk noktanız geçerliliğini yitirdi: docs.vagrantup.com/v2/provisioning/docker.html - Alp
Gönderi modası geçmiş. Vagrant, Docker'ı şu anda bir sağlayıcı olarak destekliyor. Ve Vagrant ve Docker’ı nasıl kullanabileceklerini gösteren bazı videolar var. Blog. - sargas


Yanıtımı, Docker'la hiçbir tecrübem olmadığını kabul ederek, çok fazla çekişe sahip olan gerçekten temiz bir çözümün neye benzediğini merak eden bir gözlemci olarak görüyorum.

Vagrant ile iyi bir deneyimim var ve kesinlikle tavsiye ederim. LXC tabanlı olmak yerine VM tabanlı olması açısından kesinlikle daha ağır bir çözüm. Ancak, iyi bir dizüstü bilgisayar (8 GB RAM, i5 / i7 CPU) geliştirme aracı ile birlikte Vagrant / VirtualBox kullanarak bir VM çalıştıran bir sorun bulunamamıştır.

Vagrant ile gerçekten harika şeylerden biri de Kukla/Şefkonfigürasyonu otomatikleştirmek için kabuk / kabuk betikleri. Üretim ortamınızı yapılandırmak için bu seçeneklerden birini kullanıyorsanız, alacağınız kadar özdeş olan bir geliştirme ortamı oluşturabilirsiniz ve bu tam olarak istediğiniz gibi olabilir.

Vagrant ile diğer harika şey, Vagrantfile'ınızı uygulama kodunuzla birlikte yayınlayabilmenizdir. Bu, ekibinizdeki herkesin bu dosyayı paylaşabileceği ve herkesin aynı çevre yapılandırmasıyla çalıştığını garanti ettiğiniz anlamına gelir.

İlginçtir, Vagrant ve Docker aslında ücretsiz olabilir. Vagrant, farklı sanallaştırma sağlayıcılarını desteklemek için genişletilebilir ve Docker'ın yakın gelecekte destek alan bir sağlayıcı olması olası olabilir. Görmek https://github.com/dotcloud/docker/issues/404 konuyla ilgili son tartışmalar için.


73
2018-06-25 21:33



Çocuklar, deneysel docker için serseri sağlayıcı: github.com/fgrehm/docker-provider. - fgrehm
Docker, sanallaştırma değil, aynı işletim sistemi çekirdeğini kullanarak kendi işletim sistemi içinde bir işletim sistemi çalıştırmak, diğer VM'ler gibi bir sağlayıcı değil, bu yüzden dolandırıcı zaten Vagrant tarafından destekleniyor. - Aftab Naveed
Docker, temel donanımları dolaylı olarak yeniden kullanmak için işletim sisteminin kendisinin sanallaştırılmasıdır. Dosya sistemi, ağ iletişimi ve bir kapsayıcıda çalışan süreçleri soyutladığı ve izole ettiği sanallaştırmadır. - jose.angel.jimenez


Çok fazla tamamlayıcılar.

Birkaç ay boyunca tüm projelerim için VirtualBox, Vagrant ve Docker'ın bir kombinasyonunu kullanıyorum ve aşağıdaki faydaları kuvvetle hissettim.

Vagrant'ta, herhangi bir Chef solo provizyonuna tamamen sahip olabilirsiniz ve yapmanız gereken tüm vagrant dosyanıza ihtiyacınız olan şey, docker'ı yükleyen tek bir küçük kabuk betiği çalıştıran bir makine hazırlamaktır. Bu, her proje için benim Vagrantfiles neredeyse aynı ve çok basit olduğu anlamına gelir.

İşte tipik bir 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

Docker'ı yükleyen Bootstrap dosyası şöyle görünüyor:

#!/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

Şimdi koşmaya ihtiyacım olan tüm hizmetleri almak için böyle bir şeye benzeyen bir docker_start betiğine sahibim

#!/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"

Bu örnekte MongoDB, Elastisearch, RabbitMQ ve Memcached kullanıyorum

Bir itici olmayan Şef solo konfigürasyonu önemli ölçüde daha karmaşık olacaktır.

Üretime geçtiğinizde, büyük bir kazanım artıyorsa, geliştirme ortamını, sadece docker çalıştırmak için yeterli konfigürasyona sahip olduğu için aynı olan bir ana bilgisayar altyapısına dönüştürmek çok az iş anlamına geliyor.

İlgilendiğinizde kendi web sitemdeki geliştirme ortamı hakkında daha ayrıntılı bir makalem var.

Bir Vagrant / Docker Geliştirme Ortamı Uygulamak


52
2017-08-20 20:42



Tüm bu docker_start orkestrasyonunu yaptın ama konteynırları birbirine bağlamayı zahmet etmedin. Sadece Vagrant altında çalıştırdığınız için kodlanmış port numaraları ile mi gidiyorsunuz? - WineSoaked
Merhaba WineSoaked, yukarıdaki örnek aslında tüm bu hizmetleri kullanan kapsayıcıyı göstermez. Bahsedilen blog yazısına bakarsanız, proje için geliştirme konteynerini ateşleyen başka bir script betiği / vagrant / docker_web vardır. Bu gerçekten de - docker çalıştırma komutunda bağlantıyı kullanır ve Rails projesi, hizmetlere bağlanmak için docker enjekte edilmiş ortam değişkenlerini kullanır. - Mark Stratmann
Her iki ürünü de birleştirme potansiyelini görebiliyorum. Uygulama sarıcı için çevre testi ve docker olarak Vagrant. Birleştirdiğinizde, birçok uygulamayı tek bir uygulamayla veya birim testiyle test edebilirsiniz. Bence "test platformu servislerinin" çoğu zaman Vagrant + Docker kullanıyor. - erm3nda
"Çok fazlalar." - Her ikisinin de kullanımı gerçekten ücretsizdir. - Underyx
Merhaba @koppor En son üç ay önce docker makinesini kullandım ve henüz ona geri dönmedim. Benim problemim, VMWare sürücüsünü kullanırken MAC ana bilgisayarımdaki VM çalışan docker'a klasörlerin paylaşılmasında bir hataya sahip olmasıydı. Bu, Mac'te yerel olarak kod düzenleyemediğimi ve değişikliklerin docker kabında yansıtıldığını ifade etti. Henüz tamir ettiler mi bilmiyorum, ne zaman yapacaklar gerçekten ona geçeceğim. Ancak, bu cevabı yazdığımdan beri tüm kapsayıcı düzenlemelerim docker yazısına geçtim - Mark Stratmann


Serseri-LXC Vagrant için bir LXC kullanmanıza izin veren bir Vagrant eklentisidir. Varsayılan vagrant VM'nin (VirtualBox) sahip olduğu tüm özelliklere sahip değildir, ancak docker konteynerlerinden daha fazla esneklik sağlamalıdır. Bağlantıda izlemeye değer yeteneklerini gösteren bir video var.


48
2017-08-01 18:44



Ve burada projeye doğrudan bağlantı var github.com/fgrehm/vagrant-lxc - gertas


Şimdi Vagrant ile bir sağlayıcı olarak Docker olabilir. http://docs.vagrantup.com/v2/docker/. Docker sağlayıcı, VirtualBox veya VMware yerine kullanılabilir.

Ayrıca Vaughnt ile tedarik için Docker'ı da kullanabileceğinizi unutmayın. Bu, Docker'ı bir sağlayıcı olarak kullanmaktan çok farklıdır. http://docs.vagrantup.com/v2/provisioning/docker.html

Bu değiştirebileceğiniz anlamına gelir Şef veya Kukla Docker ile. Docker gibi sağlayıcıları sağlayıcı olarak sağlayıcı (VM) ile sağlayıcı olarak kullanabilirsiniz. Veya VirtualBox'ı sağlayıcı olarak ve Docker sağlayıcı olarak kullanabilirsiniz.


41
2018-05-30 16:10



dünya çıldırdı;) docker kapsayıcılarını kullanarak vaughn'u dolaştırıcılı dolabın içinde koşturmak için koşabiliriz. - Hoto
@zainengineer, Windows'ta Vagrant için Docker sağlayıcısı hala boot2docker kullanıyor mu veya Docker Toolbox'ın bir varyantını kullanıyor mu? - Derek Mahar
@zainengineer Açıklayıcı örneklerle (vagrant docs değil) bağlantılarınız var mı? - Tset Noitamotua


Her ikisini de kullanmak uygulama teslim testinin önemli bir parçasıdır. Sadece Docker ile çalışmaya başladım ve yazılım oluşturma ve sunma konusunda korkunç bir karmaşıklığa sahip bir uygulama ekibi hakkında çok fazla düşünmeye başladım. Klasik bir Phoenix Projesi / Sürekli Teslimat durumunu düşünün.

Düşünce böyle bir şey gider:

  • Bir Java / Go uygulama bileşenini alın ve bir kapsayıcı olarak oluşturun (Uygulama, kapsayıcıda oluşturulup oluşturulmayacağından ya da konteynere takılı)
  • Konteyneri bir Vagrant VM'ye teslim edin.
  • Tüm uygulama bileşenleri için bunu tekrarlayın.
  • Kodlamak için bileşen (ler) üzerinde yineleyin.
  • Dağıtım mekanizmasını, Vagrant tarafından yönetilen VM (ler) e sürekli test edin
  • Konteynırı yerleştirme zamanı geldiğinde iyi uyuyun, bu entegrasyon testi, Docker'dan öncekinden çok daha sürekli bir temelde gerçekleşiyordu.

Bu, Mitchell'in Vagrant'ın Sürekli Teslimatta Farley / Humbles düşüncesiyle bir araya geldiği için geliştirdiği ifadesinin mantıksal uzantısı gibi görünüyor. Bir geliştirici olarak, entegrasyon testi ve uygulama sunumu ile ilgili geribildirim döngüsünü küçültebilirsem, daha yüksek kalite ve daha iyi çalışma ortamları takip eder.

Bir geliştirici olarak VM'ye sürekli ve tutarlı bir şekilde konteynırları teslim etmek ve uygulamayı daha gerçekçi bir şekilde test etmek, üretim sürümlerinin daha da basitleştirileceği anlamına geliyor.

Bu yüzden Vagrant'ın, Docker'ın uygulama dağıtımı için sahip olacağı bazı harika sonuçlardan yararlanmanın bir yolu olduğunu görüyorum.


11
2018-06-20 00:56



Bu konuda bir blog yazısı var mı? neredeyse iki yıl geçti, nasıl gidiyor? hala docker veya sadece docker ve docker-fleat / makine ile vagrant kullanarak? - Hoto
Çalıştığım şirket satın alındı ​​ve tüm içeriğimi @Hoto aldı. Kısa cevap, evde beslenen hayvan projelerim için evde docker makinesi kullanıyorum. İşyerinde ben <gulp> müdürüm </ gulp> ve fazla teknoloji yapmadım. Docker'ı kullanmak için planımız yok, bu yüzden aracımız genel olarak Vagrant. - Boyd Hemphill


Gerçek Oracle Java dergisinde Docker'ı Vagrant (ve Kukla) ile birlikte kullanmak konusunda gerçekten bilgilendirici bir makale var:

Sonuç

Docker’ın hafif konteynerleri klasik VM'lere göre daha hızlıdır   ve geliştiriciler arasında ve CD ve DevOps'un bir parçası olarak popüler hale geldi   girişimler. Amacınız izolasyon ise, Docker mükemmel bir seçimdir.   Vagrant, konfigürasyonları betimlemenizi sağlayan bir VM yöneticisidir.   bireysel VM'lerin yanı sıra provizyon yapmak. Ancak, eşik   VM, VirtualBox'a (veya başka bir VM yöneticisine) nispeten   büyük yük. Olabilecek bir sabit disk boşta olmanızı gerektirir   devasa, çok miktarda RAM alır ve performans düşük olabilir. Liman işçisi   LXC ile çekirdek gruplarını ve ad alanı yalıtımını kullanır. Bu şu demek   Aynı çekirdeği ana bilgisayar ve aynı sistemle kullanıyorsunuz.   Vagrant, soyutlama açısından Docker'ın üstünde bir seviye, yani   gerçekten karşılaştırılabilir değil. Kukla gibi yapılandırma yönetimi araçları   Hedef ortamların sağlanması için yaygın olarak kullanılmaktadır. Mevcut yeniden kullanım   Kukla tabanlı çözümler Docker ile kolaydır. Ayrıca dilimleyebilirsiniz   Çözüm, altyapı Kukla ile sağlanır;   middleware, iş uygulamasının kendisi veya her ikisi de hazırlanmıştır   Docker ile; ve Docker, Vagrant tarafından sarılmış. Bu dizi ile   araçları, senaryonuz için en iyisini yapabilirsin.

DevOps'ta Docker konteynerleri nasıl kurulur, kullanılır ve düzenlenir http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0


5
2017-08-20 13:04



Ve aptal ve uzun formları doldurmak istemiyorsanız ve bir iOS cihazınız varsa, uygulamayı ve sorunu yalnızca birkaç dokunuşla indirmekten çekinmeyin: itunes.apple.com/app/java-magazine/id530494326?mt=8 - Rafael Bugajewski
Çok fazla t eksikti - Paul Verest


Kazanmak için kesinlikle Docker!

Bildiğiniz gibi Vagrant sanal makine yönetimi için ise Docker yazılım kapları yönetimi içindir. Farkın farkında değilsen, işte: Bir yazılım kabı aynı makine ve çekirdeği diğer yazılım kapları ile paylaşabilir. Birden fazla işletim sistemi (kernel) üzerinde kaynakları boşa harcamamanız nedeniyle para tasarrufu yaptığınız konteynerleri kullanarak, iyi bir yalıtım düzeyine sahip olan sunucu başına daha fazla yazılım paketleyebilirsiniz.

Elbette kendi pitfals ve zorluklarıyla ilgilenmek için yeni bir disiplin.

Gereksinimleriniz tek makine kaynağı sınırını geçerse Docker Swarm'a gidin.


5
2018-03-24 14:40