Edited at

DockerのMySQLイメージ起動時に渡す環境変数

More than 1 year has passed since last update.


概要

自身の備忘のために、以下の「Environment Variables」部分の和訳です。

MySQLの公式イメージ on DockerHub

執筆時点での公開バージョンは以下の通りです。


5.7.14, 5.7, 5, latest (5.7/Dockerfile)

5.6.32, 5.6 (5.6/Dockerfile)

5.5.51, 5.5 (5.5/Dockerfile)



環境変数

mysqlイメージを起動する際に、docker runコマンドにおいて

1個かそれ以上の環境変数を渡すことで、MySQLインスタンスの設定を調整できます。

既にデータベースを含んでいるデータディレクトリを利用してコンテナを起動する際は

以下のいずれの変数も影響を及ぼさないということに注意してください。

つまり、既存のデータベースはコンテナの起動時に変更を加えられません。


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のユーザモジュールのように

パスワードをハッシュ化して書けたりすればいいなと思って読んでたんですが

このドキュメントを読んだだけだとダメそうです。

Dockerfiledocker-compose.ymlとして公開するのであれば

環境変数に埋めて渡すしかないんですかね。