概要
自身の備忘のために、以下の「Environment Variables」部分の和訳です。
MySQLの公式イメージ on DockerHub
本記事の最終更新時点での公開バージョンは以下の通りです。
8.0.19, 8.0, 8, latest
5.7.29, 5.7, 5
5.6.47, 5.6
環境変数
mysql
イメージを起動する際に、docker run
コマンドにおいて
1個かそれ以上の環境変数を渡すことで、MySQLインスタンスの設定を調整できます。
既にデータベースを含んでいるデータディレクトリを利用してコンテナを起動する際は
以下のいずれの変数も影響を及ぼさないということに注意してください。
つまり、既存のデータベースはコンテナの起動時に変更を加えられません。
MySQLが提供する環境変数のドキュメントも参照してください。
(特にMYSQL_HOST
のような変数はイメージ使用の際に問題になることがあります)
MYSQL_ROOT_PASSWORD
この変数は必須のもので、MySQLにおけるスーパーユーザである
root
アカウントに設定するためのパスワードを指定します。
ページ内の例においてはmy-secret-pw
を設定しています。
MYSQL_DATABASE
この変数はオプションで、イメージの起動時に作成するデータベースの名前を指定します。
もしユーザ名とパスワードが指定された場合(下記を参照)は
ユーザはこのデータベースへのスーパーユーザアクセス権(GRANT ALL
に相当)を与えられます。
MYSQL_USER
, MYSQL_PASSWORD
これらの変数はオプションで、新規ユーザの作成とそのユーザのパスワード設定に使用されます。
このユーザはMYSQL_DATABASE
変数で指定されたデータベースに対して
スーパーユーザとしての権限(上記を参照)を与えられます。
どちらの変数も、作成されるユーザのためには必須です。
この仕組みを、rootユーザの作成に使う必要はないことに注意してください。
rootユーザはデフォルトで作成され
MYSQL_ROOT_PASSWORD
変数により指定されたパスワードが設定されるためです。
MYSQL_ALLOW_EMPTY_PASSWORD
オプションの変数です。
yes
を設定することで、rootユーザに空のパスワードを設定して
コンテナを起動することを許可します。
注意:
この変数にyes
を設定することはおすすめしません。
この設定は誰もがスーパーユーザの権限を得ることを許し
MySQLインスタンスがまったく保護されていない状態になるためです。
MYSQL_RANDOM_ROOT_PASSWORD
オプションの変数です。
yes
を設定することで、rootユーザのための初期パスワードを
(pwgen
を利用して)ランダムで生成します。
生成されたパスワードは標準出力に表示されます。(GENERATED ROOT PASSWORD: ...
)
MYSQL_ONETIME_PASSWORD
(MYSQL_USER
で指定されたユーザではなく)rootユーザにおける
初回のログインのパスワード変更を強制するために
一度でパスワードを期限切れにするための設定を行います。
注意:
この機能はバージョンが5.6以上のMySQLのみにおいてサポートされています。
バージョン5.5でこのオプションを使用した場合、初期化時にエラーが投げられます。
和訳してわかったこと
Ansibleのユーザモジュールのように
パスワードをハッシュ化して書けたりすればいいなと思って読んでたんですが
このドキュメントを読んだだけだとダメそうです。
Dockerfile
やdocker-compose.yml
として公開するのであれば
環境変数に埋めて渡すしかないんですかね。