Gambar Docker dapat dibangun oleh siapa saja yang memiliki kemampuan untuk menulis skrip. Itulah mengapa banyak citra serupa yang dibangun oleh komunitas, dengan perbedaan kecil tetapi benar-benar melayani tujuan yang sama. Gambar kontainer yang baik (dan populer) harus memiliki dokumentasi yang ditulis dengan baik dengan penjelasan yang jelas, repositori yang dipelihara secara aktif dan dengan pembaruan rutin. Lihat postingan blog ini jika Anda ingin mempelajari cara membuat dan mempublikasikan image Docker Anda sendiri untuk MySQL, atau postingan blog ini jika Anda hanya ingin mempelajari dasar-dasar menjalankan MySQL di Docker.
Dalam posting blog ini, kita akan melihat beberapa image Docker paling populer untuk menjalankan server MySQL atau MariaDB kita. Gambar yang kami pilih adalah gambar umum untuk keperluan umum yang setidaknya dapat menjalankan layanan MySQL. Beberapa di antaranya menyertakan aplikasi terkait MySQL yang tidak penting, sementara yang lain hanya berfungsi sebagai instance mysqld biasa. Daftar di sini didasarkan pada hasil Docker Hub, perpustakaan dan komunitas terbesar di dunia untuk gambar kontainer.
TLDR
Tabel berikut merangkum berbagai opsi:
Aspek | MySQL (Docker) | MariaDB (Docker) | Percona (Docker) | MySQL (Oracle) | MySQL/MariaDB (CentOS) | MariaDB (Bitnami) |
---|---|---|---|---|---|---|
Unduhan | 10jt+ | 10jt+ | 10jt+ | 10jt+ | 10jt+ | 10jt+ |
Pusat Docker | mysql | mariadb | percona | mysql/mysql-server | mysql-80-centos7 mysql-57-centos7 mysql-56-centos7 mysql-55-centos7 mariadb-102-centos7 mariadb-101-centos7 | bitnami/mariadb |
Halaman proyek | mysql | mariadb | percona-docker | mysql-docker | mysql-container | bitnami-docker-mariadb |
Gambar dasar | Debian 9 | Ubuntu 18.04 (bionic) Ubuntu 14.04 (terpercaya) | CentOS 7 | Oracle Linux 7 | RHEL 7 CentOS 7 | Debian 9 (minideb) Oracle Linux 7 |
Versi basis data yang didukung | 5,5 5,6 5,7 8,0 | 5,5 10,0 10,1 10,2 10,3 10,4 | 5.6 5.7 8.0 | 5,5 5,6 5,7 8,0 | 5,5 5,6 5,7 8,0 10,1 10,2 | 10.1 10.2 10.3 |
Platform yang didukung | x86_64 | x86 x86_64 arm64v8 ppc64le | x86 x86_64 | x86_64 | x86_64 | x86_64 |
Ukuran gambar (tag:terbaru) | 129 MB | 120 MB | 193 MB | 99 MB | 178 MB | 87 MB |
Komit pertama | 18 Mei 2014 | 16 November 2014 | 3 Jan 2016 | 18 Mei 2014 | 15 Februari 2015 | 17 Mei 2015 |
Kontributor | 18 | 9 | 15 | 14 | 30 | 20 |
Bintang Github | 1267 | 292 | 113 | 320 | 89 | 152 |
Github Garpu | 1291 | 245 | 121 | 1291** | 146 | 71 |
Diambil dari halaman Docker Hub.
Bercabang dari proyek buruh pelabuhan MySQL.
mysql (Docker)
Gambar dibangun dan dikelola oleh komunitas Docker dengan bantuan tim MySQL. Ini dapat dianggap sebagai gambar server MySQL paling populer yang tersedia untuk umum yang dihosting di Docker Hub dan salah satu yang paling awal di pasar (komit pertama adalah 18 Mei 2014). Telah bercabang ~1300 kali dengan 18 kontributor aktif. Ini mendukung versi Docker hingga 1.6 berdasarkan upaya terbaik. Pada saat penulisan ini, semua versi utama MySQL didukung - 5.5, 5.6, 5.7 dan 8.0 hanya pada arsitektur x86_64.
Sebagian besar gambar MySQL yang dibuat oleh orang lain terinspirasi oleh cara gambar ini dibuat. Gambar MariaDB, Percona, dan MySQL Server (Oracle) mengikuti variabel lingkungan yang serupa, struktur file konfigurasi, dan alur proses inisialisasi container.
Variabel lingkungan berikut tersedia di sebagian besar image container MySQL di Docker Hub:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
Ukuran gambar (tag:terbaru) rata-rata kecil (129MB), mudah digunakan, dirawat dengan baik dan diperbarui secara berkala oleh pengelola. Jika aplikasi Anda memerlukan wadah database MySQL terbaru, ini adalah citra publik paling direkomendasikan yang dapat Anda gunakan.
mariadb (Docker)
Gambar dikelola oleh komunitas Docker dengan bantuan tim MariaDB. Ia menggunakan gaya struktur bangunan yang sama dengan gambar mysql (Docker), tetapi ia hadir dengan dukungan beberapa arsitektur:
- Linux x86-64 (amd64)
- ARMv8 64-bit (arm64v8)
- x86/i686 (i386)
- IBM POWER8 (ppc64le)
Pada saat penulisan ini, gambar tersebut mendukung MariaDB versi 5.5 hingga 10.4, di mana gambar dengan ukuran tag "terbaru" sekitar 120MB. Gambar ini berfungsi sebagai gambar tujuan umum dan mengikuti instruksi, variabel lingkungan dan struktur file konfigurasi sebagai mysql (Docker). Sebagian besar aplikasi yang memerlukan MySQL sebagai backend database umumnya kompatibel dengan MariaDB, karena keduanya menggunakan protokol yang sama.
Server MariaDB dulunya merupakan cabang dari MySQL tetapi sekarang telah dialihkan darinya. Dalam hal desain arsitektur database, beberapa versi MariaDB tidak 100% kompatibel dan tidak lagi merupakan pengganti drop-in dengan versi MySQL masing-masing. Lihat halaman ini untuk detailnya. Namun, ada cara untuk bermigrasi antara satu sama lain dengan menggunakan cadangan logis. Sederhananya, begitu Anda berada di ekosistem MariaDB, Anda mungkin harus tetap menggunakannya. Mencampur atau beralih antara MariaDB dan MySQL dalam sebuah cluster tidak disarankan.
Jika Anda ingin menyiapkan penyiapan MariaDB yang lebih canggih (replikasi, Galera, sharding), ada gambar lain yang dibuat untuk mencapai tujuan tersebut dengan lebih mudah, misalnya bitnami/mariadb seperti yang dijelaskan lebih lanjut.
percona (Docker)
Percona Server adalah fork dari MySQL yang dibuat oleh Percona. Ini adalah satu-satunya image resmi Percona Server Docker, yang dibuat dan dikelola oleh tim Percona. Ini mendukung arsitektur x86 dan x86_64 dan gambar didasarkan pada CentOS 7. Percona hanya memelihara 3 versi MySQL utama terbaru untuk gambar kontainer - 5.6, 5.7 dan 8.0.
Repositori kode menunjukkan bahwa komit pertama adalah 3 Jan 2016 dengan 15 kontributor aktif sebagian besar dari tim pengembangan Percona. Server Percona untuk MySQL hadir dengan mesin penyimpanan XtraDB (pengganti drop-in untuk InnoDB) dan mengikuti rilis Oracle MySQL hulu dengan sangat dekat (termasuk semua perbaikan bug di dalamnya) dengan beberapa fitur tambahan seperti mesin penyimpanan MyRocks, TokuDB serta Percona's perbaikan bug sendiri. Di satu sisi, Anda dapat menganggapnya sebagai versi perbaikan dari MySQL Oracle. Anda dapat dengan mudah beralih antara gambar MySQL dan Server Percona, asalkan Anda menjalankan versi yang kompatibel.
Gambar mengenali dua variabel lingkungan tambahan untuk TokuDB dan RocksDB untuk MySQL (tersedia sejak v5.6):
- INIT_TOKUDB - Setel ke 1 untuk mengizinkan container dimulai dengan mesin penyimpanan TOKUDB yang diaktifkan.
- INIT_ROCKSDB - Setel ke 1 untuk mengizinkan container dimulai dengan mesin penyimpanan ROCKSDB yang diaktifkan.
server-mysql (Oracle)
Repositori bercabang dari mysql oleh tim Docker. Gambar dibuat, dipelihara, dan didukung oleh tim MySQL di Oracle yang dibangun di atas gambar dasar Oracle Linux 7. Gambar MySQL 8.0 dilengkapi dengan Server Komunitas MySQL (minimal) dan MySQL Shell dan server dikonfigurasi untuk mengekspos protokol X pada port 33060 dari repositori minimal. Paket minimal dirancang untuk digunakan oleh gambar Docker resmi untuk MySQL. Ini memotong beberapa bagian MySQL yang tidak penting seperti innochecksum, myisampack, mysql_plugin, tetapi sebaliknya merupakan produk yang sama. Oleh karena itu, ia memiliki jejak gambar yang sangat kecil yaitu sekitar 99 MB.
Satu hal penting yang perlu diperhatikan adalah gambar memiliki skrip pemeriksaan kesehatan bawaan, yang sangat berguna bagi sebagian orang yang membutuhkan logika ketersediaan yang akurat. Jika tidak, orang harus menulis perintah (atau skrip) HEALTHCHECK Docker khusus untuk memeriksa kondisi container.
mysql-xx-centos7 &mariadb-xx-centos7 (CentOS)
Gambar kontainer dibangun dan dikelola oleh tim CentOS yang mencakup server database MySQL untuk OpenShift dan penggunaan umum. Untuk gambar berbasis RHEL, Anda dapat mengambilnya dari Katalog Kontainer Red Hat sementara gambar berbasis CentOS dihosting secara publik di Docker Hub pada halaman yang berbeda untuk setiap versi utama (hanya mencantumkan gambar dengan lebih dari 10 juta unduhan):
- MySQL 8.0:https://hub.docker.com/r/centos/mysql-80-centos7
- MySQL 5.7:https://hub.docker.com/r/centos/mysql-57-centos7
- MySQL 5.6:https://hub.docker.com/r/centos/mysql-56-centos7
- MySQL 5.5:https://hub.docker.com/r/centos/mysql-55-centos7
- MariaDB 10.2:https://hub.docker.com/r/centos/mariadb-102-centos7
- MariaDB 10.1:https://hub.docker.com/r/centos/mariadb-101-centos7
Struktur gambar sedikit berbeda dan tidak menggunakan tag gambar seperti yang lain, sehingga nama gambar menjadi sedikit lebih panjang. Karena itu, Anda harus membuka halaman Docker Hub yang benar untuk mendapatkan versi utama yang ingin Anda tarik.
Menurut halaman repositori kode, 30 kontributor telah berkolaborasi dalam proyek ini sejak 15 Februari 2015. Ini mendukung MySQL 5.5 hingga 8.0 dan MariaDB 5.5 hingga 10.2 untuk arsitektur x86_64 saja. Jika Anda sangat bergantung pada infrastruktur containerisasi Red Hat seperti OpenShift, ini mungkin gambar yang paling populer atau terpelihara dengan baik untuk MySQL dan MariaDB.
Variabel lingkungan berikut mempengaruhi file konfigurasi MySQL/MariaDB dan semuanya opsional:
- MYSQL_LOWER_CASE_TABLE_NAMES (default:0)
- MYSQL_MAX_CONNECTIONS (default:151)
- MYSQL_MAX_ALLOWED_PACKET (default:200 juta)
- MYSQL_FT_MIN_WORD_LEN (default:4)
- MYSQL_FT_MAX_WORD_LEN (default:20)
- MYSQL_AIO (default:1)
- MYSQL_TABLE_OPEN_CACHE (default:400)
- MYSQL_KEY_BUFFER_SIZE (default:32M atau 10% dari memori yang tersedia)
- MYSQL_SORT_BUFFER_SIZE (default:256K)
- MYSQL_READ_BUFFER_SIZE (default:8M atau 5% dari memori yang tersedia)
- MYSQL_INNODB_BUFFER_POOL_SIZE (default:32M atau 50% dari memori yang tersedia)
- MYSQL_INNODB_LOG_FILE_SIZE (default:8M atau 15% dari memori yang tersedia)
- MYSQL_INNODB_LOG_BUFFER_SIZE (default:8M atau 15% dari memori yang tersedia)
- MYSQL_DEFAULTS_FILE (default:/etc/my.cnf)
- MYSQL_BINLOG_FORMAT (default:pernyataan)
- MYSQL_LOG_QUERIES_ENABLED (default:0)
Gambar mendukung penyetelan otomatis MySQL saat gambar MySQL berjalan dengan set parameter --memory dan jika Anda tidak menentukan nilai untuk parameter berikut, nilainya akan otomatis dihitung berdasarkan memori yang tersedia:
- MYSQL_KEY_BUFFER_SIZE (default:10%)
- MYSQL_READ_BUFFER_SIZE (default:5%)
- MYSQL_INNODB_BUFFER_POOL_SIZE (default:50%)
- MYSQL_INNODB_LOG_FILE_SIZE (default:15%)
- MYSQL_INNODB_LOG_BUFFER_SIZE (default:15%)
bitnami/mariadb
Gambar dibuat dan dikelola oleh Bitnami, pakar dalam pengemasan perangkat lunak dalam penerapan virtual atau cloud. Gambar dirilis setiap hari dengan paket distribusi terbaru yang tersedia dan menggunakan gambar berbasis Debian minimalis yang disebut minideb. Dengan demikian, ukuran gambar untuk tag terbaru adalah yang terkecil di antara semuanya yaitu sekitar 87MB. Proyek ini memiliki 20 kontributor dengan komit pertama terjadi pada 17 Mei 2015. Saat penulisan ini, hanya mendukung MariaDB 10.1 hingga 10.3.
Salah satu fitur luar biasa dari gambar ini adalah kemampuan untuk menerapkan pengaturan MariaDB yang sangat tersedia melalui variabel lingkungan Docker. Kluster replikasi master-slave MariaDB tanpa henti dapat dengan mudah disiapkan dengan image Bitnami MariaDB Docker menggunakan variabel lingkungan berikut:
- MARIADB_REPLICATION_MODE:Mode replikasi. Kemungkinan nilai master/slave. Tidak ada default.
- MARIADB_REPLICATION_USER:Pengguna replikasi yang dibuat pada master saat pertama kali dijalankan. Tidak ada default.
- MARIADB_REPLICATION_PASSWORD:Sandi pengguna replikasi. Tidak ada default.
- MARIADB_MASTER_HOST:Nama host/IP master replikasi (parameter slave). Tidak ada default.
- MARIADB_MASTER_PORT_NUMBER:Port server master replikasi (parameter slave). Default ke 3306.
- MARIADB_MASTER_ROOT_USER:Pengguna pada master replikasi dengan akses ke MARIADB_DATABASE (parameter slave). Default untuk melakukan root
- MARIADB_MASTER_ROOT_PASSWORD:Kata sandi pengguna pada master replikasi dengan akses ke
- MARIADB_DATABASE (parameter budak). Tidak ada default.
Dalam kluster replikasi, Anda dapat memiliki satu master dan nol atau lebih budak. Saat replikasi diaktifkan, node master berada dalam mode baca-tulis, sedangkan budak berada dalam mode hanya-baca. Untuk performa terbaik, disarankan untuk membatasi pembacaan pada slave.
Selain itu, gambar-gambar ini juga mendukung penerapan di Kubernetes sebagai Diagram Helm. Anda dapat membaca lebih lanjut tentang langkah-langkah instalasi di repositori Bitnami MariaDB Chart GitHub.
Kesimpulan
Ada banyak sekali gambar server MySQL yang telah disumbangkan oleh komunitas dan kami tidak dapat membahas semuanya di sini. Ingatlah bahwa gambar-gambar ini populer karena dibuat untuk penggunaan tujuan umum. Beberapa gambar yang kurang populer dapat melakukan hal-hal yang jauh lebih canggih, seperti orkestrasi wadah basis data, bootstrap otomatis, dan penskalaan otomatis. Gambar yang berbeda memberikan pendekatan berbeda yang dapat digunakan untuk mengatasi masalah lain.