Liman önyükleme konteynerlerini sistem önyüklemesinde nasıl otomatik başlatırım?


113

Sistem başlatıldığında docker konteynerlerini otomatik olarak başlatmanın iyi bir yolu nedir?

Bunu Ubuntu 14.04'te yapmanın tercih edilen bir yolu var mı?

supervisordGeçmişte web uygulamalarını otomatik olarak başlatmak için kullandım . Ama bu Docker için doğru olanı hissetmiyor.

Yanıtlar:


136

Görünüşe göre, Docker kapsayıcılarını otomatik başlatmak için geçerli yöntem ( Docker 1.2'den ) yeniden başlatma ilkelerini kullanmaktır . Bu, Docker'ın başlatıldığında kabın başlatılmasını ve çıkarken kabın yeniden başlatılmasını nasıl işlemesi gerektiğini kontrol eder. Şimdiye kadar 'her zaman' seçeneğini kullandım ve Docker'ın kabı sistem önyüklemesinde otomatik başlatmasını sağladığını doğrulayabilir:

sudo docker run --restart=always -d myimage

Belge Alıntı

İlkeleri Yeniden Başlatma Docker çalıştırmasında --restart bayrağını kullanarak, bir kabın çıkışta nasıl yeniden başlatılması veya yeniden başlatılmaması gerektiği için bir yeniden başlatma politikası belirleyebilirsiniz.

Hayır - Kabı çıkarken yeniden başlatmayın.

on-failure - Kabı yalnızca sıfır olmayan çıkış durumuyla çıkarsa yeniden başlatın.

daima - Çıkış durumundan bağımsız olarak kabı daima yeniden başlatın.

Docker'ın başarısızlık politikasını kullanırken kabı yeniden başlatmaya çalışacağı maksimum süreyi de belirleyebilirsiniz. Varsayılan ayar, Docker'ın kabı yeniden başlatmayı sonsuza kadar deneyeceğidir.

$ sudo docker run --restart=always redis

Bu, redis kabını her zaman yeniden başlatma politikasıyla çalıştırır, böylece kap çıkarsa, Docker yeniden başlatır.

$ sudo docker run --restart=on-failure:10 redis

Bu, redis kabını yeniden başlatma hatası ilkesi ve 10'luk maksimum yeniden başlatma sayısıyla çalıştırır. Redis kabı, arka arkaya 10 defadan fazla sıfır olmayan bir çıkış durumuna sahipse, Docker kabı yeniden başlatmaya çalışmayı iptal eder. Maksimum yeniden başlatma sınırı sağlamak, yalnızca başarısızlık politikası için geçerlidir.


12
"her zaman - Her zaman kabın çıkış durumundan bağımsız olarak yeniden başlatılması" biraz kafa karıştırıcıdır. Elle aradığım davranış olan kaptan el ile çıkarsanız / durdurursanız kapsayıcıyı yeniden başlatmaz.
w00t,

12
Not: aranan başka bir politika unless-stoppedeklendi. Bu gibi davranır alwaysfakat konteyner durdurulur ve sistem yeniden veya liman işçisi cin yeniden başlatma ise, konteyner yeniden olmayacaktır. Tüm 4 seçeneğin güzel bir yazımı için buraya bakın blog.codeship.com/…
David Morales

4
Elbette, bu dockerprogramı desteklemek için arka plan programı otomatik olarak başlatılmalıdır.
sherrellbc

Sanırım soru "sistem önyüklemesinde" soruyor, yani fiziksel veya sanal sunucu yeniden başlatıldıktan sonra, konteynırlar otomatik olarak yeniden başlatılıyor, liman motorunun sunucu yeniden başlatıldıktan sonra tam olarak çalıştığını varsayar?
Kök Döngü

8

Docker, başlangıç ​​ve systemd ile nasıl yapılacağını açıklayan bu sayfaya sahiptir . Docker için doğru şey gibi görünmediğine katılıyorum. Onların çözümü, docker startkonteynerinizi zaten oluşturduğunuzu varsayar. Senin de yapacağını düşünürdüm docker run --rmvarsayılan olarak başka bir şey yaparsanız eğer sonradan görme komut (bir görüntüden yepyeni süreç ve konteyner gibi onu tedavi) ya da sadece liman işçisi cin açılışta konteynerleri kendisini yeniden izin (aynı ). Upstart, işlemlerin kolay başlatılmasını / durdurulmasına izin verme avantajına sahiptir, ancak bunu docker's start / stop ile de yapabilirsiniz!

Başlangıç ​​komut dosyası çalışmadan önce kullanıcıyı el ile bir kapsayıcı (tüm doğru bağlantı noktası / birim bağlamalarıyla) oluşturmaya zorlamak bence.


Bağlantı koptu ... Bu muhtemel bir değişim gibi görünüyor, ama kesinlikle "nasıl" göstermiyor
Gert van den Berg

Teşekkürler, bağlantıyı benzer bir sayfaya bağladım, ancak orijinalinin yazdığı aynı şeyi söylediğinden emin olamıyorum.
Lawrence Kesteloot

6

Ama bu Docker için doğru olanı hissetmiyor.

Neden olmasın?

Bunun için büyük bir başarıyla süpervizör kullanıyorum.

Bildiklerinizi kullanın, neyin işe yaradığını kullanın, kolayca koruyabileceğiniz ve anlayabileceğiniz bir şey kullanın.


Thanks @EEAA .. bu onları daemon olmayan modda çalıştırdığın anlamına mı geliyor? Bu aynı zamanda onları çalıştırmanız gerektiği anlamına gelmiyor --rmmu?
Stefan Arentz

Kapları ön plan modunda çalıştırıyorum ve denetleyicinin stdout / stderr'i yakalamasına izin veriyorum. Neden --rmburada alakalı olduğundan emin değilim .
AÇAA

@EEAA: Sorunuza hakkında: Bazı insanlar için, dockeryerine geçer lxcveya openvzvar olan lxc.start.auto = 1ve vzctl set --onboot yes. Ayrıca ESXi ve diğer sanallaştırma çözümleri de böyle bir özelliğe sahip. Lawrence gibi ben de böyle bir otomatik başlatma özelliğinin dağıtıma özgü bir şekilde uygulanması gerektiğini düşünmüyorum, çünkü liman işçisi bir kullanıcı her problemde aynı bilgiyle aynı sorunu çözebilmelidir.
Daniel Alder,

1
Doğru, Docker, ana bilgisayarı çalışan kaplardan ayırmanın harika bir yoludur, bu nedenle ana bilgisayara özgü yapılandırma kullanarak geriye doğru bir adım biraz.
nijave
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.