【Docker】docker-composeでmysqlのコンテナを立てる
記事を書くのがだいぶ久しぶりになってしまいました。別段忙しいわけではなかったのですが、なんとなくやる気がしなかったという感じです(笑)
さて、最近は開発環境でdockerを使って環境に差異がでないようにするのが一般的になってきましたよね。その一環として今回はdocker-composeでmysqlコンテナを立てる方法を記載していきます。
ちなみにdockerはインストール済み前提です。
環境情報
OS: Windows10 64bit
docker: v 20.10.2
mysql: v 8.0
docker-composeでmysqlのコンテナを立てる
docker-compose.yml
とりあえずdocker-compose.ymlを作成し、以下のような記載にします。
version: '3'
services:
# MySQL
db:
image: mysql:8.0
container_name: mysql_host
environment:
MYSQL_ROOT_PASSWORD: root # rootパスワード
MYSQL_DATABASE: sample_table # データベース名
MYSQL_USER: sample_user # ユーザ名
MYSQL_PASSWORD: sample_password # ユーザパスワード
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./mysql/data:/var/lib/mysql # ローカルのdataディレクトリをマウント(ここにテーブル情報とかが格納される)
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf # ローカルのmy.cnfをマウント
ports:
- 9900:3306 # ローカルPCからはポート9900で接続できるように設定
特筆するのはボリューム設定でしょうか。設定ファイルやテーブルデータをローカルに保存することでコンテナを削除した場合ももろもろ保持できるようにしています。
my.cnf
docker-compose.ymlと同じ階層にmysqlディレクトリを作成し、その下にmy.cnfを作成。
私の場合は以下のように記載しました。(ほぼどこかのサイトのコピペ)
# MySQLサーバーへの設定 [mysqld] # 文字コードと文字列ソートの設定 character-set-server = utf8mb4 collation-server = utf8mb4_bin # タイムゾーンの設定 default-time-zone = SYSTEM log_timestamps = SYSTEM # デフォルト認証プラグインの設定 default-authentication-plugin = mysql_native_password # エラーログの設定 log-error = /var/log/mysql/mysql-error.log # スロークエリログの設定 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5.0 log_queries_not_using_indexes = 0 # 実行ログの設定 general_log = 1 general_log_file = /var/log/mysql/mysql-query.log # mysqlオプションの設定 [mysql] # 文字コードの設定 default-character-set = utf8mb4 # mysqlクライアントツールの設定 [client] # 文字コードの設定 default-character-set = utf8mb4
これは結構適当なので必要に応じて変更した方がよいかもです。ローカル用なのでスロークエリとか出力していますが、本番等では設定入れないようにしましょう!
コンテナを起動する
以下のコマンドでdocker-composeを起動します。
※docker-compose.ymlが配置されているディレクトリで実行すること
docker-compose up -d
初回はイメージを作成するのに少し時間がかかりますが、気長に待ちましょう。
コンテナ軌道に成功したらMySQLワークベンチなどのGUIツールやコマンドでlocalhost:9900へ接続しましょう。
sample_tableというテーブルが存在するDBにつながるはずです。
ディスカッション
コメント一覧
まだ、コメントがありません