1
1

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コンテナの作成(メモ)

Last updated at Posted at 2022-02-05

勉強用メモです.
初めてのSQLを勉強するためにコンテナで環境構築をしました.

実行環境

  • WSL
  • docker : 20.10.12
  • docker-compose : 1.16.1

sakilaデータのダウンロード

本に載っていたリンクにいき,sakila databaseのzipファイルをダウンロードした.

コンテナによる環境構築

  • ディレクトリ構造

※data以下はコンテナ起動時に生成される

.
├── mysql
│   └── db
│       ├── data
│       │   ├── my_testdb
│       │   ├── mysql
│       │   ├── performance_schema
│       │   └── sys
│       ├── my.cnf
│       └── sql
└── sakila-db
  • sakila-db.zip

解凍して,sakila-data.sql, sakila-schema.sqlをdb/sqlに置く.
data/sqlはdocker-entrypoint-initdb.dとしてマウントするため,data/sqlに*.sqlをおいておくと,初期データとして読み込んでくれる.
sakilaの名前は1-sakila-schema.sqlなどにしておき,sakila-schema.sqlが先に実行されるようにする※.

※sqlファイルはアルファベット順で実行されるため,sakila-data.sqlが先に実行されてしまいsakila databaseの中身が空になってしまう

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

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4 
  • ./docker-compose.yml
version: '3'

services:
  mysqldb:
    image: mysql:5.7
    container_name: mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: my_testdb
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    volumes:
      - ./mysql/db/data:/var/lib/mysql 
      - ./mysql/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mysql/db/sql:/docker-entrypoint-initdb.d #初期データのマウント場所
    ports:
      - "3306:3306"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

コンテナ操作

  • 起動

docker-compose up -d

  • コンテナに入る

docker exec -it <コンテナ名> sh
これで読み書き可能なレイヤを作成して,シェルを起動する.

テーブルの確認

mysql -u root -p
パスワードの入力を求められる.今回はrootユーザーのパスワードはrootに設定してあるので,rootと入力してEnter.

SHOW databasesでテーブルの一覧が確認できる

注意ポイント

  • ローカルのMysqlが動いていると,portがかぶって起動できないので,ローカルのMysqlを消すか,portのマッピングを変える.
  • dockerコンテナを一度起動したあと,同じdocker-compose.yamlを使っているとvolumeが残ったままになっていて,データベースの初期データ読み込みが行われないので,もし,初期化が行われない場合は,docker volume lsでvolumeを確認して,docker volume rm <volume名>で消してから起動する.

環境構築完了

参考資料

環境構築の際に参考にさせていただきました.ありがとうございます.

https://www.whizz-tech.co.jp/5472/
https://qiita.com/kondo0602/items/ab0a85fb1e731234eb1a
https://qiita.com/enta0701/items/8e1fd797178c372769c7
https://blog.hiros-dot.net/?p=10469#toc4
https://blog.hiros-dot.net/?p=10469
https://qiita.com/TAMIYAN/items/ed9ec892d91e5af962c6

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?