(追記) MySQL界が誇る優秀な外部APIによってご指摘いただけたのでパスワード周りを訂正
`-e MYSQL_ALLOW_EMPTY_PASSWORD=1` でrootのパスワード空っぽにできるますよ;) @RKajiyama
— yoku0825 (@yoku0825) August 21, 2017
MySQLの公式Dockerイメージを使おうとしたときのメモ - rkajiyamaの日記https://t.co/hqEWOTdxID
MySQLサーバーのコミュニティ版バイナリが含まれる公式Dockerイメージのマニュアルはこちら。
https://hub.docker.com/r/mysql/mysql-server/
マニュアルに書いてある基本の起動するコマンド
docker run --name my-container-name -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql/mysql-server:tag
オプション | 設定項目 |
---|---|
--name | my-container-nameは任意の名称 |
-d | 対象イメージ タグでMySQLのバージョン等を指定 |
-e | 環境変数 マニュアル中段のEnvironment Variables |
-p | ポートフォワーディング設定 ホスト側:コンテナ側 |
-v | ディレクトリのマッピング ホスト側:コンテナ側 |
バージョン等を指定するためのタグの一覧
5.5から8.0のマイナーバージョンを指定可能(全てではない)
https://hub.docker.com/r/mysql/mysql-server/tags/
起動コマンド例
docker run --name my80 -d mysql/mysql-server:8.0 -e MYSQL_ROOT_PASSWORD=mysql -p 6603:3306 -v /Users/mysql/mysql-docker/data:/var/lib/mysql
ちょっとしたハマりどころ
MySQLサーバーのパスワード設定は必須必須ではない、けどオプション必須
初期化オプション --initialize-insecure に該当する設定はなさそうあるけどオプションの指定が必要。パスワード関連の環境変数が設定がされていないとコンテナが起動しない。MYSQL_RANDOM_ROOT_PASSWORDとMYSQL_ONETIME_PASSWORDを設定すると --initialize と同様の動きになる模様。MYSQL_ALLOW_EMPTY_PASSWORDを使うと --initialize-insecure と同様に。
MYSQL_ROOT_PASSWORD | 明示的にパスワードを設定 |
MYSQL_RANDOM_ROOT_PASSWORD | ランダムパスワードを設定 |
MYSQL_ONETIME_PASSWORD | 初回ログイン時にパスワードの変更を強制 |
MYSQL_ALLOW_EMPTY_PASSWORD | --initialize-insecureと同様にパスワード無しを許容 |
ランダムパスワードは下記コマンドで表示されるログにて確認可能
docker logs my-container-name
一瞬では起動しない(いつ起動が完了したか分からない)
コンテナの起動コマンドを打つと一瞬で応答が返ってきて出力もきわめてシンプル。MySQLサーバーがすでに起動しているのかと思ったらまだだったりする。
docker psのSTATUS表示がhealth: startingなら起動中、healthyなら起動済み。
(docker runコマンドのオプションでログをコンソールに出すようにすればよさげな話だけど)