Rekomendasi berasal dari tujuan dan desain virtualisasi tingkat sistem Operasi
Wadah telah dirancang untuk mengisolasi proses bagi orang lain dengan memberikan ruang pengguna dan sistem file sendiri.
Ini adalah evolusi logis chroot
yang menyediakan sistem file yang terisolasi, langkah selanjutnya adalah mengisolasi proses dari yang lain untuk menghindari memori menimpa dan memungkinkan untuk menggunakan sumber daya yang sama (misalnya TCP port 8080) dari beberapa proses tanpa konflik.
Minat utama dalam sebuah wadah untuk mengemas perpustakaan yang dibutuhkan untuk proses tanpa khawatir tentang konflik versi. Jika Anda menjalankan beberapa proses yang membutuhkan dua versi dari perpustakaan yang sama di ruang pengguna dan sistem file yang sama, Anda harus mengubah setidaknya LDPATH untuk setiap proses sehingga perpustakaan yang tepat ditemukan terlebih dahulu, dan beberapa perpustakaan tidak dapat men-tweak dengan cara ini, karena path mereka dikodekan dalam executable pada waktu kompilasi, lihat pertanyaan SO ini untuk lebih jelasnya.
Pada level jaringan Anda harus mengkonfigurasi setiap proses untuk menghindari penggunaan port yang sama.
Menjalankan banyak proses dalam wadah yang sama membutuhkan beberapa penyesuaian berat dan pada akhirnya mengalahkan tujuan isolasi, jika Anda boleh menjalankan banyak proses dalam ruang pengguna yang sama, berbagi fileytem dan sumber daya jaringan yang sama, lalu mengapa tidak menjalankannya pada tuan rumah itu sendiri?
Berikut adalah daftar lengkap dari tweaking / jebakan berat yang bisa saya pikirkan:
Menangani log
Entah dengan volume yang dipasang atau disisipkan pada stdout ini membawa beberapa manajemen. Jika menggunakan volume yang dipasang kontainer Anda harus memiliki "tempat" sendiri di host atau dua kontainer yang sama akan berjuang untuk sumber daya yang sama. Ketika interleaving pada stdout untuk memanfaatkannya docker logs
dapat menjadi mimpi buruk untuk dianalisis jika sumber tidak dapat diidentifikasi dengan mudah.
Waspadalah terhadap proses zombie
Jika salah satu proses Anda dalam kecelakaan kontainer, pengawas mungkin tidak dapat membersihkan anak-anak dalam keadaan zombie, dan init host tidak akan pernah mewarisi mereka. Setelah Anda kehabisan jumlah pids yang tersedia (2 ^ 22 jadi sekitar 4 juta) banyak hal akan gagal.
Pemisahan masalah
Jika Anda menjalankan dua hal yang terpisah, seperti server apache dan logstash dalam wadah yang sama, yang dapat memudahkan penanganan log, tetapi Anda harus mematikan apache untuk memperbarui logstash. (Pada kenyataannya, Anda harus menggunakan driver logging dari Docker) Apakah akan berhenti dengan anggun menunggu sesi saat ini berakhir atau tidak? Jika berhenti dengan anggun, mungkin perlu beberapa saat dan menjadi lama untuk memutar versi baru. Jika Anda melakukan kill, Anda akan berdampak pada pengguna untuk pengirim log dan itu harus dihindari IMHO.
Akhirnya ketika Anda memiliki beberapa proses Anda mereproduksi OS, dan dalam hal ini menggunakan virtualisasi perangkat keras terdengar lebih sesuai dengan kebutuhan ini.