動作環境
- Windows11
- Docker version 20.10.23
詰まったこと
データベースの学習のためにDockerにてMySQL環境を構築しました。ところが、コンテナに入った状態でコマンドライン上に日本語を入力してエンターを押すと、入力した日本語が消えるといった事象に出くわしました。日本語のサンプルデータを扱えなくて困りました。。
解決策
もともとはcompose.yml
でイメージを指定して環境構築していましたが、ビルド時にパッケージをインストールする処理が必要になるのでDockerfile
も用意します。
ポイントは以下の通りです。
-
イメージに
mysql:8.0-debian
を指定
apt-get
コマンド(APTパッケージ管理システム)を使用するには、ベースイメージにDebian
やUbuntu
を指定する必要があります。
mysql:8.0
ではapt-get
が使えず、ビルド中にエラーになります。 -
locales-all
のインストールコマンドを記述
ロケールとは国・地域等によって違うタイムゾーンや書式等をシステムに伝える機能です。
ロケールを日本語化するためにパッケージのインストールが必要です。 -
環境変数
LANG
にja_JP.UTF-8
を設定
これで実際にコンテナ内のロケールが日本語化されます。
FROM mysql:8.0-debian
RUN apt-get update \
&& apt-get install -y \
locales-all \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
ENV TZ=Asia/Tokyo
ENV LANG ja_JP.UTF-8
compose.yml
の内容です。
version: "3.9"
services:
db:
build:
context: .
dockerfile: ./docker/db/Dockerfile
restart: always
ports:
- 3306:3306
env_file:
- ./docker/db/.env
volumes:
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/data:/var/lib/mysql
- ./docker/db/init.sql:/docker-entrypoint-initdb.d/init.sql
ディレクトリ構成も載せておきます。
.
├── .gitignore
├── compose.yml
└── docker
└── db
├── .env
├── Dockerfile
├── data
│ └── .gitkeep
├── init.sql
└── my.cnf
あとがき
学習環境として利用していたので、コマンドやファイル等、今回の件と関係ないものも色々ありますがご了承ください。
間違っている部分やアドバイス等がありましたら、ご教授いただけますと幸いです。