【Docker】docker-composeでmysqlのコンテナを立てる

2021年2月9日

記事を書くのがだいぶ久しぶりになってしまいました。別段忙しいわけではなかったのですが、なんとなくやる気がしなかったという感じです(笑)

さて、最近は開発環境で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につながるはずです。