4
2

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 3 years have passed since last update.

簡易なMySQL5.6をdocker-composeで用意

Posted at

SQLステートメントの挙動を勉強するためにMySQLだけの環境がほしかったのでDockerで作成しました。
少し前に利用していたものですが、今も使えるのでここに認めておきます。

概要

達人に学ぶSQL徹底指南書を読んでSQLを勉強していましたが、やはり直接SQLを叩いて学びたいので環境を用意しました。
この書籍の第2版ではウィンドウ関数について記述されています。ウィンドウ関数が対応しているMySQLのバージョンは8.0以上が必要なのでご注意ください。

対応したこと

  • linux内の日本語入出力に対応
  • mysqlの日本語利用に対応
  • viを導入してmysql入力を楽に

今回使う書籍がtable定義で日本語を多用するので少し苦労しました。

構成

.
├── Dockerfile
├── data
└── docker-compose.yml

Dockerfile

FROM mysql:5.6

RUN apt-get update && \
    apt-get install -y locales vim && \
    rm -rf /var/lib/apt/lists/* && \
    echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
    locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8

RUN { \
    echo '[mysqld]'; \
    echo 'character-set-server=utf8mb4'; \
    echo 'collation-server=utf8mb4_general_ci'; \
    echo '[client]'; \
    echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf

docker-compose.yml

mysql:
  build: .
  dockerfile: Dockerfile-MySQL
  environment:
    MYSQL_ROOT_PASSWORD: root         #rootユーザ用のパスワード
    MYSQL_USER: user                  #作業ユーザ名
    MYSQL_PASSWORD: password          #作業ユーザ用のパスワード
    MYSQL_DATABASE: test              #作成するDB名
    TZ: "Asia/Tokyo"
  ports:
    - 3306:3306
  volumes:
    - ./data:/var/lib/mysql

Docker起動

docker-compose build
docker-compose up -d

コンテナ内にログイン

docker-compose exec mysql # コンテナ内に入る
docker-compose exec mysql mysql -u root -p # mysqlにrootとしてログイン password: root
docker-compose exec mysql mysql -u user -p # mysqlにuserとしてログイン password: password

文字コードを確認してみましょう。

mysql> use test
Database changed
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MySQL内でviを起動

以下でviが起動

mysql> \e
CREATE TABLE `test_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `income` int(11) DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

:wqでviから抜けるとmysql>に戻るので以下のように;とエンターを入力すると実行されます。

mysql> \e
mysql> ;
4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?