Образът на Docker може да бъде изграден от всеки, който има способността да пише скрипт. Ето защо има много подобни образи, изградени от общността, с незначителни различия, но наистина обслужващи обща цел. Доброто (и популярно) изображение на контейнера трябва да има добре написана документация с ясни обяснения, активно поддържано хранилище и с редовни актуализации. Вижте тази публикация в блога, ако искате да научите как да създадете и публикувате свое собствено изображение на Docker за MySQL, или тази публикация в блога, ако просто искате да научите основите на стартирането на MySQL в Docker.
В тази публикация в блога ще разгледаме някои от най-популярните изображения на Docker за стартиране на нашия MySQL или MariaDB сървър. Изображенията, които сме избрали, са публични изображения с общо предназначение, които могат поне да изпълняват MySQL услуга. Някои от тях включват несъществени приложения, свързани с MySQL, докато други просто служат като обикновен екземпляр на mysqld. Списъкът тук се основава на резултата от Docker Hub, най-голямата библиотека и общност в света за изображения на контейнери.
TLDR
Следната таблица обобщава различните опции:
Аспект | MySQL (Docker) | MariaDB (Docker) | Percona (Docker) | MySQL (Oracle) | MySQL/MariaDB (CentOS) | MariaDB (Bitnami) |
---|---|---|---|---|---|---|
Изтегляния | 10 милиона+ | 10 милиона+ | 10 милиона+ | 10 милиона+ | 10 милиона+ | 10 милиона+ |
Docker Hub | mysql | mariadb | перкона | mysql/mysql-сървър | mysql-80-centos7 mysql-57-centos7 mysql-56-centos7 mysql-55-centos7 mariadb-102-centos7 mariadb-101-centos7 | bitnami/mariadb |
Страница на проекта | mysql | mariadb | percona-docker | mysql-docker | mysql-контейнер | bitnami-docker-mariadb |
Основно изображение | Debian 9 | Ubuntu 18.04 (бионичен) Ubuntu 14.04 (надежден) | CentOS 7 | Oracle Linux 7 | RHEL 7 CentOS 7 | Debian 9 (minideb) Oracle Linux 7 |
Поддържани версии на база данни | 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 |
Поддържани платформи | x86_64 | x86 x86_64 arm64v8 ppc64le | x86 x86_64 | x86_64 | x86_64 | x86_64 |
Размер на изображението (маркер:най-нов) | 129 MB | 120 MB | 193 MB | 99 MB | 178 MB | 87 MB |
Първо записване | 18 май 2014 г. | 16 ноември 2014 г. | 3 януари 2016 г. | 18 май 2014 г. | 15 февруари 2015 г. | 17 май 2015 г. |
Сътрудници | 18 | 9 | 15 | 14 | 30 | 20 |
Github Star | 1267 | 292 | 113 | 320 | 89 | 152 |
Github Fork | 1291 | 245 | 121 | 1291** | 146 | 71 |
Взето от страницата на Docker Hub.
Разклонено от MySQL docker проект.
mysql (Docker)
Изображенията се създават и поддържат от общността на Docker с помощта на екипа на MySQL. Може да се счита за най-популярните публично достъпни MySQL сървърни изображения, хоствани в Docker Hub и едно от най-ранните на пазара (първият комит беше на 18 май 2014 г.). Той е бил разклонен ~1300 пъти с 18 активни участници. Той поддържа версията на Docker до 1.6 на база най-добри усилия. Към момента на писане се поддържат всички основни версии на MySQL – 5.5, 5.6, 5.7 и 8.0 само на архитектура x86_64.
Повечето от MySQL изображенията, създадени от други, са вдъхновени от начина, по който е построено това изображение. Изображенията на MariaDB, Percona и MySQL Server (Oracle) следват подобни променливи на средата, структура на конфигурационния файл и процес на инициализация на контейнера.
Следните променливи на средата са налични в повечето изображения на контейнери MySQL в Docker Hub:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
Размерът на изображението (таг:последен) е средно малък (129MB), лесен за използване, добре поддържан и актуализиран редовно от поддържащия. Ако приложението ви изисква най-новия контейнер на база данни MySQL, това е най-препоръчителното публично изображение, което можете да използвате.
mariadb (Docker)
Изображенията се поддържат от общността на Docker с помощта на екипа на MariaDB. Той използва същия стил на структура на изграждане като изображението на mysql (Docker), но се предлага с поддръжка на множество архитектури:
- Linux x86-64 (amd64)
- ARMv8 64-битов (arm64v8)
- x86/i686 (i386)
- IBM POWER8 (ppc64le)
Към момента на това писане изображенията поддържат MariaDB версия 5.5 до 10.4, където изображението с най-новия размер на етикета е около 120MB. Това изображение служи като изображение с общо предназначение и следва инструкциите, променливите на средата и структурата на конфигурационния файл като mysql (Docker). Повечето приложения, които изискват MySQL като бекенд на базата данни, обикновено са съвместими с MariaDB, тъй като и двете говорят по един и същ протокол.
Сървърът на MariaDB преди беше разклонение на MySQL, но сега беше отклонен от него. Що се отнася до дизайна на архитектурата на базата данни, някои версии на MariaDB не са 100% съвместими и вече не са заместващи с техните съответни версии на MySQL. Вижте тази страница за подробности. Въпреки това, има начини за мигриране помежду си чрез използване на логическо архивиране. Просто казано, че след като сте в екосистемата на MariaDB, вероятно трябва да се придържате към нея. Не се препоръчва смесване или превключване между MariaDB и MySQL в клъстер.
Ако искате да настроите по-усъвършенствана настройка на MariaDB (репликация, Galera, шардинг), има други изображения, създадени за постигане на тази цел много по-лесно, например bitnami/mariadb, както е обяснено по-долу.
percona (Docker)
Percona Server е разклонение на MySQL, създадено от Percona. Това са единствените официални изображения на Percona Server Docker, създадени и поддържани от екипа на Percona. Той поддържа както x86, така и x86_64 архитектура и изображението е базирано на CentOS 7. Percona поддържа само най-новите 3 основни версии на MySQL за изображения на контейнери - 5.6, 5.7 и 8.0.
Хранилището на код посочва, че първият комит е бил на 3 януари 2016 г. с 15 активни участници, предимно от екипа за разработка на Percona. Percona Server за MySQL се предлага с машина за съхранение на XtraDB (подмяна на InnoDB) и следва много отблизо изданията на Oracle MySQL (включително всички корекции на грешки в него) с някои допълнителни функции като MyRocks механизъм за съхранение, TokuDB, както и Percona на собствени корекции на грешки. В известен смисъл можете да го мислите като подобрена версия на MySQL на Oracle. Можете лесно да превключвате между изображения на MySQL и Percona Server, при условие че използвате съвместимата версия.
Изображенията разпознават две допълнителни променливи на средата за TokuDB и RocksDB за MySQL (достъпни от v5.6):
- INIT_TOKUDB – Задайте на 1, за да позволите на контейнера да бъде стартиран с активиран механизъм за съхранение на TOKUDB.
- INIT_ROCKSDB – Задайте на 1, за да позволите на контейнера да бъде стартиран с активиран механизъм за съхранение на ROCKSDB.
mysql-сървър (Oracle)
Хранилището е разклонено от mysql от екипа на Docker. Изображенията се създават, поддържат и поддържат от екипа на MySQL в Oracle, изграден върху базовото изображение на Oracle Linux 7. Изображението на MySQL 8.0 идва с MySQL Community Server (минимален) и MySQL Shell и сървърът е конфигуриран да излага X протокол на порт 33060 от минимално хранилище. Минималният пакет е проектиран за използване от официалните изображения на Docker за MySQL. Той изрязва някои от несъществените части на MySQL като innochecksum, myisampack, mysql_plugin, но иначе е същият продукт. Следователно той има много малък отпечатък на изображението, който е около 99 MB.
Един важен момент, който трябва да се отбележи, е, че изображенията имат вграден скрипт за проверка на здравето, който е много удобен за някои хора, които се нуждаят от точна логика за наличност. В противен случай хората трябва да напишат персонализирана команда HEALTHCHECK на Docker (или скрипт), за да проверят състоянието на контейнера.
mysql-xx-centos7 &mariadb-xx-centos7 (CentOS)
Изображенията на контейнера са изградени и поддържани от екипа на CentOS, който включва сървър на база данни MySQL за OpenShift и общо използване. За базирани на RHEL изображения можете да ги изтеглите от каталога на контейнерите на Red Hat, докато базираните на CentOS изображения се хостват публично в Docker Hub на различни страници за всяка основна версия (избройте само изображения с над 10 милиона изтегляния):
- 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
Структурата на изображението е малко по-различна и не използва етикет за изображение като другите, така че името на изображението става малко по-дълго вместо това. Като каза това, трябва да отидете на правилната страница на Docker Hub, за да получите основната версия, която искате да изтеглите.
Според страницата на кодовото хранилище 30 сътрудници са си сътрудничили в проекта от 15 февруари 2015 г. Той поддържа MySQL 5.5 до 8.0 и MariaDB 5.5 до 10.2 само за архитектура x86_64. Ако разчитате до голяма степен на контейнерна инфраструктура на Red Hat като OpenShift, това вероятно са най-популярните или добре поддържани изображения за MySQL и MariaDB.
Следните променливи на средата влияят върху конфигурационния файл на MySQL/MariaDB и всички те са по избор:
- MYSQL_LOWER_CASE_TABLE_NAMES (по подразбиране:0)
- MYSQL_MAX_CONNECTIONS (по подразбиране:151)
- MYSQL_MAX_ALLOWED_PACKET (по подразбиране:200M)
- MYSQL_FT_MIN_WORD_LEN (по подразбиране:4)
- MYSQL_FT_MAX_WORD_LEN (по подразбиране:20)
- MYSQL_AIO (по подразбиране:1)
- MYSQL_TABLE_OPEN_CACHE (по подразбиране:400)
- MYSQL_KEY_BUFFER_SIZE (по подразбиране:32M или 10% от наличната памет)
- MYSQL_SORT_BUFFER_SIZE (по подразбиране:256K)
- MYSQL_READ_BUFFER_SIZE (по подразбиране:8M или 5% от наличната памет)
- MYSQL_INNODB_BUFFER_POOL_SIZE (по подразбиране:32M или 50% от наличната памет)
- MYSQL_INNODB_LOG_FILE_SIZE (по подразбиране:8M или 15% от наличната памет)
- MYSQL_INNODB_LOG_BUFFER_SIZE (по подразбиране:8M или 15% от наличната памет)
- MYSQL_DEFAULTS_FILE (по подразбиране:/etc/my.cnf)
- MYSQL_BINLOG_FORMAT (по подразбиране:израз)
- MYSQL_LOG_QUERIES_ENABLED (по подразбиране:0)
Изображенията поддържат MySQL автоматична настройка, когато MySQL изображението работи с набор от параметри --memory и ако не сте посочили стойност за следните параметри, техните стойности ще бъдат автоматично изчислени въз основа на наличната памет:
- MYSQL_KEY_BUFFER_SIZE (по подразбиране:10%)
- MYSQL_READ_BUFFER_SIZE (по подразбиране:5%)
- MYSQL_INNODB_BUFFER_POOL_SIZE (по подразбиране:50%)
- MYSQL_INNODB_LOG_FILE_SIZE (по подразбиране:15%)
- MYSQL_INNODB_LOG_BUFFER_SIZE (по подразбиране:15%)
bitnami/mariadb
Изображенията са изградени и поддържани от Bitnami, експерти в пакетирането на софтуер във виртуално или облачно внедряване. Изображенията се пускат ежедневно с най-новите налични пакети за разпространение и използват минималистично базирано на Debian изображение, наречено minideb. По този начин размерът на изображението за последния маркер е най-малкият сред всички, който е около 87MB. Проектът има 20 участници, като първият комит се случи на 17 май 2015 г. Към момента на писане той поддържа само MariaDB 10.1 до 10.3.
Една изключителна характеристика на това изображение е възможността за разгръщане на високодостъпна настройка на MariaDB чрез променливи на средата на Docker. Клъстер за репликация на MariaDB главен-подчинен може лесно да бъде настроен с изображението на Bitnami MariaDB Docker, като се използват следните променливи на средата:
- MARIADB_REPLICATION_MODE:Режимът на репликация. Възможни стойности master/slave. Няма настройки по подразбиране.
- MARIADB_REPLICATION_USER:Потребителят за репликация, създаден на главния при първо стартиране. Няма настройки по подразбиране.
- MARIADB_REPLICATION_PASSWORD:Паролата на потребителите за репликация. Няма настройки по подразбиране.
- MARIADB_MASTER_HOST:Име на хост/IP на главен обект на репликация (подчинен параметър). Няма настройки по подразбиране.
- MARIADB_MASTER_PORT_NUMBER:Сървърен порт на главния кадър за репликация (подчинен параметър). По подразбиране е 3306.
- MARIADB_MASTER_ROOT_USER:Потребител на главен сървър на репликация с достъп до MARIADB_DATABASE (подчинен параметър). По подразбиране е root
- MARIADB_MASTER_ROOT_PASSWORD:Парола на потребител на главната страница на репликация с достъп до
- MARIADB_DATABASE (подчинен параметър). Няма настройки по подразбиране.
В клъстер за репликация можете да имате един главен и нула или повече подчинени. Когато репликацията е разрешена, главният възел е в режим четене-запис, докато подчинените са в режим само за четене. За най-добра производителност е препоръчително да ограничите четенията до подчинените.
В допълнение, тези изображения също поддържат внедряване в Kubernetes като Helm Charts. Можете да прочетете повече за стъпките за инсталиране в хранилището на Bitnami MariaDB Chart GitHub.
Заключения
Има много изображения на MySQL сървъри, които са предоставени от общността и не можем да ги покрием всички тук. Имайте предвид, че тези изображения са популярни, защото са създадени за общо предназначение. Някои по-малко популярни изображения могат да правят много по-усъвършенствани неща, като оркестрация на контейнери на база данни, автоматично зареждане и автоматично мащабиране. Различните изображения предоставят различни подходи, които могат да се използват за справяне с други проблеми.