Pertanyaan Bagaimana cara otomatis memulai kontainer buruh pelabuhan di boot sistem?


Apa cara yang baik untuk secara otomatis memulai kontainer buruh pelabuhan ketika sistem boot?

Apakah ada cara yang lebih disukai untuk melakukan ini pada Ubuntu 14.04?

Saya telah menggunakan supervisord di masa lalu untuk memulai aplikasi web secara otomatis. Tapi itu tidak terasa seperti hal yang tepat untuk Docker.


99
2017-10-02 14:25






Jawaban:


Rupanya, metode saat ini untuk otomatis memulai kontainer Docker (dari Docker 1.2) adalah untuk digunakan mulai ulang kebijakan. Ini akan mengontrol cara Docker menangani awal wadah saat memulai dan memulai kembali penampung saat keluar. Saya telah menggunakan opsi 'selalu' sejauh ini, dan dapat mengonfirmasi bahwa itu membuat Docker otomatis memulai penampung di boot sistem:

sudo docker run --restart=always -d myimage

Kutipan Dokumentasi

Restart Policies Menggunakan flag --restart di Docker, jalankan Anda bisa   tentukan kebijakan restart untuk bagaimana wadah harus atau tidak seharusnya   dimulai kembali saat keluar.

no - Jangan memulai ulang penampung saat keluar.

on-failure - Restart wadah hanya jika keluar dengan nol   status keluar.

selalu - Selalu hidupkan kembali kontainer tanpa memperhatikan status keluar.

Anda juga dapat menentukan jumlah maksimum berapa kali Docker akan mencoba   restart wadah saat menggunakan kebijakan on-failure. Standarnya adalah   bahwa Docker akan mencoba selamanya untuk memulai kembali penampung.

$ sudo docker run --restart=always redis

Ini akan menjalankan redis   kontainer dengan kebijakan restart selalu sehingga jika kontainer   keluar, Docker akan memulai ulang.

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

Ini akan menjalankan   redis container dengan kebijakan restart on-failure dan maksimal   hitung ulang 10. Jika wadah redis keluar dengan keluar non-nol   status lebih dari 10 kali berturut-turut Docker akan membatalkan mencoba untuk memulai ulang   wadah. Memberikan batas restart maksimum hanya berlaku untuk   kebijakan kegagalan.


120
2017-12-07 20:18



"selalu - Selalu restart kontainer tanpa menghiraukan status keluar" sedikit membingungkan. Tidak akan memulai kembali penampung jika Anda secara manual keluar / menghentikan penampung, yang merupakan perilaku yang saya cari. - w00t
luar biasa! terima kasih, coba sekarang. - zx1986
Catatan: kebijakan lain yang disebut unless-stopped ditambahkan. Itu bertindak seperti always tetapi Jika penampung dihentikan dan sistem di-boot ulang atau daemon docker dihidupkan ulang, penampung tidak akan memulai ulang. Lihat di sini untuk menulis bagus dari semua 4 opsi blog.codeship.com/ ... - David Morales
Tentu saja, itu docker daemon harus otomatis memulai untuk mendukung ini. - sherrellbc


Docker punya halaman ini yang menjelaskan bagaimana melakukannya dengan pemula dan sistemd. Saya setuju bahwa itu tidak tampak seperti hal yang tepat untuk Docker. Solusi mereka adalah lari docker start, yang mengasumsikan bahwa Anda telah membuat penampung Anda. Saya akan berpikir bahwa Anda juga akan melakukannya docker run --rm dalam script pemula (memperlakukannya seperti proses dan wadah baru dari sebuah gambar) atau biarkan saja docker daemon me-restart kontainer itu sendiri saat boot (karena akan secara default jika Anda tidak melakukan hal lain). Upstart memiliki keuntungan dengan memungkinkan permulaan / penghentian proses yang mudah, tetapi Anda mendapatkannya dengan memulai / berhenti juga!

Saya pikir itu aneh untuk memaksa pengguna untuk secara manual membuat wadah (dengan semua port / volume bindings yang benar) sebelum skrip pemula akan bekerja.


7
2017-10-14 04:49





Tapi itu tidak terasa seperti hal yang tepat untuk Docker.

Kenapa tidak?

Saya menggunakan supervisor untuk ini dengan sukses besar.

Gunakan apa yang Anda ketahui, gunakan apa yang berhasil, gunakan sesuatu yang mudah Anda pertahankan dan pahami.


4
2017-10-02 14:27



Terima kasih @EEAA .. apakah itu berarti Anda menjalankannya dalam mode non-daemon? Bukankah itu juga berarti Anda harus menjalankannya --rm ? - Stefan Arentz
Saya menjalankan kontainer dalam mode foreground dan membiarkan supervisord menangkap stdout / stderr. Saya tidak yakin mengapa --rm relevan di sini. - EEAA
@EEAA: tentang pertanyaan Anda: Bagi sebagian orang, docker adalah pengganti lxc atau openvz yang memiliki lxc.start.auto = 1 dan vzctl set --onboot yes. Juga ESXi dan solusi virtualisasi lainnya memiliki fitur seperti itu. Seperti Lawrence, saya juga tidak berpikir fitur autostart seperti itu harus diimplementasikan dalam cara distribusi-spesifik karena pengguna docker harus dapat memecahkan masalah yang sama dengan pengetahuan yang sama pada setiap platform. - Daniel Alder
Benar, Docker adalah cara yang bagus untuk memisahkan host dari menjalankan kontainer sehingga menggunakan konfigurasi khusus host adalah sedikit langkah mundur. - nijave