Bagaimana cara memulai kontainer docker secara otomatis saat boot sistem?

Apa cara yang baik untuk memulai kontainer docker secara otomatis saat sistem melakukan booting?

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

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

Rupanya, metode saat ini untuk memulai otomatis wadah buruh pelabuhan (dari Docker 1.2) adalah menggunakan mulai ulang kebijakan. Ini akan mengontrol bagaimana Docker harus menangani permulaan container saat startup dan memulai kembali container saat keluar. Saya telah menggunakan opsi 'Selalu' sejauh ini, dan dapat mengonfirmasi bahwa itu membuat Docker memulai wadah secara otomatis saat boot sistem:

sudo docker run --restart=always -d myimage

Dokumentasi Kutipan

Mulai ulang Kebijakan menggunakan bendera -- restart pada Docker run Anda dapat menentukan kebijakan restart untuk bagaimana wadah harus atau tidak boleh dimulai ulang saat keluar.

tidak - jangan memulai ulang wadah saat keluar.

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

selalu-selalu restart wadah terlepas dari status keluar.

Anda juga dapat menentukan jumlah maksimum waktu Docker akan mencoba memulai ulang penampung saat menggunakan kebijakan on-failure. Defaultnya adalah Docker akan mencoba selamanya untuk me-restart wadah.

$ sudo docker run --restart=always redis

Ini akan menjalankan container redis dengan kebijakan restart always sehingga jika container keluar, Docker akan restart.

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

Ini akan menjalankan wadah redis dengan kebijakan restart on-failure dan jumlah restart maksimum 10. Jika penampung redis keluar dengan status keluar bukan nol lebih dari 10 kali berturut-turut, buruh pelabuhan akan membatalkan mencoba memulai ulang penampung. Memberikan batas restart maksimum hanya berlaku untuk kebijakan on-failure.

Docker memiliki halaman ini itu menjelaskan bagaimana melakukannya dengan upstart dan systemd. Saya setuju bahwa itu sepertinya bukan hal yang tepat untuk Docker. Solusi mereka adalah menjalankan docker start, yang mengasumsikan bahwa Anda telah membuat penampung Anda. Saya akan berpikir bahwa Anda juga akan melakukan docker run --rm dalam skrip pemula (memperlakukannya seperti proses dan wadah baru dari gambar) atau biarkan daemon buruh pelabuhan memulai ulang wadah itu sendiri saat boot (karena akan secara default jika Anda tidak melakukan hal lain). Upstart memiliki keuntungan memungkinkan proses start / stop yang mudah, tetapi Anda juga mendapatkannya dengan docker start / stop!

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

Tapi itu tidak terasa seperti hal yang tepat untuk Docker.

Mengapa tidak?

Saya menggunakan supervisord untuk ini dengan sukses besar.

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