この記事は MySQLのカレンダー | Advent Calendar 2023 の10日目の記事です。昨日は meijik さんの 最新のSQL標準(SQL:2023)とFirebird/MySQL/PostgreSQL | キムラデービーブログ でした。
TL;DR
dockerhub のMySQLイメージはもうメンテナンスしていないっぽい
- ややこしいのだけれど、
docker pull mysql
で取得するのは「Docker社がビルドしたMySQLイメージ」で、docker pull mysql/mysql-server
で取得するのが「Oracle社がビルドしたMySQLイメージ」だった - 引っ越したのは後者のみ
- ややこしいのだけれど、
MySQL Server Community Edition - Repository Detail
- 5.7は5.7.16と5.7.33だけ、8.0は8.0.22とそれ以降しかない
docker login
が必要なのはEnterprise Editionのイメージを使おうとする時だけ(のはず)
Before
$ sudo docker pull mysql/mysql-server
After
$ sudo docker pull container-registry.oracle.com/mysql/community-server
これだけ。
イメージビルド用のDockerfileは変わっていないっぽいので、Oracle社ビルドのイメージを使っていたなら大した差はないはず(このDockerfileやentrypoint.shはDocker社ビルドのイメージとはそもそも盛大に違うので、もともとがDocker社ビルドのものだったりすると非互換がある)
ちなみにDocker社ビルドの方はこっち
Oracle社ビルド用のイメージとして俺はこんなエイリアスを用意していて(そもそもMySQLのDockerコンテナはバージョンごとのちょっとした動作確認をするのに便利、くらいにしか使わない)
dmysql ()
{
sudo docker run -d -P -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -e MYSQL_ROOT_PASSWORD="""" -e MYSQL_ROOT_HOST=""%"" --restart=on-failure mysql/mysql-server:$1
}
このお引越しを経てこうなりました (バージョン番号の判定にまさに 日々の覚書: 明日使えない地味なシェルスクリプト用ワンライナー集 のやつを使っている…)
dmysql ()
{
version_str="$1";
[[ -z $version_str ]] && version_str="latest";
version_int=$(echo $version_str | awk -F"[.-]" '{printf("%d%02d%02d\n", $1, $2, $3)}');
if [[ $version_str = "latest" || $version_int -ge 80022 ]]; then
repo="container-registry.oracle.com/mysql/community-server";
else
repo="mysql/mysql-server";
fi;
docker run -d -P -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -e MYSQL_ROOT_PASSWORD="""" -e MYSQL_ROOT_HOST=""%"" $repo:$1
}
直近の5.7(5.7.44とか)はサポートしてない (そもそも引越し前にも引越し先にもないのでそうならざるを得ない)けどまあ仕方なし…
明日は yyamasaki1 さんです!
0 件のコメント :
コメントを投稿