Dockerイメージは、スクリプトを作成できる人なら誰でも作成できます。そのため、コミュニティによって作成されている類似のイメージが多数ありますが、わずかな違いはありますが、実際には共通の目的を果たしています。優れた(そして人気のある)コンテナイメージには、明確な説明、アクティブに維持されているリポジトリ、および定期的な更新を含む、適切に記述されたドキュメントが必要です。 MySQL用に独自のDockerイメージを構築して公開する方法を知りたい場合は、このブログ投稿を確認してください。DockerでのMySQLの実行の基本を学びたい場合は、このブログ投稿を確認してください。
このブログ投稿では、MySQLまたはMariaDBサーバーを実行するための最も人気のあるDockerイメージのいくつかを見ていきます。選択したイメージは、少なくともMySQLサービスを実行できる汎用のパブリックイメージです。それらのいくつかには、必須ではないMySQL関連のアプリケーションが含まれていますが、その他は単なるmysqldインスタンスとして機能します。ここでのリストは、コンテナイメージの世界最大のライブラリおよびコミュニティであるDockerHubの結果に基づいています。
TLDR
次の表は、さまざまなオプションをまとめたものです。
アスペクト | MySQL(Docker) | MariaDB(Docker) | Percona(Docker) | MySQL(Oracle) | MySQL / MariaDB(CentOS) | MariaDB(Bitnami) |
---|---|---|---|---|---|---|
ダウンロード | 10M + | 10M + | 10M + | 10M + | 10M + | 10M + |
DockerHub | 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 |
プロジェクトページ | mysql | mariadb | percona-docker | mysql-docker | mysql-container | 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 |
最初のコミット | 2014年5月18日 | 2014年11月16日 | 2016年1月3日 | 2014年5月18日 | 2015年2月15日 | 2015年5月17日 |
寄稿者 | 18 | 9 | 15 | 14 | 30 | 20 |
Github Star | 1267 | 292 | 113 | 320 | 89 | 152 |
Githubフォーク | 1291 | 245 | 121 | 1291 ** | 146 | 71 |
DockerHubページから取得。
MySQLdockerプロジェクトからフォーク。
mysql(Docker)
イメージは、MySQLチームの助けを借りてDockerコミュニティによって構築および保守されています。これは、Docker Hubでホストされている最も人気のある公開されているMySQLサーバーイメージであり、市場で最も初期のイメージの1つと見なすことができます(最初のコミットは2014年5月18日でした)。 18人のアクティブな貢献者で約1300回フォークされています。ベストエフォートベースで1.6までのDockerバージョンをサポートします。この記事の執筆時点では、すべてのMySQLメジャーバージョンがサポートされています。x86_64アーキテクチャでのみ5.5、5.6、5.7、8.0です。
他の人が作成したMySQLイメージのほとんどは、このイメージが作成された方法に触発されています。 MariaDB、Percona、およびMySQL Server(Oracle)のイメージは、同様の環境変数、構成ファイル構造、およびコンテナー初期化プロセスフローに従います。
次の環境変数は、DockerHubのほとんどのMySQLコンテナイメージで使用できます。
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
画像サイズ(タグ:最新)は平均して小さく(129MB)、使いやすく、メンテナンスが行き届いており、メンテナが定期的に更新しています。アプリケーションで最新のMySQLデータベースコンテナが必要な場合は、これが使用できる最も推奨されるパブリックイメージです。
mariadb(Docker)
イメージは、MariaDBチームの助けを借りてDockerコミュニティによって維持されています。 mysql(Docker)イメージと同じスタイルの構築構造を使用しますが、複数のアーキテクチャをサポートしています:
- Linux x86-64(amd64)
- ARMv8 64ビット(arm64v8)
- x86 / i686(i386)
- IBM POWER8(ppc64le)
この記事の執筆時点では、イメージは10.4までのMariaDBバージョン5.5をサポートしており、「最新」のタグサイズのイメージは約120MBです。このイメージは汎用イメージとして機能し、mysql(Docker)としての指示、環境変数、および構成ファイルの構造に従います。データベースバックエンドとしてMySQLを必要とするほとんどのアプリケーションは、両方が同じプロトコルを話しているため、一般的にMariaDBと互換性があります。
MariaDBサーバーは以前はMySQLのフォークでしたが、現在はそれから転用されています。データベースアーキテクチャの設計に関しては、一部のMariaDBバージョンは100%互換性がなく、それぞれのMySQLバージョンとのドロップイン置換ではなくなりました。詳細はこちらのページをご覧ください。ただし、論理バックアップを使用して相互に移行する方法があります。簡単に言うと、MariaDBエコシステムに入ると、おそらくそれに固執する必要があります。クラスタ内でMariaDBとMySQLを混在させたり切り替えたりすることはお勧めしません。
より高度なMariaDBセットアップ(レプリケーション、ガレラ、シャーディング)をセットアップしたい場合は、その目的をはるかに簡単に達成するために構築された他のイメージがあります。たとえば、さらに下で説明するように、bitnami/mariadbです。
percona(Docker)
Percona Serverは、Perconaによって作成されたMySQLのフォークです。これらは、Perconaチームによって作成および保守されている唯一の公式のPerconaServerDockerイメージです。 x86アーキテクチャとx86_64アーキテクチャの両方をサポートし、イメージはCentOS 7に基づいています。Perconaは、コンテナイメージの最新の3つの主要なMySQLバージョン(5.6、5.7、および8.0)のみを維持します。
コードリポジトリは、最初のコミットが2016年1月3日であり、主にPercona開発チームから15人の積極的な貢献者がいることを指摘しています。 Percona Server for MySQLにはXtraDBストレージエンジン(InnoDBのドロップイン代替品)が付属しており、MyRocksストレージエンジン、TokuDB、Perconaのようないくつかの追加機能を備えたアップストリームのOracle MySQLリリース(その中のすべてのバグ修正を含む)に非常に厳密に従います独自のバグ修正。ある意味で、これはOracleのMySQLの改良版と考えることができます。互換性のあるバージョンで実行している場合は、MySQLとPerconaServerのイメージを簡単に切り替えることができます。
イメージは、TokuDBおよびRocksDB for MySQL(v5.6以降で使用可能)の2つの追加の環境変数を認識します。
- INIT_TOKUDB-1に設定すると、コンテナを有効なTOKUDBストレージエンジンで起動できるようになります。
- INIT_ROCKSDB-1に設定すると、有効なROCKSDBストレージエンジンでコンテナーを起動できるようになります。
mysql-server(Oracle)
リポジトリは、Dockerチームによってmysqlからフォークされます。イメージは、Oracle Linux 7ベースイメージの上に構築されたOracleのMySQLチームによって作成、保守、およびサポートされます。 MySQL 8.0イメージには、MySQL Community Server(最小)とMySQL Shellが付属しており、サーバーは、最小リポジトリからポート33060でXプロトコルを公開するように構成されています。最小限のパッケージは、MySQLの公式Dockerイメージで使用するために設計されました。これは、innochecksum、myisampack、mysql_pluginなどのMySQLの重要でない部分の一部を切り取りますが、それ以外は同じ製品です。したがって、画像のフットプリントは非常に小さく、約99MBです。
注意すべき重要な点の1つは、イメージにヘルスチェックスクリプトが組み込まれていることです。これは、正確な可用性ロジックを必要としている一部の人々にとって非常に便利です。それ以外の場合は、カスタムDockerのHEALTHCHECKコマンド(またはスクリプト)を作成して、コンテナーの状態を確認する必要があります。
mysql-xx-centos7&mariadb-xx-centos7(CentOS)
コンテナーイメージは、OpenShiftおよび一般的な使用のためのMySQLデータベースサーバーを含むCentOSチームによって構築および保守されます。 RHELベースのイメージの場合、CentOSベースのイメージがDocker Hubでメジャーバージョンごとに異なるページで公開されている間に、Red Hatのコンテナーカタログからそれらをプルできます(1,000万回以上ダウンロードされたイメージのみを一覧表示します):
- 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
画像の構造が少し異なり、他の画像のように画像タグを使用しないため、代わりに画像名が少し長くなります。そうは言っても、プルしたいメジャーバージョンを取得するには、正しいDockerHubページに移動する必要があります。
コードリポジトリページによると、2015年2月15日以降、30人の貢献者がプロジェクトに協力しています。x86_64アーキテクチャでのみ、8.0までのMySQL5.5と10.2までのMariaDB5.5をサポートしています。 OpenShiftのようなRedHatコンテナー化インフラストラクチャーに大きく依存している場合、これらはおそらく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イメージが--memoryパラメーターを設定して実行されている場合、イメージはMySQL自動チューニングをサポートします。次のパラメーターの値を指定しなかった場合、それらの値は使用可能なメモリーに基づいて自動的に計算されます。
- 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によって構築および保守されています。イメージは、利用可能な最新の配布パッケージとともに毎日リリースされ、minidebと呼ばれる最小限のDebianベースのイメージを使用します。したがって、最新のタグの画像サイズは、すべての中で最小であり、約87MBです。このプロジェクトには20人の貢献者がいて、最初のコミットは2015年5月17日に行われました。現時点では、MariaDB10.1から10.3までしかサポートしていません。
このイメージの優れた機能の1つは、Docker環境変数を介して可用性の高いMariaDBセットアップをデプロイできることです。ダウンタイムゼロのMariaDBマスタースレーブレプリケーションクラスターは、次の環境変数を使用してBitnamiMariaDBDockerイメージで簡単にセットアップできます。
- 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(スレーブパラメーター)。デフォルトはありません。
レプリケーションクラスターでは、1つのマスターと0個以上のスレーブを持つことができます。レプリケーションが有効になっている場合、マスターノードは読み取り/書き込みモードになり、スレーブは読み取り専用モードになります。最高のパフォーマンスを得るには、読み取りをスレーブに制限することをお勧めします。
さらに、これらのイメージは、ヘルムチャートとしてのKubernetesへのデプロイもサポートしています。インストール手順の詳細については、Bitnami MariaDBChartGitHubリポジトリをご覧ください。
結論
コミュニティから提供されたMySQLサーバーイメージはたくさんありますが、ここですべてを網羅することはできません。これらの画像は、汎用目的で作成されているため、人気があることに注意してください。あまり人気のない画像の中には、データベースコンテナのオーケストレーション、自動ブートストラップ、自動スケーリングなど、はるかに高度な機能を実行できるものがあります。画像が異なれば、他の問題に対処するために使用できるアプローチも異なります。