日本語を扱える MySQL DBを作るための docker-compose

MySQL で日本語や絵文字を扱えるようにするには、MySQL の文字コードを utf8mb4 にするのが望ましい。

だがデフォルトの設定ではそうなっておらず、立ち上げた後に変更するのが地味に面倒なのでハマることが多い。

なので、データベースを立ち上げる時は自分はいつも、以下の docker-compose をコピペして立てている。

docker-compose.yaml

version: "3"

services:
  mysql:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      MYSQL_ROOT_PASSWORD: "rootpass"
      MYSQL_USER: "testuser"
      MYSQL_PASSWORD: "testpass"
      MYSQL_DATABASE: "testdb"
    ports:
      - "3307:3306"

Dockerfile

FROM mysql:5.7-debian

RUN apt-get update && \
    apt-get install -y locales && \
    rm -rf /var/lib/apt/lists/* && \
    echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
    locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8

RUN { \
    echo '[mysqld]'; \
    echo 'character-set-server=utf8mb4'; \
    echo 'collation-server=utf8mb4_general_ci'; \
    echo '[client]'; \
    echo 'default-character-set=utf8mb4'; \
    echo '[mysql]'; \
    echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf

この2つを同じディレクトリに置いて、docker-compose up するだけ。

ポート番号などは用途によって変えること。