Mengapa tidak menggunakan alat manajemen konfigurasi, bukan Dockerfile?

8

Saya cukup baru untuk Docker dan alat manajemen konfigurasi.

Pada awalnya saya mulai menulis skrip bash untuk menyediakan kotak Vagrant saya untuk mesin pengembangan saya, tetapi sekarang saya telah beralih menggunakan Chef untuk itu sehingga saya dapat menggunakan sumber yang sama untuk menyediakan lingkungan pengembangan dan produksi untuk mencoba dan mendapatkannya sebagai serupa mungkin.

Sejak saya mulai menggunakan Chef, saya datang untuk menikmati aspek KERING karena tidak perlu menyalin dan menempelkan baris skrip shell dari proyek ke proyek, kemampuan untuk menyediakan mesin yang menjalankan berbagai distribusi linux menggunakan satu sumber yang terkonsolidasi, dan kenyamanan. menggunakan buku resep yang disediakan komunitas.

Sekarang saya telah menggunakan Chef untuk menyediakan vm saya, rasanya seperti mengambil langkah mundur ketika saya menambahkan perintah RUN diikuti dengan perintah shell ke Dockerfile untuk mencapai apa yang bisa dicapai dengan hanya menjalankan resep Chef.

Saya sudah mencari di Google dan belum menemukan apa-apa (tapi mungkin saya baru saja melewatkannya) tetapi sepertinya tidak ada cara mudah untuk menggunakan resep Chef untuk membuat wadah Docker. Mengapa demikian?

Saya mengerti bahwa wadah dimaksudkan untuk tidak berubah dan alat manajemen konfigurasi biasanya digunakan untuk mengonfigurasi ulang mesin selama masa pakainya, tetapi bukankah mereka masih menawarkan banyak manfaat jika digunakan selama pembangunan awal wadah?

David Eugene Pratt
sumber
1
Alat Manajemen Konfigurasi masih dapat digunakan untuk mengkonfigurasi server / buruh pelabuhan kontainer / etc Anda setelah itu ditetapkan. Maka jangan mengubah konfigurasi dan menyebarkan yang baru. Demikian pula, ada immutabilitas dekat dengan idempotensi .
James Shewey
@JamesShewey Idempotent bukan berarti tidak berubah. Mesin yang tidak bisa diubah harus digulung agar dapat diperbarui.
Matt O.
@ Mat O. Benar. Tetapi Anda dapat menggunakan sistem manajemen konfigurasi idempoten untuk menggulung server yang tidak dapat diubah. Setelah mesin yang digulung dibawa kembali online, sistem manajemen konfigurasi mengkonfigurasi sistem ke paket instalasi keadaan akhir yang tidak dapat diubah, mengatur file konfigurasi dan memulai layanan dan semacamnya. Hanya karena suatu sistem idempoten tidak berarti itu tidak dapat juga tidak berubah. Ini hanya masalah apakah Anda memutuskan untuk membakarnya dan memindahkan kembali ketika Anda membuat perubahan pada konfigurasi, atau apakah Anda mendorong perubahan itu dan memperbarui sistem yang ada.
James Shewey

Jawaban:

5

Alat yang Anda butuhkan adalah Packer menggunakan Docker sebagai "pembangun" dan Chef sebagai "penyedia". Kemudian Anda dapat menambahkan gambar yang dihasilkan ke repo Anda dan menggunakannya kembali tanpa harus berkemas lagi, sampai resep Anda berubah.

Gayus
sumber
4

Strategi-strategi ini tidak ada hubungannya satu sama lain.

Kontainer (seperti Docker) adalah metodologi untuk menyebarkan dan mengisolasi aplikasi. Wadah disukai karena dapat diangkut. Mereka dapat dikembangkan dan ditinjau secara lokal dalam banyak kasus, jadi memasukkan aplikasi ke dalamnya masuk akal.

Adapun mengapa Docker menggunakan skrip shell : Gambar buruh pelabuhan secara harfiah adalah gambar wadah linux. Ini adalah sistem operasi linux dan titik wadah itu menjadi seringan dan seefisien mungkin. Jika Anda mulai menambahkan Chef, Ruby, Erlang, dan semua perpustakaan lain yang diperlukan untuk memiliki Chef sebagai penyedia di Dockerfile Anda akan menghilangkan titik menggunakan wadah.

Manajemen Konfigurasi adalah untuk menyediakan node komputasi. Status akhir konfigurasi Anda biasanya tercermin dalam kode dan memiliki server pusat untuk mempertahankan status. Alat-alat seperti gelandangan memungkinkan Anda untuk menggunakan koki untuk mengkonfigurasi mesin Vagrant, sebagian besar karena kenyamanan bagi pengembang. Meskipun Anda dapat menggunakan sebagian besar alat ini dalam mode hanya-lokal , pemeliharaannya menjadi sangat memberatkan. Server-server pusat itu untuk hal-hal seperti memilah versi dan manajemen ketergantungan secara otomatis.

Bash secara inheren bukan langkah mundur. Misalnya, banyak organisasi yang membangun pipa gambar yang sepenuhnya tidak dapat diubah membangun gambar mereka menggunakan Bash. Ini memastikan stabilitas dan prediktabilitas serta bahasa yang umum di antara para insinyur (Banyak insinyur mungkin berasal dari latar belakang manajemen konfigurasi yang berbeda).

Immutable vs Config Management . Infrastruktur yang tidak berubah tidak berubah dan harus diganti seluruhnya untuk diperbarui. Manajemen Konfigurasi menyiratkan bahwa keadaan mesin dikelola oleh agen atau koneksi asing (seperti dengan Ansible).

Kontainer Docker secara inheren tidak dapat diubah. Anda tidak menyimpan data pada mereka dan mereka harus digulung untuk diperbarui.

Matt O.
sumber