nobu blog

プログラミングやゲームの話など。

*



DockerComposeでMacOS上にMySQL環境を構築する

   

概要

MacのDocker上でDockerComposeを使用してMySQL環境を構築して動せるまでのメモです。
以前PostgresSQLで似たような事をやっていて下記で紹介していますが、今回は色々と詰まって上手くいかなったのでメモとして残します。

参考記事

前提

Mac OS 11.2.1
Docker for Mac 3.1.0

スポンサーリンク

手順

docker-compose.yml作成

任意のディレクトリを作成して下記のdocker-compose.ymlを作成する
パスワードやDB名の設定等は適宜変更してください。
なお、ホスト側は13306ポートをMySQLへ接続するためのポートとしています。

ディレクトリ等の作成

下記の用にdocker-compose.ymlファイルの直下にmy_sqlディレクトリを作成して中にDockerfileを作成します。
(Dockerfileの中身は後述)
合わせて永続化ボリュームにマッピングしたdbディレクトリとその配下にdata,sqlディレクトリを作成します。
mysqlの設定ファイルとなるmy.cnfファイルを作成します。

ディレクトリ構成

スポンサーリンク

Dockerfile作成

Dockerfileは下記のように記載する。
今回はバージョン5.7を使用しているが、任意のバージョンを設定する。

my.cnfの作成

my.cnfは下記のように記載する。
デフォルトの文字コードがUFT-8では無いので指定する設定などを行なっている。

ビルドと起動

下記のコマンドをdocker-compose.ymlファイルのディレクトリ内で実行する。

エラーが発生しなければ成功。
(後述するが、私はここで何度もエラーが出て解決に時間を要した。)

下記のコマンドを実行して実際にコンテナを立ち上げる。

下記のコマンドを実行してコンテナが立ち上がっているかを確認する。

コンテナが立ち上がっていれば下記のように表示される。

止めたい場合は下記コマンドを実行する。

スポンサーリンク

接続確認

実際に接続できるか確認を行う。
今回はクライアントとしてDBbeaverを使用する。
未インストールの場合、インストールを予め行う。

接続設定として下記に注意する。
1. 接続作はlocalhostでPortは13306(docker-compose.ymlで設定したポート。)
2. 接続databaseはtest_database(docker-compose.ymlで設定した値。)
3. 認証はuser,passを指定(docker-compose.ymlで設定した値。)

上記の設定は接続できればオーケー。

遭遇したエラー

上記の起動までに発生したエラーに関して。

その1

buildコマンド実行時に下記のようなエラーが発生した。

rootユーザでmysqlを起動するのが禁止となっているようで、起動するユーザを別途指定する必要があるようです。
rootでもmy.cnfに実行するroot以外のユーザを指定する事で解決できました。

user=mysql # 実行ユーザの指定

参考
https://qiita.com/yosida001/items/f7acb893843c550e0074

スポンサーリンク

その2

buildコマンド実行時に下記のようなエラーが発生した。

MAC OS環境でしか発生しないようですが、書き込み権限がなくなってしまって上手く書き込めていないため、rootユーザ起動にすることで対応しているようです。
Dockerfileにそのままrun mysqlせずに下記のように記載する事で症状が治りました。
# MySQLをrootで実行する設定に書き換えて起動する
RUN sed -e 's/^ *user *= *mysql$/user = root/' -i /etc/mysql/my.cnf

詳細は下記が参考になります。
https://qiita.com/kazuma1989/items/3dae0d9dc78675162cae

 - Docker