2016-03-26 38 views
2

Aşağıdaki senaryo vardır:Docker push ve docker pull'da eşzamanlılık nasıl yönetilir?

  • özel kayıt defterinden docker pull bir resmin son sürümünü çalıştıran bir daemon_pulling.
    • E.g. docker pull localhost:5000/myimage:v1 # sha veya görüntü id: 1234
  • bir daemon_pushing bir görüntünün son sürümünün docker push çalışan.
    • E.g. docker commit container_stable localhost:5000/myimage:v1 && docker push localhost:5000/myimage:v1 # sha veya görüntü id: 6789

kod kaplarda dayalı görüntüleri dağıtmak için çalışıyor! çalışan ve bir daemon_pulling (sha veya görüntü id: 1234) çalıştırılır: Bir dameon_pushing (6789 sha veya görüntü id) ne zaman

sorundur, aynı zamanda itme (6789) bitmiş değilken bir liman işçisi çekme nedeniyle (1234) yerel bir değişikliği (6789! = 1234) kullandı ve tespit etti ve görüntüyü (1234) tekrar indirmeyi deneyin ama son kararlı görüntüüm (6789) ...

Bir yol arıyorum itme etkilemez bir çekiş devam ediyor, ve tersi.

Bu eşzamanlılığı yönetmenin daha iyi bir yolu nedir?

Farklı bir Docker resim adını pivot olarak kullanmayı denedim ve doğrudan kayıt defteri sunucusunda yeniden adlandırmayı denedim, ancak uzaktan yeniden adlandırmanın bir yolunu bulamadım (yalnızca yerel yeniden adlandır).

+0

Bu kurulum/iş akışı ile çözmeye çalıştığınız sorun nedir? – jonatan

+0

@jonatan Şube ahırlarında ve çekme talebinin dalında meydana gelen değişiklikleri tespit eden bir CI'miz var. Daha sonra çekme isteğinin kullanımı “docker pull stable” ve stabil şube kullanımındaki değişiklikler “docker push” – moylop260

cevap

1

Mevcut bir görüntüyü çekmek, bir kapsayıcıyı çalıştırmak ve güncelleştirmeleri yüklemek, değişiklikleri aynı görüntü adına taşımak ve daha sonra kayıt defterine geri yüklemek için CI yapınızı ayarladığınız anlaşılıyor. Kapları çalıştırarak ve aynı görüntüye işleyerek görüntüleri sürekli olarak güncellemek, değişiklikleri gizlediğinden ve yapıyı çoğaltmak için gereksiz yere zorlaştırdığından iyi bir uygulama değildir.

Görüntüyü, tüm oluşturma adımlarını tanımladığınız bir Dockerfile'dan oluşturmak için daha iyi bir yol olurdu. Örnekler için Docker'ın resmi Continuous Integration use case referans mimarisine bakın. Oluşturma sürelerini kısaltmak isterseniz, başlangıç ​​için kendi base image'unuzu oluşturabilirsiniz.

+0

cevabınız için teşekkürler. Benim CI bir sabitleme 'üretim/8.0 'güncelleştirilirse yeni bir' docker yapı' yürütülürse, tüm git repository üretim 'git klonu üretimi/8.0 'ile bir Dockerfile kullanın. Ancak, çekme isteği ile son sürümü 'docker çekme' kullanmayı deneyin (PR 'docker push' komutunu çalıştırmayın) ama CI bir 'docker push' çalıştırdığında ve PR 'docker pull' ile geldiğinde sorun budur. Linkleri gözden geçireceğim. Teşekkür ederim! – moylop260