Saya sedang berdiskusi dengan seorang teman tentang kasus penggunaan untuk Docker . Satu orang di tim ingin menggunakan Docker untuk semuanya - seperti semacam pembungkus proses unix universal. Yang lain berpikir bahwa Docker hanya boleh digunakan untuk aplikasi stateless seperti Microservices dan aplikasi gaya AWS Lambda .
Kami telah merekayasa bukti konsep untuk keduanya. Pada kluster buruh pelabuhan kami, kami memiliki drive bersama yang akan dipasang ketika host Docker dipasang, dan jika Database dalam wadah dipasang, itu hanya memasang volume ke drive bersama.
Teman saya tetap berpegang teguh pada posisinya, meskipun ditunjukkan bukti yang bertentangan. (Dia juga berpendapat bahwa Docker menambah risiko yang tidak perlu dengan menambahkan kompleksitas ke tumpukan.)
Saya mencoba mendengarkan dan memahami sudut pandangnya, baik dalam tindakan empati, tetapi juga untuk alasan yang lebih baik dengannya. (Kita semua hidup dengan cukup baik - jadi ini adalah campuran dari diskusi serius dan serius).
Jenis pertanyaan di balik pertanyaan itu adalah: apakah basis data ternak ? Komentar ini menunjukkan bahwa cadangan otomatis dan strategi pengambilan yang baik untuk database Anda tidak dapat dibedakan dari server ternak.
Pertanyaan saya adalah: Apa alasan Docker tidak boleh digunakan untuk database?
EDIT: Orang-orang meminta saya untuk menjelaskan terminologi saya. Saya berasumsi bahwa aplikasi basis data ada di wadah, dan penyimpanannya ada di volume. Yang saya maksud adalah, RDBMS ada di dalam wadah, dan penyimpanan basis data ada di volume.
Beberapa komentator telah menyarankan bahwa driver volume buruh pelabuhan tidak akan bekerja dengan database menulis dengan sangat baik. (Atau sesuatu untuk efek itu). Bisakah Anda mengembangkannya?
sumber
Jawaban:
Ketika orang berbicara tentang menjalankan database di Docker, mereka tidak bermaksud menyimpan data dalam wadah; mereka berbicara tentang memiliki gambar buruh pelabuhan dengan perangkat lunak DB, dan pemasangan data sebagai volume (volume mengikat, bukan volume wadah).
Volume adalah bagian penting dalam Docker, dan bukan sesuatu yang flakey atau hanya ditempelkan. Docker tidak hanya dibuat untuk layanan stateless (mikro).
Berharap seperti saya mungkin, saya tidak dapat menemukan alasan teknis untuk tidak menjalankan database di Docker, jadi sayangnya saya akan memilih sisi lain dari argumen dan karenanya mungkin tidak memberikan jawaban yang Anda cari.
(Saya menggunakan Oracle sebagai contoh karena saya mengenalnya, baik logam polos maupun berlabuh, dan karena ini adalah binatang buas yang terkenal karena sedikit tidak sepele untuk beroperasi jika Anda melewati pengaturan default.)
Sekarang, tergantung pada keadaan, mungkin ada alasan lembut untuk tidak melakukannya:
Jadi begitulah. Dengan segala cara lakukan dockerize DB Anda, setidaknya untuk pengembang Anda (yang akan berterima kasih selamanya) dan lingkungan pengujian Anda. Pada produksi, itu akan datang ke selera, dan ada setidaknya, saya juga lebih suka solusi yang duduk terbaik dengan khusus DBA / Ops - jika mereka memiliki puluhan tahun pengalaman bekerja logam telanjang server DB, maka dengan segala cara mempercayai mereka untuk melanjutkan. Tetapi jika Anda seorang pemula yang memiliki semua IT di cloud, maka wadah Docker hanya akan menjadi salah satu bagian dari bawang di seluruh gambar.
sumber
Saya menulis tentang ini secara mendalam tetapi inilah rangkumannya:
Mencegah pemecahan otak (memilih lebih dari satu simpul utama) perlu diselesaikan. Kegagalan untuk melakukannya dapat menjadi bencana besar
Tidak ada solusi penyimpanan bersama yang siap diproduksi untuk memungkinkan database dimatikan pada satu contoh dan ditampilkan pada yang lain tanpa kehilangan semua data Anda.
sumber
Ketika Anda mengatakan bahwa data dipasang ke wadah buruh pelabuhan, bukankah akan lebih benar untuk mengatakan bahwa "database" dipasang ke wadah buruh pelabuhan? Jika Anda mempertahankan data Anda di luar wadah maka Anda melakukan hal yang "benar" untuk tidak meletakkan basis data Anda di dalam wadah.
Tentu, pergi ke kota meletakkan DBMS dalam wadah membiarkannya mengelola data yang Anda simpan di luar, secara pribadi saya pikir itu desain yang bagus karena menjaga pemisahan yang bersih antara logika dan data. Tapi begitu Anda memasukkan data Anda ke dalam wadah mereka, Anda berpotensi bermain api.
Meskipun driver penyimpanan kontainer sudah jauh, saya pribadi belum mau menyelam dan meninggalkan data saya terjerat dalam wadah.
sumber