Een Docker-image kan worden gebouwd door iedereen die een script kan schrijven. Dat is de reden waarom er veel vergelijkbare afbeeldingen worden gebouwd door de gemeenschap, met kleine verschillen maar echt een gemeenschappelijk doel dienen. Een goede (en populaire) containerimage moet goed geschreven documentatie hebben met duidelijke uitleg, een actief onderhouden repository en met regelmatige updates. Bekijk dit blogbericht als je wilt leren hoe je je eigen Docker-image voor MySQL kunt bouwen en publiceren, of dit blogbericht als je gewoon de basis wilt leren van het draaien van MySQL op Docker.
In deze blogpost gaan we kijken naar enkele van de meest populaire Docker-afbeeldingen om onze MySQL- of MariaDB-server uit te voeren. De afbeeldingen die we hebben gekozen, zijn openbare afbeeldingen voor algemeen gebruik die op zijn minst een MySQL-service kunnen uitvoeren. Sommige bevatten niet-essentiële MySQL-gerelateerde applicaties, terwijl andere gewoon dienen als een gewone mysqld-instantie. De lijst hier is gebaseerd op het resultaat van Docker Hub, 's werelds grootste bibliotheek en community voor containerafbeeldingen.
TLDR
De volgende tabel geeft een overzicht van de verschillende opties:
Aspect | MySQL (Docker) | MariaDB (Docker) | Percona (Docker) | MySQL (Oracle) | MySQL/MariaDB (CentOS) | MariaDB (Bitnami) |
---|---|---|---|---|---|---|
Downloads | 10M+ | 10M+ | 10M+ | 10M+ | 10M+ | 10M+ |
Docker Hub | 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 |
Projectpagina | mysql | mariadb | percona-docker | mysql-docker | mysql-container | bitnami-docker-mariadb |
Basisafbeelding | Debian 9 | Ubuntu 18.04 (bionisch) Ubuntu 14.04 (betrouwbaar) | CentOS 7 | Oracle Linux 7 | RHEL 7 CentOS 7 | Debian 9 (minideb) Oracle Linux 7 |
Ondersteunde databaseversies | 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 |
Ondersteunde platforms | x86_64 | x86 x86_64 arm64v8 ppc64le | x86 x86_64 | x86_64 | x86_64 | x86_64 |
Afbeeldingsgrootte (tag:laatste) | 129 MB | 120 MB | 193 MB | 99 MB | 178 MB | 87 MB |
Eerste commit | 18 mei 2014 | 16 november 2014 | 3 januari 2016 | 18 mei 2014 | 15 februari 2015 | 17 mei 2015 |
Bijdragers | 18 | 9 | 15 | 14 | 30 | 20 |
Github-ster | 1267 | 292 | 113 | 320 | 89 | 152 |
Github-vork | 1291 | 245 | 121 | 1291** | 146 | 71 |
Genomen van de Docker Hub-pagina.
Gevorkt uit het MySQL-dockerproject.
mysql (Docker)
De afbeeldingen worden gebouwd en onderhouden door de Docker-gemeenschap met de hulp van het MySQL-team. Het kan worden beschouwd als de meest populaire openbaar beschikbare MySQL-serverafbeeldingen die worden gehost op Docker Hub en een van de vroegste op de markt (de eerste vastlegging was 18 mei 2014). Het is ~1300 keer geforkt met 18 actieve bijdragers. Het ondersteunt de Docker-versie tot 1.6 op basis van best-effort. Op dit moment van schrijven worden alle hoofdversies van MySQL ondersteund - 5.5, 5.6, 5.7 en 8.0 alleen op x86_64-architectuur.
De meeste MySQL-afbeeldingen die door anderen zijn gemaakt, zijn geïnspireerd op de manier waarop deze afbeelding is gemaakt. MariaDB-, Percona- en MySQL Server (Oracle)-afbeeldingen volgen een vergelijkbare omgevingsvariabelen, configuratiebestandsstructuur en containerinitialisatieprocesstroom.
De volgende omgevingsvariabelen zijn beschikbaar op de meeste MySQL-containerimages op Docker Hub:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
De afbeeldingsgrootte (tag:nieuwste) is gemiddeld klein (129 MB), gemakkelijk te gebruiken, goed onderhouden en regelmatig bijgewerkt door de beheerder. Als uw toepassing de nieuwste MySQL-databasecontainer vereist, is dit de meest aanbevolen openbare afbeelding die u kunt gebruiken.
mariadb (Docker)
De afbeeldingen worden onderhouden door de Docker-gemeenschap met de hulp van het MariaDB-team. Het gebruikt dezelfde bouwstijl als de mysql (Docker)-afbeelding, maar het wordt geleverd met ondersteuning voor meerdere architecturen:
- Linux x86-64 (amd64)
- ARMv8 64-bit (arm64v8)
- x86/i686 (i386)
- IBM POWER8 (ppc64le)
Op het moment van schrijven ondersteunen de afbeeldingen MariaDB-versie 5.5 tot 10.4, waar de afbeelding met de "nieuwste" taggrootte ongeveer 120 MB is. Deze afbeelding dient als een algemene afbeelding en volgt de instructies, omgevingsvariabelen en configuratiebestandsstructuur als mysql (Docker). De meeste applicaties die MySQL als database-backend nodig hebben, zijn over het algemeen compatibel met MariaDB, omdat beide over hetzelfde protocol praten.
De MariaDB-server was vroeger een vork van MySQL, maar is er nu van afgeleid. Wat het ontwerp van de database-architectuur betreft, zijn sommige MariaDB-versies niet 100% compatibel en niet langer een vervanging voor hun respectieve MySQL-versies. Bekijk deze pagina voor details. Er zijn echter manieren om tussen elkaar te migreren met behulp van logische back-up. Simpel gezegd, als je eenmaal in het MariaDB-ecosysteem bent, moet je je er waarschijnlijk aan houden. Mixen of schakelen tussen MariaDB en MySQL in een cluster wordt niet aanbevolen.
Als u een meer geavanceerde MariaDB-setup (replicatie, Galera, sharding) wilt opzetten, zijn er andere afbeeldingen gebouwd om dat doel veel gemakkelijker te bereiken, bijvoorbeeld bitnami/mariadb, zoals verderop wordt uitgelegd.
percona (Docker)
Percona Server is een fork van MySQL gemaakt door Percona. Dit zijn de enige officiële Percona Server Docker-images, gemaakt en onderhouden door het Percona-team. Het ondersteunt zowel x86- als x86_64-architectuur en het image is gebaseerd op CentOS 7. Percona onderhoudt alleen de laatste 3 grote MySQL-versies voor containerimages - 5.6, 5.7 en 8.0.
De coderepository wijst erop dat de eerste commit 3 januari 2016 was met 15 actieve bijdragers, voornamelijk van het Percona-ontwikkelteam. Percona Server voor MySQL wordt geleverd met XtraDB-opslagengine (een drop-in-vervanging voor InnoDB) en volgt de upstream Oracle MySQL-releases op de voet (inclusief alle bugfixes erin) met enkele extra functies zoals MyRocks-opslagengine, TokuDB en Percona's eigen bugfixes. In zekere zin kun je het zien als een verbeterde versie van Oracle's MySQL. U kunt eenvoudig schakelen tussen MySQL- en Percona Server-images, op voorwaarde dat u de compatibele versie gebruikt.
De afbeeldingen herkennen twee extra omgevingsvariabelen voor TokuDB en RocksDB voor MySQL (beschikbaar sinds v5.6):
- INIT_TOKUDB - Stel in op 1 om de container te laten starten met ingeschakelde TOKUDB-opslagengine.
- INIT_ROCKSDB - Stel in op 1 om de container te laten starten met ingeschakelde ROCKSDB-opslagengine.
mysql-server (Oracle)
De repository is gevorkt vanuit mysql door het Docker-team. De images worden gemaakt, onderhouden en ondersteund door het MySQL-team bij Oracle, gebouwd bovenop de Oracle Linux 7-basisimage. De MySQL 8.0-image wordt geleverd met MySQL Community Server (minimaal) en MySQL Shell en de server is geconfigureerd om het X-protocol op poort 33060 vrij te geven vanuit een minimale repository. Het minimale pakket is ontworpen voor gebruik door de officiële Docker-images voor MySQL. Het verwijdert enkele van de niet-essentiële delen van MySQL, zoals innochecksum, myisampack, mysql_plugin, maar is verder hetzelfde product. Daarom heeft het een zeer kleine afbeeldingsvoetafdruk van ongeveer 99 MB.
Een belangrijk punt om op te merken is dat de afbeeldingen een ingebouwd script voor gezondheidscontrole hebben, wat erg handig is voor sommige mensen die behoefte hebben aan een nauwkeurige beschikbaarheidslogica. Anders moeten mensen een aangepast Docker's HEALTHCHECK-commando (of script) schrijven om de status van de container te controleren.
mysql-xx-centos7 &mariadb-xx-centos7 (CentOS)
De container-images worden gebouwd en onderhouden door het CentOS-team, waaronder een MySQL-databaseserver voor OpenShift en algemeen gebruik. Voor op RHEL gebaseerde afbeeldingen kunt u ze uit de containercatalogus van Red Hat halen, terwijl de op CentOS gebaseerde afbeeldingen openbaar worden gehost op Docker Hub op verschillende pagina's voor elke hoofdversie (alleen afbeeldingen weergeven met meer dan 10 miljoen downloads):
- 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
De afbeeldingsstructuur is een beetje anders en maakt geen gebruik van afbeeldingstags zoals andere, dus de afbeeldingsnaam wordt in plaats daarvan iets langer. Dat gezegd hebbende, moet je naar de juiste Docker Hub-pagina gaan om de hoofdversie te krijgen die je wilt ophalen.
Volgens de coderepository-pagina hebben 30 medewerkers sinds 15 februari 2015 aan het project meegewerkt. Het ondersteunt MySQL 5.5 tot 8.0 en MariaDB 5.5 tot 10.2 alleen voor x86_64-architectuur. Als u sterk afhankelijk bent van Red Hat-containerisatie-infrastructuur zoals OpenShift, zijn dit waarschijnlijk de meest populaire of goed onderhouden afbeeldingen voor MySQL en MariaDB.
De volgende omgevingsvariabelen beïnvloeden het MySQL/MariaDB-configuratiebestand en ze zijn allemaal optioneel:
- MYSQL_LOWER_CASE_TABLE_NAMES (standaard:0)
- MYSQL_MAX_CONNECTIONS (standaard:151)
- MYSQL_MAX_ALLOWED_PACKET (standaard:200M)
- MYSQL_FT_MIN_WORD_LEN (standaard:4)
- MYSQL_FT_MAX_WORD_LEN (standaard:20)
- MYSQL_AIO (standaard:1)
- MYSQL_TABLE_OPEN_CACHE (standaard:400)
- MYSQL_KEY_BUFFER_SIZE (standaard:32M of 10% van het beschikbare geheugen)
- MYSQL_SORT_BUFFER_SIZE (standaard:256K)
- MYSQL_READ_BUFFER_SIZE (standaard:8M of 5% van het beschikbare geheugen)
- MYSQL_INNODB_BUFFER_POOL_SIZE (standaard:32M of 50% van het beschikbare geheugen)
- MYSQL_INNODB_LOG_FILE_SIZE (standaard:8M of 15% van het beschikbare geheugen)
- MYSQL_INNODB_LOG_BUFFER_SIZE (standaard:8M of 15% van het beschikbare geheugen)
- MYSQL_DEFAULTS_FILE (standaard:/etc/my.cnf)
- MYSQL_BINLOG_FORMAT (standaard:instructie)
- MYSQL_LOG_QUERIES_ENABLED (standaard:0)
De afbeeldingen ondersteunen MySQL-auto-tuning wanneer de MySQL-afbeelding wordt uitgevoerd met de parameter --memory en als u geen waarde hebt opgegeven voor de volgende parameters, worden hun waarden automatisch berekend op basis van het beschikbare geheugen:
- MYSQL_KEY_BUFFER_SIZE (standaard:10%)
- MYSQL_READ_BUFFER_SIZE (standaard:5%)
- MYSQL_INNODB_BUFFER_POOL_SIZE (standaard:50%)
- MYSQL_INNODB_LOG_FILE_SIZE (standaard:15%)
- MYSQL_INNODB_LOG_BUFFER_SIZE (standaard:15%)
bitnami/mariadb
De afbeeldingen worden gebouwd en onderhouden door Bitnami, experts in softwareverpakkingen in virtuele of cloudimplementatie. De afbeeldingen worden dagelijks vrijgegeven met de nieuwste beschikbare distributiepakketten en gebruiken een minimalistische, op Debian gebaseerde afbeelding minideb. De afbeeldingsgrootte voor de nieuwste tag is dus de kleinste van allemaal, ongeveer 87 MB. Het project heeft 20 bijdragers en de eerste commit vond plaats op 17 mei 2015. Op dit moment van schrijven ondersteunt het alleen MariaDB 10.1 tot 10.3.
Een opvallende eigenschap van deze afbeelding is de mogelijkheid om een MariaDB-installatie met hoge beschikbaarheid te implementeren via Docker-omgevingsvariabelen. Een MariaDB-master-slave-replicatiecluster zonder uitvaltijd kan eenvoudig worden ingesteld met de Bitnami MariaDB Docker-afbeelding met behulp van de volgende omgevingsvariabelen:
- MARIADB_REPLICATION_MODE:de replicatiemodus. Mogelijke waarden master/slave. Geen standaardinstellingen.
- MARIADB_REPLICATION_USER:de replicatiegebruiker die bij de eerste uitvoering op de master is gemaakt. Geen standaardinstellingen.
- MARIADB_REPLICATION_PASSWORD:Het wachtwoord van de replicatiegebruikers. Geen standaardinstellingen.
- MARIADB_MASTER_HOST:Hostnaam/IP van replicatiemaster (slave-parameter). Geen standaardinstellingen.
- MARIADB_MASTER_PORT_NUMBER:Serverpoort van de replicatiemaster (slave-parameter). Standaard ingesteld op 3306.
- MARIADB_MASTER_ROOT_USER:Gebruiker op replicatiemaster met toegang tot MARIADB_DATABASE (slave-parameter). Standaard ingesteld op root
- MARIADB_MASTER_ROOT_PASSWORD:wachtwoord van gebruiker op replicatiemaster met toegang tot
- MARIADB_DATABASE (slave-parameter). Geen standaardinstellingen.
In een replicatiecluster kunt u één master en nul of meer slaves hebben. Wanneer replicatie is ingeschakeld, bevindt het masterknooppunt zich in de lees-schrijfmodus, terwijl de slaves zich in de alleen-lezen modus bevinden. Voor de beste prestaties is het raadzaam om de uitlezingen te beperken tot de slaves.
Daarnaast ondersteunen deze images ook implementatie op Kubernetes als Helm Charts. U kunt meer lezen over de installatiestappen in de Bitnami MariaDB Chart GitHub-repository.
Conclusies
Er zijn talloze MySQL-serverafbeeldingen die zijn bijgedragen door de community en we kunnen ze hier niet allemaal behandelen. Houd er rekening mee dat deze afbeeldingen populair zijn omdat ze zijn gemaakt voor algemeen gebruik. Sommige minder populaire afbeeldingen kunnen veel geavanceerdere dingen doen, zoals het orkestreren van databasecontainers, automatisch bootstrappen en automatisch schalen. Verschillende afbeeldingen bieden verschillende benaderingen die kunnen worden gebruikt om andere problemen aan te pakken.