Help us understand the problem. What is going on with this article?

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

概要

自身の備忘のために、以下の「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として公開するのであれば
環境変数に埋めて渡すしかないんですかね。

nanakenashi
都内に勤務のエンジニア。
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした