2
0

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-composeでのMySQL環境構築(タイムゾーン、UTF-8対応)

Last updated at Posted at 2021-01-24

はてなブログに移行しました

はじめに

ローカル開発環境を立てるためにMySQLのコンテナを用意することがよくあるが、(主にタイムゾーンとUTF-8の対応で)毎回同じようなところで詰まって調べていたので、備忘録も兼ねて自分的な「いつものやつ」を残しておく。

結論

ディレクトリ構成

./docker/myqsl/data をvolumeとすることでDBのデータを永続化する。
なお、初回起動時にこのディレクトリに余計なファイルが入っているとコケることがあるので注意。
.gitkeep は置いておいて大丈夫だった。

構成
.
├── docker
│   └── mysql
│       ├── data
│       │   └── .gitkeep
│       └── Dockerfile
├── .env
├── .gitignore
└── docker-compose.yml

各ファイルの内容

Dockerfile

MySQLのバージョンはお好みで。
タイムゾーンを Asia/Tokyo に、ロケールは en_US.UTF-8 にしている。 日本語にしたければ ja_JP.UTF-8 にする。

Dockerfile
FROM mysql:8.0.23
RUN apt-get update && \
    apt-get install -y tzdata locales && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8

CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]

.env

適宜書き換える。

.env
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=sample
MYSQL_USER=sample_user
MYSQL_PASSWORD=sample_password

MYSQL_PORT=3306
ADMINER_PORT=8080

docker-compose.yml

version は特に理由がなければ最新でよさそう。使えるものは公式のドキュメントでわかる。
Adminerはお好みで入れる。個人的にはローカル用なら入れといて損はしないかなと思っている。

docker-compose.yml
version: '3.8'
services:
  db:
    build: ./docker/mysql
    env_file:
      - .env
    ports:
      - "${MYSQL_PORT}:3306"
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
  adminer:
    image: adminer:4.7.8-standalone
    ports:
      - "${ADMINER_PORT}:8080"

.gitignore

データ永続化用の docker/mysql/data と、認証情報が含まれる .env は必ずignoreする。
.idea はJetBrainsのIDE用。VSCodeなら .vscode になる。

.gitignore
docker/mysql/data
.env
.idea

コマンド

Dockerの基本操作は本稿の趣旨ではないので割愛する。

DBを抹消して作り直すとき

ゴミが残るので、必ず先に down する。

docker-compose down                    # コンテナを止めて削除する

rm -rf ./docker/mysql/data             # volumeでマウントしているデータをディレクトリごと消す
mkdir ./docker/mysql/data              # ディレクトリを作り直す
touch ./docker/mysql/data/.gitkeep     # gitに.gitkeepをコミットしているなら作り直す。
                                       #   ※差分出てるはずなのでgit resetとかで復旧してもよい。

docker-compose up -d                   # 再度立ち上げる。Dockerfileに変更が入っていたら --build も必要

リンク集

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?