docker-alokasi memori mesin

Kami memiliki aplikasi Rails yang cukup kompleks yang akan digunakan ke satu host fisik. Tuan rumah memiliki 8 core dan ram 128GB.

Aplikasi ini dockerised, dengan 4 jenis kontainer

  • Rails inc. web server
  • Postgres DB
  • Redis DB
  • Kontainer pekerja (Resque)

Diharapkan Rails dan kontainer pekerja akan diskalakan dengan membawa lebih banyak kontainer di dalam mesin buruh pelabuhan.

Dalam lingkungan pengembangan, memori dialokasikan ke seluruh mesin docker:

docker-machine create -d virtualbox --virtualbox-memory 8192 default

Apakah mungkin untuk mengontrol berapa banyak memori wadah individu terbatas?

Misalnya mengalokasikan 16GB ke Postgres, tetapi batasi wadah Rails hingga 4GB. Memori minimum seperti apa yang harus dialokasikan ke host server yang menjalankan docker-machine, dan apakah ini mungkin?

EDIT

Pertanyaan terkait:

Bagaimana cara menangani manajemen memori Docker?

Docker + Apache, bagaimana cara kerja penggunaan memori?

EDIT 2

Jawaban ini https://serverfault.com/a/645888/210752 menunjukkan bahwa wadah akan mengalokasikan memori sesuai kebutuhan. Ini belum menjadi pengalaman saya di lingkungan pengembangan (secara default mesin buruh pelabuhan dialokasikan 2GB).

Seperti yang disebutkan dalam jawaban atas pertanyaan di Edit ke-2 anda, kontainer tidak seperti VM karena Anda biasanya tidak memesan memori untuk mereka seperti yang Anda lakukan dengan mesin Virtual. Karena mereka semua berjalan pada OS yang sama, dapat mengirimkan memori yang diperlukan untuk proses yang berbeda, sama seperti jika mereka tidak berjalan dalam sebuah wadah. Artinya, memori dikumpulkan untuk semua proses, terlepas dari wadah.

Apa yang Anda lakukan dalam contoh di atas dengan docker-machine adalah kumpulan memori total host 'virtual'. Dalam kasus produksi Anda, itu akan menjadi keseluruhan 128 GB (kecuali jika Anda berencana untuk juga menggunakan docker-machine atau VM untuk menyegmentasikannya).

Namun, kontainer juga merupakan cara yang bagus untuk memanfaatkan kernel cgroups (kelompok kontrol) fitur, yang memungkinkan Anda mengkonfigurasi manajemen sumber daya untuk sistem kontainer keseluruhan. Ini tidak memungkinkan Anda' memesan ' memori ke wadah, tetapi Anda dapat mengatur batas atas ke semua memori wadah Anda sehingga seseorang tidak akan memakan memori yang dapat digunakan untuk orang lain (jika terjadi kebocoran atau bug misalnya).

Dengan Docker, tergantung pada backend kontainer yang digunakan, Anda dapat mengatur batas memori dasar sebagai berikut:

  • Saat menjalankan libcontainer default docker, dengan menjalankan wadah dengan -m atau - memori opsi
  • Saat menjalankan penyedia LXC lawas, dengan menjalankan wadah dengan opsi LXC lxc.cgroup.CPU.memori= Jumlah menggunakan -- lxc-conf

Anda dapat menemukan informasi lebih lanjut tentang penggunaan cgroups di Docker di sini:https://www.cloudsigma.com/manage-docker-resources-with-cgroups/

Artikel ini juga berisi slide pengantar fungsi cgroups.

@ ardochhigh Yah, saya tidak bisa menarik kembali suara dekat saya, atau menjawab pertanyaan anda, jadi… maaf soal itu. Semoga orang lain bisa.

@ HopelessN00b tidak masalah … Saya pikir pertanyaan itu tidak diucapkan dengan baik di awal. Saya telah banyak bekerja dengan infrastruktur tetapi Docker baru bagi saya. Saya telah memasang karunia … memiliki hari besar!