はじめに
DockerでMySQLを使用する際、日本語対応に手こずりました。その時にLinuxの「ロケール」というものがよくわからず混乱したので、調べてまとめたいと思います。
ロケールとは
In computing, a locale is a set of parameters that defines the user's language, region and any special variant preferences that the user wants to see in their user interface. Usually a locale identifier consists of at least a language code and a country/region code
Locale (computer software) - Wikipedia
ロケールとは言語等を設定するのに必要なもののようです。
Dockerfileで何も設定しない場合
FROM mysql:8.0-debian
上記のDockerfileのように、ロケールについて何も意識しないでDockerイメージを作成した場合、構築したコンテナのロケールがどのようになっているか確認します。
ロケールの設定を確認する
localeコマンドでロケールの設定を確認できます。
# locale
localeコマンドで現在設定されている環境変数の一覧が表示されます。
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
LANG、LANGUAGE、LC_ALL以外が「POSIX」に設定されています。
現在存在するロケールを確認する
# locale -a
aオプションで、現在システムの中にインストールされているロケールを確認できます。
C
C.UTF-8
POSIX
何もしないとロケールは3つだけのようです。
日本語を使用可能にするロケールの設定(Dockerfile)
FROM mysql:8.0-debian
RUN apt-get update
RUN apt-get -y install locales-all
ENV LANG ja_JP.UTF-8
他の設定はせず、ロケールの日本語設定だけを考えたファイルです。
ロケールのインストール
RUN apt-get update
RUN apt-get install locales-all
ロケールを全てインストールすることで、今回使用したいと思っている「ja_JP.utf8」をダウンロードできます。
この「locales-all」でインストールすると、全部で496個のロケールがインストールされます。「ja_JP.utf8」だけインストールできないかと調べましたが、短時間では特に方法が見つけられなかったので、今回は「locales-all」で良いかなと思います。
環境変数の設定
ENV LANG ja_JP.UTF-8
環境変数LANGにロケールの「ja_JP.UTF-8」を設定します。
日本語対応後のロケール設定
LANG=ja_JP.UTF-8
LANGUAGE=
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=
LANGを設定することで、LANGUAGE、LC_ALL以外の全ての環境変数が「ja_JP.UTF-8」となります。
いちおうLANGを設定することでターミナル上でも日本語は使えるようになりますが、何かの機会に使うかもしれないので、LANGUAGE、LC_ALLも設定した方が良いかもしれません。