5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerのmysqlのコンテナを日本語対応にする

Last updated at Posted at 2022-10-17

背景

DockerでMySQLのコンテナを立てて、いろいろしてみようと思っていたところ、日本語対応していないことに気がついた。

記事を探してみると、解決方法がいっぱいでてきた。読んでみると、Debian版のmysqlイメージを使用して、aptを駆使して日本語対応しようという方法だった。
でも、armアーキテクチャでは、Debian版は対応していないっぽい。
M1搭載Macだと、Oracle Linux版mysqlイメージで日本語対応させるしかなさそう。

failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:159ec

MySQLを日本語対応する方法

なんでもいいから、とりあえずMySQLコンテナを日本語化したい人は飛ばしてくださいな。

mysqlのイメージのもととなるイメージは「Oracle Linux slim」が使用されているので、もろもろのインストールはmicrodnfコマンドを使う。

Oracle Linux slimで、次の操作をすると、日本語の環境になる。

bash
$ sudo microdnf update -y
$ sudo microdnf install -y glibc-locale-source
$ sudo localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
$ export LANG=ja_JP.UTF-8        
$ export LC_ALL=ja_JP.UTF-8
$ locale  #きちんと変更されているかの確認
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=ja_JP.UTF-8

MySQLコンテナの日本語化の方法

先ほどの方法をdocker-composeで設計すると以下のようになる。

% tree
.
├── docker-compose.yml
└── Dockerfile
docker-compose.yml
version: "3"

services:
  mysql:
    container_name: "mysql"
    hostname: "mysql"
    build:
      context: "."
      dockerfile: "Dockerfile"
    # ボリューム
    volumes:
      - ./mysql/conf.d/:/etc/mysql/conf.d/
      - ./mysql/.db/:/var/lib/mysql        # データベースのデータを残すため
    ports:
      - "3306:3306"
Dockerfile
FROM mysql:8

ENV MYSQL_ROOT_PASSWORD password
ENV MYSQL_DATABASE admin-device
ENV TZ "Asia/Tokyo"

RUN microdnf update -y \
    && microdnf install -y glibc-locale-source \
    && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8

ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8

追記

「もしかしたら、この設定も必須かもしれない」と思い、追記しました。

MySQLの設定は、/etc/mysql/conf.d/my.cnfに記載すればいいみたい。
なので、こんな感じのmy.cnfに。

my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

以下のようなディレクトリにして、Dockerfileも編集しておく。(composeファイルはそのままで大丈夫)
また、データベースの初期化を行いたい場合は、init.dというディレクトリを作成して、sqlファイルをぶち込んでおく。

% tree
.
├── docker-compose.yml
├── Dockerfile
├── conf.d
│   └── my.cnf
└── init.d
    └── init.sql
Dockerfile
FROM mysql:8-oracle

ENV MYSQL_ROOT_PASSWORD password
ENV TZ "Asia/Tokyo"

RUN microdnf update -y \
    && microdnf install -y glibc-locale-source \
    && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8

ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8

COPY conf.d /etc/mysql/conf.d
COPY init.d /docker-entrypoint-initdb.d

Dockerfileの最後の2行に、ローカルのディレクトリをコンテナ内にコピーする命令を追加した。

これで、M1 MacのDockerでMySQLコンテナの日本語化&初期化が可能。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?