İyi bir docker webdev iş akışı ne olurdu?


121

O Bir tahminim var liman işçisi ölçüde benim webdev iş akışını geliştirmek - ama yığınına liman işçisi ekleyerek bir proje yaklaşımı nasıl Oldukça kafamı sarmak için yönetilen değil.

Temel yazılım yığını şöyle görünür:

Yazılım

  • Özel LAMP yığını sağlayan Docker görüntüleri

  • GYTE

İş Akışı

İş akışının bir şekilde aşağıdakine benzediğini hayal edebiliyorum:

gelişme

  1. DockerfileYukarıda belirtilen gereksinimleri karşılayan bir LAMP kabını tanımlayan bir yazın
    • REQ: Makine, önyüklemeden hemen sonra apache / mysql'yi başlatmalıdır
  2. Docker görüntüsünü oluşturun
  3. CMS'yi çalıştırmak için gereken dosyaları örn. ~/dev/cmsdir
    • Put ~/dev/cmsdir/sürüm kontrolü altında
  4. Liman işçisi kabı çalıştırın ve bir şekilde monte ~/dev/cmsdiretmek/var/www/ kabın üzerine
  5. Veritabanını doldurun
  6. Çalışmak /dev/cmsdir/
  7. Docker container'ı tamamlama ve kapatma

yayılma

  1. Uzak ana bilgisayarı kurun (ör. Yanıtlanabilir ile)
  2. Kapsayıcı görüntüsünü uzak ana bilgisayara aktarın
  3. Getirme cmsdir-proje aracılığıyla git
  4. , Liman işçisi kabı çalıştırın veritabanında çekin ve montaj cmsdiriçine/var/www

Şimdi, bunların hepsi kağıt üzerinde çok güzel görünüyor, ANCAK bunun doğru yaklaşım olup olmayacağından emin değilim.

Sorular:

  1. Yerel olarak geliştirme yaparken, veritabanının konteyner örneğinin yeniden başlatmaları arasında kalmasını nasıl sağlayabilirim? Yoksa konteyneri aşağı döndürmeden önce her seferinde sql-dump'ı çalıştırmam gerekir mi?

  2. Db ve apache sunucusu için ayrı konteyner örneklerim olmalı mı? Veya yukarıdaki kullanım durumu için tek bir konteynere sahip olmak yeterli mi?

  3. Veritabanı ve sunucu için ayrı kaplar kullanıyorsanız, aynı anda yukarı ve aşağı döndürmeyi nasıl otomatikleştirebilirim?

  4. /dev/cmsdir/Kapsayıcılar /var/www/dizinine gerçekte nasıl bağlanabilirim? Bunun için veri hacimlerini kullanmalı mıyım ?

  5. Herhangi bir tuzağı kaçırdım mı? Basitleştirilebilecek herhangi bir şey?


1
Bu soru epeyce insan için ilginç görünüyor. Birisi son zamanlarda konuyla ilgili bir blog yazısı dizisi yazmış görünüyor. Şimdi itibariyle bitmiş olmadığından, bu açıklamada bağlantı göndeririz: project-webdev.blogspot.de/2015/05/...
jottr

Yanıtlar:


46
  1. CMS kapsayıcınızdan bağımsız olarak veritabanı sürekliliğine ihtiyacınız varsa, MySQL için bir kap ve CMS'niz için bir kap kullanabilirsiniz. Böyle bir durumda, MySQL konteynırınızın çalışmaya devam etmesini sağlayabilir ve CMS'nizi istediğiniz sıklıkta bağımsız olarak yeniden dağıtabilirsiniz.

    Geliştirme için - diğer bir seçenek, veri hacimlerini kullanarak ana bilgisayar / geliştirme makinenizdeki mysql veri dizinlerini eşlemektir. Bu şekilde, git (ana bilgisayarda) kullanarak mysql (docker'da) için veri dosyalarını yönetebilir ve istediğiniz zaman (mysql kapsayıcısını başlatmadan önce) ilk durumu "yeniden yükleyebilirsiniz".

  2. Evet, db için ayrı bir konteynerinizin olması gerektiğini düşünüyorum.

  3. Ben sadece basit komut dosyası kullanıyorum:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. Evet, veri birimleri -v anahtarını kullanabilirsiniz. Bunu geliştirme için kullanırdım. Salt okunur bağlamayı kullanabilirsiniz, böylece isterseniz bu dizinde herhangi bir değişiklik yapılmaz (uygulamanız zaten verileri başka bir yerde saklamalıdır).

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    

    Her neyse, son dağıtım için dockerfile kullanarak derler ve ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. Bilmiyorum :-)



48
Bu süreçte kesinlikle daha fazla öğretici / en iyi uygulama olması gerekiyor. :(
Reza S

Bu eğitim size biraz yön verebilir ..
Pithikos


4
@RoyTruelove 2015 itibariyle, fig artık docker-compose lehine kullanımdan kaldırıldı
allan.simon


4

Bu yazının şu anda bir yaşın üzerinde olduğunu anlıyorum, ancak son zamanlarda kendime çok benzer sorular sordum ve sorularınıza birkaç harika yanıtım var.

  1. Bir MySQL docker örneği kurabilir ve verilerin durum bilgisiz bir veri kabında kalmasını sağlayabilirsiniz, yani veri kabının aktif olarak çalışması gerekmez

  2. Evet, web sunucunuz ve veritabanınız için ayrı bir örneğiniz olmasını tavsiye ederim. Docker'ın gücü budur.

  3. Check out bu repo ben inşa edilmiştir. Temel olarak make build& kadar basittir make runve yerel olarak çalışan bir web sunucusu ve veritabanı kapsayıcınız olabilir.

  4. Kullanılacak -vkabın ilk kez çalıştırırken argüman, bu kabı çalışan ana makineye kabın üzerindeki belirli bir klasörü bağlayacak.

  5. Bence fikirleriniz harika ve şu anda istediğiniz her şeyi başarmak mümkün.

İşte listelediğiniz tüm ihtiyaçları karşılayan anahtar teslimi bir çözüm .


1

Geliştirme iş akışı gereksinimlerinize uyması gereken , kullanımı kolay bir docker compose kurulumu oluşturdum .

https://github.com/ehyland/docker-silverstripe-dev

Ana Özellikler

  • Kalıcı DB
  • HHVM+ NGINXVeya Apache2+ seçiminizPHP5
  • XDebug ile hata ayıklama ve kesme noktaları ayarlama

README.md başlangıç için yeterince açık olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.