Une image Docker peut être créée par toute personne ayant la capacité d'écrire un script. C'est pourquoi de nombreuses images similaires sont construites par la communauté, avec des différences mineures mais servant vraiment un objectif commun. Une bonne (et populaire) image de conteneur doit avoir une documentation bien écrite avec des explications claires, un référentiel activement maintenu et avec des mises à jour régulières. Consultez cet article de blog si vous souhaitez apprendre à créer et publier votre propre image Docker pour MySQL, ou cet article de blog si vous souhaitez simplement apprendre les bases de l'exécution de MySQL sur Docker.
Dans cet article de blog, nous allons examiner certaines des images Docker les plus populaires pour exécuter notre serveur MySQL ou MariaDB. Les images que nous avons choisies sont des images publiques à usage général qui peuvent au moins exécuter un service MySQL. Certains d'entre eux incluent des applications non essentielles liées à MySQL, tandis que d'autres servent simplement d'instance mysqld simple. La liste ici est basée sur le résultat de Docker Hub, la plus grande bibliothèque et communauté au monde pour les images de conteneurs.
TLDR
Le tableau suivant résume les différentes options :
Aspect | MySQL (Docker) | MariaDB (Docker) | Percône (Docker) | MySQL (Oracle) | MySQL/MariaDB (CentOS) | MariaDB (Bitnami) |
---|---|---|---|---|---|---|
Téléchargements | 10M+ | 10M+ | 10M+ | 10M+ | 10M+ | 10M+ |
Docker Hub | mysql | mariadb | percône | mysql/mysql-server | mysql-80-centos7 mysql-57-centos7 mysql-56-centos7 mysql-55-centos7 mariadb-102-centos7 mariadb-101-centos7 | bitnami/mariadb |
Page du projet | mysql | mariadb | percona-docker | mysql-docker | mysql-container | bitnami-docker-mariadb |
Image de base | Debian 9 | Ubuntu 18.04 (bionique) Ubuntu 14.04 (de confiance) | CentOS 7 | Oracle Linux 7 | RHEL 7 CentOS 7 | Debian 9 (minideb) Oracle Linux 7 |
Versions de base de données prises en charge | 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 |
Plateformes prises en charge | x86_64 | x86 x86_64 arm64v8 ppc64le | x86 x86_64 | x86_64 | x86_64 | x86_64 |
Taille de l'image (balise :dernière) | 129 Mo | 120 Mo | 193 Mo | 99 Mo | 178 Mo | 87 Mo |
Premier commit | 18 mai 2014 | 16 novembre 2014 | 3 janvier 2016 | 18 mai 2014 | 15 février 2015 | 17 mai 2015 |
Contributeurs | 18 | 9 | 15 | 14 | 30 | 20 |
Étoile Github | 1267 | 292 | 113 | 320 | 89 | 152 |
Fourchette Github | 1291 | 245 | 121 | 1291** | 146 | 71 |
Extrait de la page Docker Hub.
Dérivé du projet docker MySQL.
mysql (Docker)
Les images sont construites et maintenues par la communauté Docker avec l'aide de l'équipe MySQL. Il peut être considéré comme les images de serveur MySQL accessibles au public les plus populaires hébergées sur Docker Hub et l'une des plus anciennes du marché (le premier commit a eu lieu le 18 mai 2014). Il a été bifurqué ~1300 fois avec 18 contributeurs actifs. Il prend en charge la version Docker jusqu'à 1.6 dans la mesure du possible. Au moment de la rédaction, toutes les versions majeures de MySQL sont prises en charge - 5.5, 5.6, 5.7 et 8.0 sur l'architecture x86_64 uniquement.
La plupart des images MySQL construites par d'autres sont inspirées de la façon dont cette image a été construite. Les images MariaDB, Percona et MySQL Server (Oracle) suivent des variables d'environnement, une structure de fichier de configuration et un flux de processus d'initialisation de conteneur similaires.
Les variables d'environnement suivantes sont disponibles sur la plupart des images de conteneur MySQL sur Docker Hub :
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
La taille de l'image (tag :latest) est moyennement petite (129 Mo), facile à utiliser, bien entretenue et mise à jour régulièrement par le mainteneur. Si votre application nécessite le dernier conteneur de base de données MySQL, il s'agit de l'image publique la plus recommandée que vous puissiez utiliser.
mariadb (Docker)
Les images sont maintenues par la communauté Docker avec l'aide de l'équipe MariaDB. Il utilise le même style de structure de construction que l'image mysql (Docker), mais il est livré avec la prise en charge de plusieurs architectures :
- Linux x86-64 (amd64)
- ARMv8 64 bits (arm64v8)
- x86/i686 (i386)
- IBM POWER8 (ppc64le)
Au moment d'écrire ces lignes, les images prennent en charge MariaDB version 5.5 jusqu'à 10.4, où l'image avec la "dernière" taille de balise est d'environ 120 Mo. Cette image sert d'image à usage général et suit les instructions, les variables d'environnement et la structure du fichier de configuration comme mysql (Docker). La plupart des applications nécessitant MySQL comme base de données sont généralement compatibles avec MariaDB, car les deux utilisent le même protocole.
Le serveur MariaDB était autrefois un fork de MySQL, mais il en a maintenant été détourné. En termes de conception d'architecture de base de données, certaines versions de MariaDB ne sont pas compatibles à 100 % et ne remplacent plus leurs versions MySQL respectives. Consultez cette page pour plus de détails. Cependant, il existe des moyens de migrer entre eux en utilisant une sauvegarde logique. En termes simples, une fois que vous êtes dans l'écosystème MariaDB, vous devez probablement vous y tenir. Il n'est pas recommandé de mélanger ou de basculer entre MariaDB et MySQL dans un cluster.
Si vous souhaitez configurer une configuration MariaDB plus avancée (réplication, Galera, sharding), il existe d'autres images conçues pour atteindre cet objectif beaucoup plus facilement, par exemple, bitnami/mariadb comme expliqué plus bas.
percône (Docker)
Percona Server est un fork de MySQL créé par Percona. Ce sont les seules images officielles de Percona Server Docker, créées et maintenues par l'équipe Percona. Il prend en charge les architectures x86 et x86_64 et l'image est basée sur CentOS 7. Percona ne gère que les 3 dernières versions majeures de MySQL pour les images de conteneur - 5.6, 5.7 et 8.0.
Le référentiel de code souligne que le premier commit a eu lieu le 3 janvier 2016 avec 15 contributeurs actifs, principalement de l'équipe de développement Percona. Percona Server pour MySQL est livré avec le moteur de stockage XtraDB (un remplacement instantané d'InnoDB) et suit de très près les versions en amont d'Oracle MySQL (y compris toutes les corrections de bogues qu'il contient) avec quelques fonctionnalités supplémentaires telles que le moteur de stockage MyRocks, TokuDB ainsi que Percona. propres corrections de bogues. D'une certaine manière, vous pouvez le considérer comme une version améliorée de MySQL d'Oracle. Vous pouvez facilement basculer entre les images MySQL et Percona Server, à condition que vous utilisiez la version compatible.
Les images reconnaissent deux variables d'environnement supplémentaires pour TokuDB et RocksDB pour MySQL (disponibles depuis la v5.6) :
- INIT_TOKUDB - Défini sur 1 pour permettre au conteneur d'être démarré avec le moteur de stockage TOKUDB activé.
- INIT_ROCKSDB - Défini sur 1 pour permettre au conteneur d'être démarré avec le moteur de stockage ROCKSDB activé.
mysql-server (Oracle)
Le référentiel est dérivé de mysql par l'équipe Docker. Les images sont créées, maintenues et prises en charge par l'équipe MySQL d'Oracle, construites sur l'image de base Oracle Linux 7. L'image MySQL 8.0 est fournie avec MySQL Community Server (minimal) et MySQL Shell et le serveur est configuré pour exposer le protocole X sur le port 33060 à partir du référentiel minimal. Le package minimal a été conçu pour être utilisé par les images Docker officielles pour MySQL. Il supprime certains des éléments non essentiels de MySQL comme innochecksum, myisampack, mysql_plugin, mais c'est par ailleurs le même produit. Par conséquent, il a une très petite empreinte d'image qui est d'environ 99 Mo.
Un point important à noter est que les images ont un script de vérification de l'état intégré, ce qui est très pratique pour certaines personnes qui ont besoin d'une logique de disponibilité précise. Sinon, les utilisateurs doivent écrire une commande (ou un script) HEALTHCHECK personnalisée de Docker pour vérifier l'état du conteneur.
mysql-xx-centos7 &mariadb-xx-centos7 (CentOS)
Les images de conteneur sont créées et maintenues par l'équipe CentOS qui inclut le serveur de base de données MySQL pour OpenShift et une utilisation générale. Pour les images basées sur RHEL, vous pouvez les extraire du catalogue de conteneurs de Red Hat tandis que les images basées sur CentOS sont hébergées publiquement sur Docker Hub sur différentes pages pour chaque version majeure (répertorier uniquement les images avec plus de 10 millions de téléchargements) :
- 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 structure de l'image est un peu différente et elle n'utilise pas de balise d'image comme les autres, ainsi le nom de l'image devient un peu plus long à la place. Cela dit, vous devez vous rendre sur la bonne page Docker Hub pour obtenir la version majeure que vous souhaitez extraire.
Selon la page du référentiel de code, 30 contributeurs ont collaboré au projet depuis le 15 février 2015. Il prend en charge MySQL 5.5 jusqu'à 8.0 et MariaDB 5.5 jusqu'à 10.2 pour l'architecture x86_64 uniquement. Si vous comptez beaucoup sur l'infrastructure de conteneurisation de Red Hat comme OpenShift, ce sont probablement les images les plus populaires ou les mieux entretenues pour MySQL et MariaDB.
Les variables d'environnement suivantes influencent le fichier de configuration MySQL/MariaDB et elles sont toutes facultatives :
- MYSQL_LOWER_CASE_TABLE_NAMES (par défaut :0)
- MYSQL_MAX_CONNECTIONS (par défaut :151)
- MYSQL_MAX_ALLOWED_PACKET (par défaut :200 M)
- MYSQL_FT_MIN_WORD_LEN (par défaut :4)
- MYSQL_FT_MAX_WORD_LEN (par défaut :20)
- MYSQL_AIO (par défaut :1)
- MYSQL_TABLE_OPEN_CACHE (par défaut :400)
- MYSQL_KEY_BUFFER_SIZE (par défaut :32 Mo ou 10 % de la mémoire disponible)
- MYSQL_SORT_BUFFER_SIZE (par défaut :256 Ko)
- MYSQL_READ_BUFFER_SIZE (par défaut :8 Mo ou 5 % de la mémoire disponible)
- MYSQL_INNODB_BUFFER_POOL_SIZE (par défaut :32 Mo ou 50 % de la mémoire disponible)
- MYSQL_INNODB_LOG_FILE_SIZE (par défaut :8 Mo ou 15 % de la mémoire disponible)
- MYSQL_INNODB_LOG_BUFFER_SIZE (par défaut :8 Mo ou 15 % de la mémoire disponible)
- MYSQL_DEFAULTS_FILE (par défaut :/etc/my.cnf)
- MYSQL_BINLOG_FORMAT (par défaut :instruction)
- MYSQL_LOG_QUERIES_ENABLED (par défaut :0)
Les images prennent en charge le réglage automatique de MySQL lorsque l'image MySQL s'exécute avec le jeu de paramètres --memory et si vous n'avez pas spécifié de valeur pour les paramètres suivants, leurs valeurs seront automatiquement calculées en fonction de la mémoire disponible :
- MYSQL_KEY_BUFFER_SIZE (par défaut :10 %)
- MYSQL_READ_BUFFER_SIZE (par défaut :5 %)
- MYSQL_INNODB_BUFFER_POOL_SIZE (par défaut :50 %)
- MYSQL_INNODB_LOG_FILE_SIZE (par défaut :15 %)
- MYSQL_INNODB_LOG_BUFFER_SIZE (par défaut :15 %)
bitnami/mariadb
Les images sont construites et maintenues par Bitnami, experts en packaging logiciel en déploiement virtuel ou cloud. Les images sont publiées quotidiennement avec les derniers packages de distribution disponibles et utilisent une image minimaliste basée sur Debian appelée minideb. Ainsi, la taille de l'image pour la dernière balise est la plus petite de toutes, soit environ 87 Mo. Le projet compte 20 contributeurs et le premier commit a eu lieu le 17 mai 2015. Au moment de la rédaction, il ne prend en charge que MariaDB 10.1 jusqu'à 10.3.
Une caractéristique exceptionnelle de cette image est la possibilité de déployer une configuration MariaDB hautement disponible via des variables d'environnement Docker. Un cluster de réplication maître-esclave MariaDB sans temps d'arrêt peut facilement être configuré avec l'image Bitnami MariaDB Docker à l'aide des variables d'environnement suivantes :
- MARIADB_REPLICATION_MODE :le mode de réplication. Valeurs possibles maître/esclave. Aucune valeur par défaut.
- MARIADB_REPLICATION_USER :l'utilisateur de réplication créé sur le maître lors de la première exécution. Aucune valeur par défaut.
- MARIADB_REPLICATION_PASSWORD :Le mot de passe des utilisateurs de réplication. Aucune valeur par défaut.
- MARIADB_MASTER_HOST :Nom d'hôte/IP du maître de réplication (paramètre esclave). Aucune valeur par défaut.
- MARIADB_MASTER_PORT_NUMBER :port serveur du maître de réplication (paramètre esclave). La valeur par défaut est 3306.
- MARIADB_MASTER_ROOT_USER :Utilisateur sur le maître de réplication avec accès à MARIADB_DATABASE (paramètre esclave). Racine par défaut
- MARIADB_MASTER_ROOT_PASSWORD :mot de passe de l'utilisateur sur le maître de réplication avec accès à
- MARIADB_DATABASE (paramètre esclave). Aucune valeur par défaut.
Dans un cluster de réplication, vous pouvez avoir un maître et zéro ou plusieurs esclaves. Lorsque la réplication est activée, le nœud maître est en mode lecture-écriture, tandis que les esclaves sont en mode lecture seule. Pour de meilleures performances, il est conseillé de limiter les lectures aux esclaves.
De plus, ces images prennent également en charge le déploiement sur Kubernetes en tant que Helm Charts. Vous pouvez en savoir plus sur les étapes d'installation dans le référentiel Bitnami MariaDB Chart GitHub.
Conclusion
Il y a des tonnes d'images de serveur MySQL qui ont été fournies par la communauté et nous ne pouvons pas toutes les couvrir ici. Gardez à l'esprit que ces images sont populaires car elles sont conçues pour un usage général. Certaines images moins populaires peuvent faire des choses beaucoup plus avancées, comme l'orchestration du conteneur de base de données, l'amorçage automatique et la mise à l'échelle automatique. Différentes images fournissent différentes approches qui peuvent être utilisées pour résoudre d'autres problèmes.