dockerを使ってMySQL学習環境を構築する

プログラミング

基礎からのMySQLで学習中

基礎からのMySQL 第3版 | SBクリエイティブ
2012年の改訂版から5年半ぶりの改訂 データベースに触れるのが本当に初めてという方に向けて、「データベースと

本ではXAMPP、MAMPで環境構築の説明から入っている。正直懐かしいというか「今そんなのインストールしないでdockerでやるよな」と思い、自分で環境を作ってみることに。

docker MySQL公式のイメージを使う

公式イメージあるんだからそれ使えばいいじゃん。」くらいのスタートから。パラメーター盛々にしない最低限だとどうなるかやった結果がこれ。

docker run -d -e MYSQL_ROOT_PASSWORD=root mysql

環境変数MYSQL_ROOT_PASSWORDだけは指定してあげないと下のように怒られる。

(最初MYSQL_ROOT_PASSWORDも設定しないでExpiredって何だよって小一時間、原因がlogみるまで全く分からなかったのは内緒)

You need to specify one of the following as an environment variable:

    - MYSQL_ROOT_PASSWORD

    - MYSQL_ALLOW_EMPTY_PASSWORD

    - MYSQL_RANDOM_ROOT_PASSWORD

中に入って操作したいがコンテナ名も指定してないから

docker ps

docker psでコンテナidを確認

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                 NAMES
cd2c414780ee   mysql     "docker-entrypoint.s…"   10 seconds ago   Up 9 seconds   3306/tcp, 33060/tcp   condescending_golick

コンテナidを指定してexec bashで中へ入る。(git commit idみたいにidは全文字入れなくてもいける。)

docker exec -it cd2c bash

bash入ったらmysqlコマンドでrootログイン

bash-4.4# mysql -u root -proot

入れた。(パスワードの入力方法のwarningはスルー)

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

正直ボリュームの理解がイマイチだからデータの永続化で躓きそうと思いながら、、、まあ毎回データ消えるコンテナでもSQL文色々打ちながら覚えていくだけだし、大丈夫かな?という考えに至り、とりあえずスタート地点に立った。

日本語入力ができなくて躓く

データが残らないコンテナで、本読みながらコマンドラインでSQL文をふむふむとか思いながら入力していて、次の文ではまる。

INSERT INTO tb1 VALUES('A101','佐藤',40);

!? 佐藤が入力出来ねえ。

どうやらdocker execで中に入っての操作だと日本語が入力できないらしい…。

とりあえず’sato’とやって進めるが、なんとか出来ないものかずっとひっかかりが残る…。

公式docker-compose通りadminerから操作で日本語入力できた

docker mysqlの日本語入力どうにかならないものかと考えながら、コンテナLinuxに日本語localをインストールすればいいらしいが、Linuxとか触ったことないしコマンド見ても何しているかわからず、すぐ出来なそう…。

phpMyAdminのコンテナとか入れて、ブラウザからSQL文ポチポチ打つ形でやるかといろいろ調べていたら公式docker-composeに以下のようなのを見つける。

# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: mysql
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

ports: – 8080:8080ってあるからこれブラウザからmySQL操作できるやつなんじゃね?って思い。

docker-compose up -d

書いてある通り起動し、http://localhost:8080にアクセス。

ブラウザからアクセス出来た!

SQL文で日本語入力出来る!

データも反映されている!

adminerとか初めて聞いたけど、日本語使えるからこれで本の勉強していくことに決定。

ボリュームを使ってデータの永続化は簡単にできた

バインドマウントするためにローカルパス:コンテナ内パスの一文をいれるだけ。

docekr-compose.ymlのenvironmentの下に

    volumes:
      - ./data/mysql:/var/lib/mysql

と入れるだけ。

ローカルフォルダに以下のようなものが出来てdocker-compose downしてupしてもmysqlのデータが消えないコンテナができた。

以下docekr-compose.yml全文

version: "3"
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./data/mysql:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

いずれは日本語が入力できるMySQL環境をdockerで作りたい

要はlinuxに日本語入れて、MySQLもutf8mb4設定すればいいっぽいけど、イマイチわからん。

だいたいdockefileを噛ませたdocker-composeなんてあの本になかったぜ。もうちょっと色んな記事見て勉強します。

とりあえずadminerとかいうのを知れたから満足。

プログラミング学習って公式に始まり公式に戻るよなと思った休日でした。

コメント

タイトルとURLをコピーしました