2014-06-17 20 views
39

Docker documentation aşağıdaki senaryoyu varsa ONBUILD komutunu kullanmak üzere öneriyor:Her değişiklikten sonra konteyner yeniden oluşturulsun mu?

Örneğin, görüntü yeniden kullanılabilir piton uygulama oluşturucu ise, bu uygulamanın kaynak kodunu gerektirir belirli bir dizinde eklenecek, ve bundan sonra çağrılacak bir komut dosyası gerektirebilir. Uygulama kaynak koduna henüz erişemediğinizden ve her uygulama yapısı için farklı olacağından, şimdi ADD ve RUN'u çağıramazsınız. Uygulama geliştiricilerine uygulamalarına kopyalayıp yapıştırmak için bir Dokerfile dosyası sağlamanız yeterlidir, ancak uygulamaya özgü kodla karıştırıldığı için verimsiz, hataya açık ve güncellenmesi güçtür.

Temel olarak, tüm bunlar hoş ve güzel görünebilir, ancak bu, yalnızca bir yazım hatası olsa bile, bir şeyi değiştirdiğimde her seferinde uygulama kapsayıcısını yeniden oluşturmam gerektiği anlamına gelir.

Bu çok verimli görünmüyor, ör. Bir şeyi değiştirmek için kullandığınız web uygulamalarını oluştururken, kaydedin ve tarayıcıda yenileyin.

Bununla nasıl baş edersiniz?

cevap

69

Ben mutlaka sadece bir yazım hatası

olsa bile, ben bir şey değiştirmek her zaman app kapsayıcı yeniden oluşturmak zorunda olduğu anlamına gelmez, sen docker run komut için -v seçeneğini kullanabilirsiniz için proje dosyalarınızı bir kapsayıcıya enjekte edin. Yani bir docker görüntüsünü yeniden oluşturmak zorunda kalmayacaksınız.

ONBUILD talimatının, Dockerfile öğesinin bir Docker dosyası olan FROM değerini aldığı durumlar içindir. Docker, Dockerfile adlı çocuğun görüntüsünü oluşturduğunda üst Dockerfile'da bulunan ONBUILD yönergeleri çalıştırılacaktır.


Bu çok verimli, örneğin, olduğu gibi görünmüyor Bir şeyi değiştirmek için kullandığınız web uygulamalarını oluştururken, kaydedin ve tarayıcıda yenileyin.

Eğer bu uygulama kodu yineleme sırasında bir web uygulaması hizmet etmek bir Docker kapsayıcı kullanıyorsanız, o zaman yalnızca uygulamanızı ancak uygulamanın kod çalıştırmasına her şeyi içeren özel bir Docker görüntü öneriyorum. Daha sonra uygulama kodunuzu içeren dizini, ana makine makinenizde, uygulama dosyalarının docker konteynerinde sunulduğu diziyle paylaşın.

docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx 

ben /home/thomas/workspace/project1/ ve dosyaları değiştirebilir Böylece: Bir statik web sitesi geliştiriyorum ve benim çalışma alanı /home/thomas/workspace/project1/ de ise

Örneğin, o zaman bir konteyner çalışan nginx başlayacak değişiklikler, docker görüntüsünü yeniden oluşturmaya veya docker kabını yeniden başlatmaya gerek kalmadan canlı olarak yansıtılır.

İlgili konular