LoginSignup
158

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-08-28

概要

自身の備忘のために、以下の「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のユーザモジュールのように
パスワードをハッシュ化して書けたりすればいいなと思って読んでたんですが
このドキュメントを読んだだけだとダメそうです。

Dockerfiledocker-compose.ymlとして公開するのであれば
環境変数に埋めて渡すしかないんですかね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
158