Un'immagine Docker può essere creata da chiunque abbia la capacità di scrivere uno script. Ecco perché ci sono molte immagini simili costruite dalla comunità, con piccole differenze ma che servono davvero a uno scopo comune. Una buona (e popolare) immagine del contenitore deve avere una documentazione ben scritta con spiegazioni chiare, un repository gestito attivamente e con aggiornamenti regolari. Dai un'occhiata a questo post del blog se vuoi imparare come creare e pubblicare la tua immagine Docker per MySQL, o questo post del blog se vuoi semplicemente imparare le basi dell'esecuzione di MySQL su Docker.
In questo post del blog, esamineremo alcune delle immagini Docker più popolari per eseguire il nostro server MySQL o MariaDB. Le immagini che abbiamo scelto sono immagini pubbliche di uso generale che possono almeno eseguire un servizio MySQL. Alcuni di essi includono applicazioni non essenziali relative a MySQL, mentre altri servono solo come una semplice istanza mysqld. L'elenco qui si basa sul risultato di Docker Hub, la più grande libreria e community al mondo per le immagini dei contenitori.
TLDR
La tabella seguente riassume le diverse opzioni:
Aspetto | MySQL (docker) | MariaDB (Docker) | Percona (docker) | MySQL (Oracle) | MySQL/MariaDB (CentOS) | MariaDB (Bitnami) |
---|---|---|---|---|---|---|
Download | 10M+ | 10M+ | 10M+ | 10M+ | 10M+ | 10M+ |
Hub 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 |
Pagina del progetto | mysql | mariadb | percona-docker | mysql-docker | contenitore-mysql | bitnami-docker-mariadb |
Immagine di base | Debian 9 | Ubuntu 18.04 (bionico) Ubuntu 14.04 (affidabile) | CentOS 7 | Oracle Linux 7 | RHEL 7 CentOS 7 | Debian 9 (minideb) Oracle Linux 7 |
Versioni database supportate | 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 |
Piattaforme supportate | x86_64 | x86 x86_64 arm64v8 ppc64le | x86 x86_64 | x86_64 | x86_64 | x86_64 |
Dimensione immagine (tag:più recente) | 129 MB | 120 MB | 193 MB | 99 MB | 178 MB | 87 MB |
Primo commit | 18 maggio 2014 | 16 novembre 2014 | 3 gennaio 2016 | 18 maggio 2014 | 15 febbraio 2015 | 17 maggio 2015 |
Collaboratori | 18 | 9 | 15 | 14 | 30 | 20 |
Stella Github | 1267 | 292 | 113 | 320 | 89 | 152 |
Forcella Github | 1291 | 245 | 121 | 1291** | 146 | 71 |
Preso dalla pagina Docker Hub.
Biforcato dal progetto Docker MySQL.
mysql (docker)
Le immagini sono costruite e mantenute dalla comunità Docker con l'aiuto del team MySQL. Può essere considerata la più popolare immagine del server MySQL pubblicamente disponibile ospitata su Docker Hub e una delle prime sul mercato (il primo commit è stato il 18 maggio 2014). È stato biforcato circa 1300 volte con 18 contributori attivi. Supporta la versione Docker fino alla 1.6 sulla base del massimo sforzo. Al momento in cui scrivo, sono supportate tutte le versioni principali di MySQL:5.5, 5.6, 5.7 e 8.0 solo su architettura x86_64.
La maggior parte delle immagini MySQL create da altri sono ispirate al modo in cui è stata creata questa immagine. Le immagini di MariaDB, Percona e MySQL Server (Oracle) seguono variabili di ambiente, struttura del file di configurazione e flusso del processo di inizializzazione del contenitore simili.
Le seguenti variabili di ambiente sono disponibili sulla maggior parte delle immagini del contenitore MySQL su Docker Hub:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- USER_MYSQL
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
La dimensione dell'immagine (tag:latest) è mediamente piccola (129 MB), facile da usare, ben mantenuta e aggiornata regolarmente dal manutentore. Se la tua applicazione richiede l'ultimo contenitore di database MySQL, questa è l'immagine pubblica più consigliata che puoi utilizzare.
mariadb (Docker)
Le immagini sono gestite dalla comunità Docker con l'aiuto del team di MariaDB. Utilizza lo stesso stile di struttura dell'edificio dell'immagine mysql (Docker), ma viene fornito con il supporto di più architetture:
- Linux x86-64 (amd64)
- ARMv8 a 64 bit (arm64v8)
- x86/i686 (i386)
- IBM POWER8 (ppc64le)
Al momento in cui scrivo, le immagini supportano MariaDB dalla versione 5.5 fino alla 10.4, dove l'immagine con la dimensione del tag "più recente" è di circa 120 MB. Questa immagine funge da immagine generica e segue le istruzioni, le variabili di ambiente e la struttura del file di configurazione come mysql (Docker). La maggior parte delle applicazioni che richiedono MySQL come back-end del database è comunemente compatibile con MariaDB, poiché entrambe parlano lo stesso protocollo.
Il server MariaDB era un fork di MySQL, ma ora è stato deviato da esso. In termini di progettazione dell'architettura del database, alcune versioni di MariaDB non sono compatibili al 100% e non sostituiscono più le rispettive versioni di MySQL. Dai un'occhiata a questa pagina per i dettagli. Tuttavia, esistono modi per migrare tra loro utilizzando il backup logico. Detto semplicemente, che una volta che sei nell'ecosistema MariaDB, probabilmente devi mantenerlo. Non è consigliabile mescolare o passare tra MariaDB e MySQL in un cluster.
Se desideri configurare una configurazione MariaDB più avanzata (replica, Galera, sharding), ci sono altre immagini create per raggiungere quell'obiettivo molto più facilmente, ad esempio bitnami/mariadb come spiegato più avanti.
percona (mobile mobile)
Percona Server è un fork di MySQL creato da Percona. Queste sono le uniche immagini ufficiali di Percona Server Docker, create e mantenute dal team Percona. Supporta sia l'architettura x86 che x86_64 e l'immagine è basata su CentOS 7. Percona mantiene solo le ultime 3 versioni principali di MySQL per le immagini container:5.6, 5.7 e 8.0.
Il repository di codice sottolinea che il primo commit è stato il 3 gennaio 2016 con 15 collaboratori attivi principalmente dal team di sviluppo di Percona. Percona Server per MySQL viene fornito con il motore di archiviazione XtraDB (un sostituto drop-in di InnoDB) e segue molto da vicino le versioni di Oracle MySQL a monte (incluse tutte le correzioni di bug in esso contenute) con alcune funzionalità aggiuntive come il motore di archiviazione MyRocks, TokuDB e Percona's proprie correzioni di bug. In un certo senso, puoi pensarla come una versione migliorata di MySQL di Oracle. Puoi passare facilmente tra le immagini MySQL e Percona Server, a condizione che tu stia utilizzando la versione compatibile.
Le immagini riconoscono due variabili di ambiente aggiuntive per TokuDB e RocksDB per MySQL (disponibili dalla v5.6):
- INIT_TOKUDB - Imposta su 1 per consentire l'avvio del contenitore con il motore di archiviazione TOKUDB abilitato.
- INIT_ROCKSDB - Impostato su 1 per consentire l'avvio del container con il motore di archiviazione ROCKSDB abilitato.
server-mysql (Oracle)
Il repository è biforcato da mysql dal team Docker. Le immagini vengono create, mantenute e supportate dal team MySQL di Oracle basato sull'immagine di base di Oracle Linux 7. L'immagine MySQL 8.0 viene fornita con MySQL Community Server (minimo) e MySQL Shell e il server è configurato per esporre il protocollo X sulla porta 33060 dal repository minimo. Il pacchetto minimo è stato progettato per essere utilizzato dalle immagini Docker ufficiali per MySQL. Elimina alcuni dei pezzi non essenziali di MySQL come innochecksum, myisampack, mysql_plugin, ma per il resto è lo stesso prodotto. Pertanto, ha un'impronta dell'immagine molto piccola che è di circa 99 MB.
Un punto importante da notare è che le immagini hanno uno script di controllo dello stato integrato, che è molto utile per alcune persone che hanno bisogno di una logica di disponibilità accurata. Altrimenti, le persone devono scrivere un comando (o script) HEALTHCHECK di Docker personalizzato per verificare lo stato del contenitore.
mysql-xx-centos7 e mariadb-xx-centos7 (CentOS)
Le immagini del contenitore sono create e gestite dal team CentOS che include il server di database MySQL per OpenShift e l'uso generale. Per le immagini basate su RHEL, puoi estrarle dal catalogo container di Red Hat mentre le immagini basate su CentOS sono ospitate pubblicamente su Docker Hub su pagine diverse per ogni versione principale (elenca solo le immagini con oltre 10 milioni di download):
- 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
La struttura dell'immagine è leggermente diversa e non fa uso di tag immagine come altri, quindi il nome dell'immagine diventa un po' più lungo. Detto questo, devi andare alla pagina Docker Hub corretta per ottenere la versione principale che desideri estrarre.
Secondo la pagina del repository di codice, 30 contributori hanno collaborato al progetto dal 15 febbraio 2015. Supporta MySQL 5.5 fino a 8.0 e MariaDB 5.5 fino a 10.2 solo per l'architettura x86_64. Se fai molto affidamento sull'infrastruttura di containerizzazione di Red Hat come OpenShift, queste sono probabilmente le immagini più popolari o ben mantenute per MySQL e MariaDB.
Le seguenti variabili di ambiente influenzano il file di configurazione di MySQL/MariaDB e sono tutte facoltative:
- MYSQL_LOWER_CASE_TABLE_NAMES (predefinito:0)
- MYSQL_MAX_CONNECTIONS (predefinito:151)
- MYSQL_MAX_ALLOWED_PACKET (predefinito:200 milioni)
- MYSQL_FT_MIN_WORD_LEN (predefinito:4)
- MYSQL_FT_MAX_WORD_LEN (predefinito:20)
- MYSQL_AIO (predefinito:1)
- MYSQL_TABLE_OPEN_CACHE (predefinito:400)
- MYSQL_KEY_BUFFER_SIZE (predefinito:32M o 10% di memoria disponibile)
- MYSQL_SORT_BUFFER_SIZE (predefinito:256K)
- MYSQL_READ_BUFFER_SIZE (predefinito:8M o 5% di memoria disponibile)
- MYSQL_INNODB_BUFFER_POOL_SIZE (predefinito:32M o 50% di memoria disponibile)
- MYSQL_INNODB_LOG_FILE_SIZE (predefinito:8M o 15% di memoria disponibile)
- MYSQL_INNODB_LOG_BUFFER_SIZE (predefinito:8M o 15% di memoria disponibile)
- FILE_MYSQL_DEFAULTS (predefinito:/etc/my.cnf)
- MYSQL_BINLOG_FORMAT (predefinito:istruzione)
- MYSQL_LOG_QUERIES_ENABLED (predefinito:0)
Le immagini supportano l'autotuning MySQL quando l'immagine MySQL è in esecuzione con il parametro --memory impostato e se non hai specificato il valore per i seguenti parametri, i loro valori verranno calcolati automaticamente in base alla memoria disponibile:
- MYSQL_KEY_BUFFER_SIZE (predefinito:10%)
- MYSQL_READ_BUFFER_SIZE (predefinito:5%)
- MYSQL_INNODB_BUFFER_POOL_SIZE (predefinito:50%)
- MYSQL_INNODB_LOG_FILE_SIZE (predefinito:15%)
- MYSQL_INNODB_LOG_BUFFER_SIZE (predefinito:15%)
bitnami/mariadb
Le immagini sono costruite e mantenute da Bitnami, esperti in pacchetti software in distribuzione virtuale o cloud. Le immagini vengono rilasciate quotidianamente con gli ultimi pacchetti di distribuzione disponibili e utilizzano un'immagine minimalista basata su Debian chiamata minideb. Pertanto, la dimensione dell'immagine per l'ultimo tag è la più piccola tra tutte, circa 87 MB. Il progetto ha 20 contributori con il primo commit avvenuto il 17 maggio 2015. Al momento in cui scrivo, supporta solo MariaDB 10.1 fino alla 10.3.
Una caratteristica eccezionale di questa immagine è la possibilità di distribuire una configurazione MariaDB ad alta disponibilità tramite le variabili di ambiente Docker. Un cluster di replica master-slave MariaDB a zero tempi di inattività può essere facilmente configurato con l'immagine Bitnami MariaDB Docker utilizzando le seguenti variabili di ambiente:
- MARIADB_REPLICATION_MODE:la modalità di replica. Possibili valori master/slave. Nessun valore predefinito.
- MARIADB_REPLICATION_USER:l'utente di replica creato sul master alla prima esecuzione. Nessun valore predefinito.
- MARIADB_REPLICATION_PASSWORD:la password degli utenti di replica. Nessun valore predefinito.
- MARIADB_MASTER_HOST:nome host/IP del master di replica (parametro slave). Nessun valore predefinito.
- MARIADB_MASTER_PORT_NUMBER:Porta server del master di replica (parametro slave). Il valore predefinito è 3306.
- MARIADB_MASTER_ROOT_USER:utente su master di replica con accesso a MARIADB_DATABASE (parametro slave). Di default è root
- MARIADB_MASTER_ROOT_PASSWORD:Password dell'utente sul master di replica con accesso a
- MARIADB_DATABASE (parametro slave). Nessun valore predefinito.
In un cluster di replica, puoi avere un master e zero o più slave. Quando la replica è abilitata, il nodo master è in modalità di lettura-scrittura, mentre gli slave sono in modalità di sola lettura. Per prestazioni ottimali è consigliabile limitare le letture agli slave.
Inoltre, queste immagini supportano anche la distribuzione su Kubernetes come grafici Helm. Puoi leggere ulteriori informazioni sui passaggi di installazione nel repository GitHub Bitnami MariaDB Chart.
Conclusioni
Ci sono tonnellate di immagini del server MySQL che sono state fornite dalla comunità e non possiamo coprirle tutte qui. Tieni presente che queste immagini sono popolari perché sono create per un uso generico. Alcune immagini meno popolari possono fare cose molto più avanzate, come l'orchestrazione del contenitore del database, il bootstrap automatico e il ridimensionamento automatico. Immagini diverse forniscono approcci diversi che possono essere utilizzati per risolvere altri problemi.